我的游戏中有一个选项可供用户将成就发布到他们的墙上。如果他们已登录,即他们的令牌仍处于活动状态,则可以正常工作。但是,如果他们需要更新他们的令牌,应用程序退出并且Facebook身份验证页面会在返回应用程序之前加载一秒钟(如果他们已经主动注销,他们只需要在身份验证页面上单击“确定”,否则会自动发生) 。
问题在于,如果发生这种情况,当游戏返回时,请求将失败。但由于他们现在已经登录,如果他们第二次按下“分享到墙上”按钮,它就能正常工作。失败请求输出的错误消息:
DIDLOGIN
2012-02-21 12:01:33.502[18153:15803] Response received
2012-02-21 12:01:33.502[18153:15803] Request did load raw response
2012-02-21 12:01:33.502[18153:15803] Request failed, error: Error Domain=facebookErrDomain Code=10000 "The operation couldn’t be completed. (facebookErrDomain error 10000.)" UserInfo=0x9992010 {error=<CFBasicHash 0x99785e0 [0x2093b38]>{type = mutable dict, count = 3,
entries =>
2 : <CFString 0x9963370 [0x2093b38]>{contents = "type"} = <CFString 0x99952a0 [0x2093b38]>{contents = "OAuthException"}
3 : <CFString 0x99631e0 [0x2093b38]>{contents = "message"} = <CFString 0x997e5b0 [0x2093b38]>{contents = "An active access token must be used to query information about the current user."}
6 : <CFString 0x998c370 [0x2093b38]>{contents = "code"} = 2500
}
}
我不确定为什么我在成功授权后会收到OAuthException?
感谢您的帮助!
答案 0 :(得分:1)
当你设置你把它发送到facebook的params字典..也传递access令牌,就像这样
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@"someText",
@"message",
[fb accessToken],
@"access_token",nil];
答案 1 :(得分:0)
好吧,我发现了问题。至少我认为我发现它,因为它现在有效,我只是希望我没有在这个过程中引入另一个错误。基本上我的登录编码看起来像这样:
- (void)postAchievement:(NSString *)message withPicture:(NSString *)pictureURL {
//Set post to TRUE so the delegate posts when the method returns and configure the message.
DLog(@"Achievement message: %@", message);
self.postAchievement = TRUE;
self.achievementMessage = message;
self.wallPostPicURL = pictureURL;
[self fbLogin];
[facebook requestWithGraphPath:@"me" andDelegate:self];
}
// Save the user's credentials and expiration date
- (void)fbDidLogin {
DLog(@"DIDLOGIN");
self.isLoggedIn = TRUE;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];
}
fbDidLogin是用户登录时调用的委托方法。行[facebook requestWithGraphPath:@"me" andDelegate:self];
是问题所在。我将它移动到fbDidLogin方法的末尾,现在看起来效果很好。