Facebook身份验证错误 - 无法完成操作

时间:2012-02-21 12:14:45

标签: iphone objective-c facebook-graph-api oauth access-token

我的游戏中有一个选项可供用户将成就发布到他们的墙上。如果他们已登录,即他们的令牌仍处于活动状态,则可以正常工作。但是,如果他们需要更新他们的令牌,应用程序退出并且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?

感谢您的帮助!

2 个答案:

答案 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方法的末尾,现在看起来效果很好。