我正在嘗試使用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?
謝謝!
感謝您的回覆。不幸的是,我仍在尋找是否有人使用objective-c API客戶端找到了解決方法。由於我已經在使用此庫來驗證YouTube,因此我無法使用GoogleOpenSource.framework實施GPPSignin控件,該控件確實爲requestvisibleactions值提供了支持。 –
k但嘗試與Java腳本實施.. – ChenSmile
@布里安少校做你得到解決問題的問題 – ChenSmile