使用GTMOAuth2ViewControllerTouch进行身份验证时执行插入



我正试图使用Google api objectivec客户端库将"Moment"插入用户的Google+帐户。我认为身份验证过程工作正常。这主要与我设置YouTube身份验证的方式相同,但具有正确的作用域和密钥链名称。然而,当我尝试运行查询以插入时,我会出现以下错误:

错误域=com.google.GTLJSONRPCErrorDomain代码=401"操作无法完成。(未经授权)"

在仔细查看了谷歌的文档后(这里),我发现了以下评论:

在验证moments.insert时,必须包含data-requestvisibleactions参数,指定应用程序将编写的应用程序活动类型。

谷歌有几个关于如何使用其他编程语言实现这一点的例子,但他们没有任何关于objective-c库的例子,objective-c项目也没有任何关于如何实现这一目标的例子。

我知道还有另一种身份验证方法,使用GPPSignIn按钮,它可以设置操作。然而,我的应用程序正在使用多个其他Google API客户端(YouTube、YouTube Analytics和URL Shortener)。将GoogleOpenSource.framework与其他Objective-C库混合会导致冲突。因此,我需要使用GTMOAuth2ViewControllerTouch类。

我的身份验证码

    GTMOAuth2ViewControllerTouch *viewController =
    [GTMOAuth2ViewControllerTouch controllerWithScope:kGTLAuthScopePlusLogin
                                             clientID:kGoogleApiClientId
                                         clientSecret:kGoogleApiClientSecret
                                     keychainItemName:kGooglePlusKeychainName
                                    completionHandler:^(GTMOAuth2ViewControllerTouch *viewController, GTMOAuth2Authentication *auth, NSError *error) {
              if (error)
                  NSLog(@"Error: %@", error.description);
              else
                  app.googlePlusService.authorizer = auth; //this sets a property of my app delegate, to be used elsewhere in the application

    }];
    [self.navigationController pushViewController:viewController animated:YES];

我用来插入"力矩"的代码

NSString *shareUrl = "http://www.google.com"; //just for this example
GTLPlusMoment *moment = [[GTLPlusMoment alloc] init];
moment.type = @"http://schemas.google.com/AddActivity";
GTLPlusItemScope *target = [[GTLPlusItemScope alloc] init];
target.url = shareUrl;
moment.target = target;
GTLQueryPlus *query =
[GTLQueryPlus queryForMomentsInsertWithObject:moment
                                       userId:@"me"
                                   collection:kGTLPlusCollectionVault];
[app.googlePlusService executeQuery:query
                  completionHandler:^(GTLServiceTicket *ticket,
                                      id object,
                                      NSError *error) {
     if (error) {
         NSLog(@"Got bad response from plus.moments.insert: %@", error);                     
     } else {
         NSLog(@"Moment inserted: %@",moment.identifier);
     }
 }];

是否有人成功地找到了将data-requestvisibleactions参数添加到身份验证调用或queryForMomentsInsertWithObject方法的位置,以允许他们在不收到错误的情况下执行moments.insert操作?

谢谢!

您可以在Authentication中使用Java Script代码添加data-requestvisibleactions。一旦authorizedjava script,它将被授权用于所有类型的插入力矩。目标c中没有在代码中添加data-requestvisibleactions的方法。只有该选项可以通过Java Script实现。

欲了解更多脱轨信息,请参阅本

相关内容

  • 没有找到相关文章

最新更新