OGeek|极客世界-中国程序员成长平台

标题: ios - 我的应用正在请求 “Have offline access” 的许可,为什么? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 16:06
标题: ios - 我的应用正在请求 “Have offline access” 的许可,为什么?

我的应用请求“离线访问”权限,为什么?这是最奇怪的事情。我做了一些搜索,并没有真正找到任何有效的方法。我已经尝试将这些用于范围:

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

这似乎没有帮助。

以下是屏幕截图和我的一些代码,可帮助您了解发生了什么:

enter image description here

我的一些代码:

    #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)webViewUIWebView*)webView shouldStartLoadWithRequestNSURLRequest*)request navigationTypeUIWebViewNavigationType)navigationType {

[self performSelectorselector(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"lease 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:@"OST"];
        [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)webViewDidStartLoadUIWebView *)webView {
// show progress
}

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

- (void)webViewUIWebView *)webView didFailLoadWithErrorNSError *)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)connectionNSURLConnection *)connection didReceiveDataNSData *)data {
[self.receivedData appendData:data];
}

- (void)connectionNSURLConnection *)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

任何帮助将不胜感激!

谢谢



Best Answer-推荐答案


这是来自 https://stackoverflow.com/questions/32210920/why-is-my-app-asking-for-permission-to-have-offline-access?answertab=oldest#tab-top :

This is normal behavior and occurs when the user has granted permission already.

Basically, no need to worry about it unless you really don't want that showing up, in that case, you need to un auth the users old token before requesting a new one.

我不确定如何操作,因为我以前没有这样做过,但是在您授权新 token 之前,您需要取消对旧 token 的授权。

您需要修改 -(void)getUserInfo:(NSString *)token 方法。

关于ios - 我的应用正在请求 “Have offline access” 的许可,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32195788/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4