내 앱에서 "오프라인 액세스 가능"권한을 요청하는 이유는 무엇입니까?

Creagen

내 앱에서 "오프라인 액세스 가능"권한을 요청하는 이유는 무엇입니까? 가장 이상한 일입니다. 나는 약간의 검색을 수행했지만 실제로 작동하는 것을 찾지 못했습니다. 범위에 대해 다음을 사용해 보았습니다.

https://www.googleapis.com/auth/plus.profile.emails.read 
https://www.googleapis.com/auth/plus.login

그리고 그것은 도움이되지 않는 것 같습니다.

다음은 무슨 일이 일어나고 있는지 확인하는 데 도움이되는 스크린 샷과 내 코드입니다.

여기에 이미지 설명 입력

내 코드 중 일부 :

    #import "ViewController.h"

NSString *callbakc =  @"http://localhost/";
NSString *client_id = @“CLIENT ID“;
NSString *scope = @"https://www.googleapis.com/auth/userinfo.email+https://www.googleapis.com/auth/userinfo.profile+https://www.google.com/reader/api/0/subscription";
NSString *secret = @“SECRET”;
NSString *visibleactions = @"http://schemas.google.com/AddActivity";

@interface ViewController () {
NSString *authAccessToken;
UIAlertController *alertController;
}

@property (strong, nonatomic) NSMutableData *receivedData;
@property (weak, nonatomic) IBOutlet UIWebView *webView;

@end

@implementation ViewController

#pragma mark - Lifecycle

- (void)viewDidLoad {
[super viewDidLoad];


NSString *url = [NSString stringWithFormat:@"https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=%@&redirect_uri=%@&scope=%@&data-requestvisibleactions=%@",client_id,callbakc,scope,visibleactions];

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10];

[_webView loadRequest:request];
}



#pragma mark - WebView Delegate

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {

[self performSelector:@selector(progressDelay:) withObject:nil afterDelay:0.0];
if ([[[request URL] host] isEqualToString:@"localhost"]) {

    // Extract oauth_verifier from URL query
    NSString* verifier = nil;
    NSArray* urlParams = [[[request URL] query] componentsSeparatedByString:@"&"];
    for (NSString* param in urlParams) {
        if (![param isEqualToString:@"error=access_denied"]) {
            NSArray* keyValue = [param componentsSeparatedByString:@"="];
            NSString* key = [keyValue objectAtIndex:0];
            if ([key isEqualToString:@"code"]) {
                verifier = [keyValue objectAtIndex:1];
//                    NSLog(@"verifier %@",verifier);
                break;
            }
        }
        else {
            [self.navigationController popViewControllerAnimated:NO];
        }
    }

    if (!verifier==0) {
        [self showAlertViewWithTitle:@"" message:@"Please wait" okAction:NO];

        NSString *data = [NSString stringWithFormat:@"code=%@&client_id=%@&client_secret=%@&redirect_uri=%@&grant_type=authorization_code", verifier,client_id,secret,callbakc];
        NSString *url = [NSString stringWithFormat:@"https://accounts.google.com/o/oauth2/token"];
        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]];
        [request setHTTPMethod:@"POST"];
        [request setHTTPBody:[data dataUsingEncoding:NSUTF8StringEncoding]];

        [request setHTTPShouldHandleCookies:NO];

        NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
        NSLog(@"Connection: %@", theConnection);

        self.receivedData = [[NSMutableData alloc] init];
    }
    else {
        // cancel button click
        NSLog(@"not Verified!!");
    }

    return NO;
}
return YES;
}

- (void)webViewDidStartLoad:(UIWebView *)webView {
// show progress
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
[alertController dismissViewControllerAnimated:YES completion:nil];
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {

if (error.code==102) //Frame load interrupted
    return;

[alertController dismissViewControllerAnimated:YES completion:nil];
[self showAlertViewWithTitle:@"Error" message:[error localizedDescription] okAction:YES];
}

#pragma mark - NSURLConnection Delegate

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[self.receivedData appendData:data];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
[self showAlertViewWithTitle:@"Error" message:[NSString stringWithFormat:@"%@", error] okAction:YES];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

NSString *response = [[NSString alloc] initWithData:self.receivedData encoding:NSUTF8StringEncoding];

NSData *data = [response dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *tokenData = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

if ([tokenData objectForKey:@"access_token"]) {
    authAccessToken = [tokenData objectForKey:@"access_token"];
    [self getUserInfo:authAccessToken];
}
else {
    [alertController dismissViewControllerAnimated:YES completion:nil];
    NSLog(@"RESULT: %@", tokenData);
    [self showAlertViewWithTitle:[tokenData objectForKey:@"name"] message:[NSString stringWithFormat:@"%@", tokenData] okAction:YES];

    // Flush all cached data
    [[NSURLCache sharedURLCache] removeAllCachedResponses];
}

}

#pragma mark - Private Method Implementation

-(void)getUserInfo:(NSString *)token {
NSString *url = [NSString stringWithFormat:@"https://www.googleapis.com/oauth2/v1/userinfo?access_token=%@",token];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]];
[request setHTTPMethod:@"GET"];
[request setHTTPShouldHandleCookies:NO];

NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:request delegate:self];
NSLog(@"Connection: %@", theConnection);

self.receivedData = [[NSMutableData alloc] init];

}

-(void)progressDelay:(id)sender {
// Dismiss progress
}


@end

어떤 도움이라도 대단히 감사하겠습니다!

감사합니다

Wyetro

https://stackoverflow.com/questions/32210920/why-is-my-app-asking-for-permission-to-have-offline-access?answertab=oldest#tab-top 에서 가져온 것입니다 .

이것은 정상적인 동작이며 사용자가 이미 권한을 부여했을 때 발생합니다.

기본적으로 표시되는 것을 원하지 않는 한 걱정할 필요가 없습니다.이 경우 새 토큰을 요청하기 전에 사용자 이전 토큰의 인증을 해제해야합니다.

이전에이 작업을 수행하지 않았기 때문에 정확히 어떻게해야할지 모르겠지만 새 토큰을 승인하기 전에 이전 토큰의 승인을 취소해야합니다.

-(void)getUserInfo:(NSString *)token방법 을 수정해야합니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

내 Android 앱이 설치 권한을 요청하지 않는 이유는 무엇입니까?

분류에서Dev

"Ubuntu 앱"이 내 Google 계정에 대한 전체 액세스 권한을 갖는 이유는 무엇입니까?

분류에서Dev

"Ubuntu 앱"이 내 Google 계정에 대한 전체 액세스 권한을 갖는 이유는 무엇입니까?

분류에서Dev

내 워드 프레스 사이트에서 http 인증을 요청하는 이유는 무엇입니까?

분류에서Dev

Android 에뮬레이터가 내 매니페스트 권한을 무시하는 이유는 무엇입니까?

분류에서Dev

Jetpack Compose에서 권한을 요청하는 방법은 무엇입니까?

분류에서Dev

Ionic 앱에서 카메라 권한을 요청하는 이유는 무엇입니까? 그리고 어떻게 끄나요?

분류에서Dev

docker-machine VM 내에 파일을 생성하면 권한이 거부되는 이유는 무엇입니까?

분류에서Dev

내 Facebook 앱이 사용자에게 요청하는 권한을 어떻게 확인합니까?

분류에서Dev

RPM 또는 DEB 패키지 내에서 파일 소유권이 중요한 이유는 무엇입니까?

분류에서Dev

내 URL에 집이 필요한 이유는 무엇입니까?

분류에서Dev

PUT 및 DELETE : 내 HTML에서 이러한 요청을 호출하는 방법은 무엇입니까?

분류에서Dev

이 POST 요청이 서버에 JSON 문자열을 보내지 않는 이유는 무엇입니까?

분류에서Dev

관리자 권한 동의 요청이 모든 권한을 요청하는 이유는 무엇입니까?

분류에서Dev

내 앱이 내 API에서 JSON을 읽을 수없는 이유는 무엇입니까?

분류에서Dev

브라우저가 정적 파일에 대한 요청을 보내는 이유는 무엇입니까?

분류에서Dev

Backbone이 상위 디렉토리의 폴더에서 ajax 요청을 보내는 이유는 무엇입니까?

분류에서Dev

내 앱이 Azure AD 앱에 구성되지 않은 권한을 요청하는 이유

분류에서Dev

내 크롬 확장 프로그램에 필요한 권한을 확인하는 방법은 무엇입니까?

분류에서Dev

내가 다른 인증을 한 후 sudo가 창에서 비밀번호를 요청하는 이유는 무엇입니까?

분류에서Dev

내가 다른 인증을 한 후 sudo가 창에서 비밀번호를 요청하는 이유는 무엇입니까?

분류에서Dev

동일한 볼륨 내에서 파일을 이동할 때 파일 권한이 유지되는 이유는 무엇입니까?

분류에서Dev

내 앱을 처음 열면 Google Play에서 충돌하는 이유는 무엇입니까?

분류에서Dev

내 앱에서 사용하지 않는다고 생각 했는데도 "마이크 : 오디오 녹음"권한을 요청합니다.

분류에서Dev

index.php 권한 666에서 "500 내부 서버 오류"가 발생하는 이유는 무엇입니까?

분류에서Dev

Windows 10에서 항상 파일 이동에 대한 관리자 권한을 요청하는 이유는 무엇입니까?

분류에서Dev

내 ASP.NET 웹 서비스가이 POST 요청을 완료 할 수없는 이유는 무엇입니까?

분류에서Dev

내 Android 앱이 저장소에서 읽을 수없는 이유는 무엇입니까?

분류에서Dev

expressjs 앱에서 http 요청을 거부하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    내 Android 앱이 설치 권한을 요청하지 않는 이유는 무엇입니까?

  2. 2

    "Ubuntu 앱"이 내 Google 계정에 대한 전체 액세스 권한을 갖는 이유는 무엇입니까?

  3. 3

    "Ubuntu 앱"이 내 Google 계정에 대한 전체 액세스 권한을 갖는 이유는 무엇입니까?

  4. 4

    내 워드 프레스 사이트에서 http 인증을 요청하는 이유는 무엇입니까?

  5. 5

    Android 에뮬레이터가 내 매니페스트 권한을 무시하는 이유는 무엇입니까?

  6. 6

    Jetpack Compose에서 권한을 요청하는 방법은 무엇입니까?

  7. 7

    Ionic 앱에서 카메라 권한을 요청하는 이유는 무엇입니까? 그리고 어떻게 끄나요?

  8. 8

    docker-machine VM 내에 파일을 생성하면 권한이 거부되는 이유는 무엇입니까?

  9. 9

    내 Facebook 앱이 사용자에게 요청하는 권한을 어떻게 확인합니까?

  10. 10

    RPM 또는 DEB 패키지 내에서 파일 소유권이 중요한 이유는 무엇입니까?

  11. 11

    내 URL에 집이 필요한 이유는 무엇입니까?

  12. 12

    PUT 및 DELETE : 내 HTML에서 이러한 요청을 호출하는 방법은 무엇입니까?

  13. 13

    이 POST 요청이 서버에 JSON 문자열을 보내지 않는 이유는 무엇입니까?

  14. 14

    관리자 권한 동의 요청이 모든 권한을 요청하는 이유는 무엇입니까?

  15. 15

    내 앱이 내 API에서 JSON을 읽을 수없는 이유는 무엇입니까?

  16. 16

    브라우저가 정적 파일에 대한 요청을 보내는 이유는 무엇입니까?

  17. 17

    Backbone이 상위 디렉토리의 폴더에서 ajax 요청을 보내는 이유는 무엇입니까?

  18. 18

    내 앱이 Azure AD 앱에 구성되지 않은 권한을 요청하는 이유

  19. 19

    내 크롬 확장 프로그램에 필요한 권한을 확인하는 방법은 무엇입니까?

  20. 20

    내가 다른 인증을 한 후 sudo가 창에서 비밀번호를 요청하는 이유는 무엇입니까?

  21. 21

    내가 다른 인증을 한 후 sudo가 창에서 비밀번호를 요청하는 이유는 무엇입니까?

  22. 22

    동일한 볼륨 내에서 파일을 이동할 때 파일 권한이 유지되는 이유는 무엇입니까?

  23. 23

    내 앱을 처음 열면 Google Play에서 충돌하는 이유는 무엇입니까?

  24. 24

    내 앱에서 사용하지 않는다고 생각 했는데도 "마이크 : 오디오 녹음"권한을 요청합니다.

  25. 25

    index.php 권한 666에서 "500 내부 서버 오류"가 발생하는 이유는 무엇입니까?

  26. 26

    Windows 10에서 항상 파일 이동에 대한 관리자 권한을 요청하는 이유는 무엇입니까?

  27. 27

    내 ASP.NET 웹 서비스가이 POST 요청을 완료 할 수없는 이유는 무엇입니까?

  28. 28

    내 Android 앱이 저장소에서 읽을 수없는 이유는 무엇입니까?

  29. 29

    expressjs 앱에서 http 요청을 거부하는 방법은 무엇입니까?

뜨겁다태그

보관