使用GTMOAuth2ViewControllerTouch进行身份验证时执行moment.insert

时间:2013-12-07 22:27:01

标签: ios iphone objective-c google-api google-plus

我正在尝试使用google-api-objectivec-client library在用户的Google+帐户中插入“Moment”。我认为身份验证过程正常。这与我设置YouTube身份验证的方式基本相同,但具有正确的范围和钥匙串名称。但是,当我尝试运行查询以插入时,我得到以下错误:

  

错误Domain = com.google.GTLJSONRPCErrorDomain Code = 401“操作   无法完成。 (未授权)“

在仔细查看Google的文档后(here),我发现了以下评论:

  

在对moment.insert进行身份验证时,您必须包含data-requestvisibleactions   参数,用于指定应用程序将写入哪些类型的应用程序活动。

Google有几个如何使用其他编程语言执行此操作的示例,但它们没有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操作而不会收到错误?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用data-requestvisibleactions中的Java脚本代码添加Authentication。使用authorized java script后,它将获得所有类型的插入时刻的授权。目标c中没有方法可以在代码中添加data-requestvisibleactions。只有Java Script可以选择。

更多出轨请参阅THIS