2013-12-07 39 views
4

我正在嘗試使用google-api-objectivec-client library將「Moment」插入用戶的Google+帳戶。我認爲認證過程正常工作。這與我設置YouTube身份驗證的方式基本相同,但具有正確的範圍和鑰匙串名稱。然而,當我嘗試運行查詢插入的那一刻,我得到了以下錯誤:使用GTMOAuth2ViewControllerTouch進行身份驗證時執行moments.insert

Error Domain=com.google.GTLJSONRPCErrorDomain Code=401 "The operation couldn’t be completed. (Unauthorized)"

在谷歌的文檔更仔細尋找後(here),我發現了以下評論:

When authenticating for moments.insert, you must include the data-requestvisibleactions parameter to specify which types of App Activities your application will write.

谷歌有幾個例子說明如何用其他編程語言做到這一點,但是他們沒有任何關於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操作而不接收e RROR?

謝謝!

回答

0

您可以使用Java腳本代碼在Authentication中添加data-requestvisibleactions。一旦你authorizedjava script,它將被授權所有類型的插入時刻。目標c中沒有方法在您的代碼中添加data-requestvisibleactions。只有選項可以通過Java Script進行。

更多出軌請參考THIS

+1

感謝您的回覆。不幸的是,我仍在尋找是否有人使用objective-c API客戶端找到了解決方法。由於我已經在使用此庫來驗證YouTube,因此我無法使用GoogleOpenSource.framework實施GPPSignin控件,該控件確實爲requestvisibleactions值提供了支持。 –

+0

k但嘗試與Java腳本實施.. – ChenSmile

+0

@布里安少校做你得到解決問題的問題 – ChenSmile