在Objective-C中刷新Gmail API访问令牌的正确方法

艺术风格

我通过这种方法获得访问令牌:

- (void)viewController:(GTMOAuth2ViewControllerTouch *)viewController
  finishedWithAuth:(GTMOAuth2Authentication *)authResult
             error:(NSError *)error {
if (error != nil) {
    [self showAlert:@"Authentication Error" message:error.localizedDescription];
    self.service.authorizer = nil;
}
else {
    self.service.authorizer = authResult;

    NSLog(@"Token: %@ id: %@", authResult.accessToken, authResult.userID);
    [self makeGmailLabelVisibleWithToken:authResult.accessToken]; //make an authorized request to gmailAPI with the access token

    [self dismissViewControllerAnimated:YES completion:nil];

  }
}

因此,经过auth可以正常工作,但是一段时间后它停止工作(我想是因为令牌已过期)。另外,如果我使用

[authResult refreshToken]

代替

authResult.accessToken

它不会工作。

那么刷新Gmail访问令牌的正确方法是什么,我应该采用哪种方法?

PS:文档

- (void) refreshTokensWithHandler:(GIDAuthenticationHandler)handler

应该有帮助,但是我还没有找到任何样品。

艺术风格

因此,这实际上很简单。要刷新令牌,您需要使用以下代码:

self.service = [[GTLServiceGmail alloc] init];
self.service.authorizer =
[GTMOAuth2ViewControllerTouch authForGoogleFromKeychainForName:kKeychainItemName
                                                      clientID:kClientID
                                                  clientSecret:nil];

[[GIDSignIn sharedInstance] setScopes:[NSArray arrayWithObject: @"https://www.googleapis.com/auth/plus.me"]];
[GIDSignIn sharedInstance].clientID = kClientID;

GTMOAuth2Authentication *auth = [GTMOAuth2ViewControllerTouch authForGoogleFromKeychainForName:kKeychainItemName
                                                                                      clientID:kClientID
                                                                                  clientSecret:nil];

NSLog(@"accessToken: %@", auth.accessToken); //If the token is expired, this will be nil

// authorizeRequest will refresh the token, even though the NSURLRequest passed is nil
[auth authorizeRequest:nil
     completionHandler:^(NSError *error) {
         if (error) {
             NSLog(@"error: %@", error);
         }
         else {
             [USER_CACHE setValue:auth.accessToken forKey:@"googleAccessToken"];
         }
     }];

您可以将其粘贴到例如ViewDidLoad方法中。因此,执行此代码后,您将在UserDefaults中拥有有效的访问令牌(在我的示例中为USER_CAHCE)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Objective-C中刷新Gmail API访问令牌的正确方法

来自分类Dev

如何使用Objective-C获取Gmail API的访问令牌

来自分类Dev

通过Objective-C获取Gmail API的访问令牌

来自分类Dev

gmail API中的internalDate或Date-Objective-C库

来自分类Dev

如何正确同步对Objective-C中的实例变量的访问

来自分类Dev

刷新令牌是访问Google gmail API以便重复离线使用的规范方法吗?

来自分类Dev

刷新令牌是访问Google gmail API以便重复脱机使用的规范方法吗?

来自分类Dev

请求访问Objective-C中的相机

来自分类Dev

访问Objective C中的继承数组

来自分类Dev

从Objective-C中的子类访问ivar

来自分类Dev

在Objective-C中以编程方式访问方法参数

来自分类Dev

在Objective-C中以编程方式访问方法参数

来自分类Dev

在Swift中重写Objective C类方法

来自分类Dev

Objective-C中的工厂方法

来自分类Dev

Objective-C中的WKWebview委托方法

来自分类Dev

webView中的按钮执行Objective C方法

来自分类Dev

Objective-C中的抽象方法/类?

来自分类Dev

Swift 中的 Objective C 类方法调用

来自分类Dev

Instagram API 访问令牌刷新?

来自分类Dev

Objective-C setContentOffset方法

来自分类Dev

Objective-C类方法

来自分类Dev

递归方法Objective-C

来自分类Dev

在Objective-C中方法混乱的正确方法

来自分类Dev

如何在Objective C中正确分配方法

来自分类Dev

从Objective-C到Swift:转换for循环的正确方法

来自分类Dev

如何从Swift语言访问Objective-C类方法

来自分类Dev

何时避免在Objective C中使用访问器方法

来自分类Dev

如何访问Objective C未命名参数的某些方法?

来自分类Dev

何时避免在Objective C中使用访问器方法

Related 相关文章

热门标签

归档