3

供参考:我正在使用最新的 Facebook IOS SDK v4 和最新的 Parse v1.7.4 和 ParseFacebookUtilsV4 SDK。

所以我使用 PFFacebookUtils loginInBackgroundWithReadPermissions:block: 方法让用户使用 Facebook 凭据登录并使用这些凭据创建一个 PFUser。然后继续使用 FBSDKGraphRequest 发出 facebook 图形请求,根据我的阅读,假设已设置有效令牌(没有向其传递令牌参数)。

但是 facebook 图形请求失败,在跟踪问题时,我注意到 loginInBackgroudnWithReadPermissions 方法从未设置“访问令牌”。这个方法只做的是在 Parse 中创建一个 PFUser 和一个 Session 实例,并在那里存储会话令牌字符串,但它没有设置 currentAccessToken 。当我在块内进行 [[FBSDKAccessToken currentAccessToken] tokenString] 调用时,我得到(null)。但是,如果我从 PFSession 类中读取“令牌字符串”,我会在 Parse 的 Session 类实例中获得“令牌字符串”存储。

请看下面的代码:

- (IBAction)fbLoginAction:(id)sender {

// Set permissions required from the facebook user account
NSArray *permissionsArray = @[ @"email", @"user_friends"];
// Login PFUser using Facebook
[PFFacebookUtils logInInBackgroundWithReadPermissions:permissionsArray block:^(PFUser *user, NSError *error) {
    if (!user) {
        NSLog(@"Uh oh. The user cancelled the Facebook login.");
    } else if (user.isNew) {
        NSLog(@"User signed up and logged in through Facebook!");


        // Check if the current token has been set
        NSLog(@"self.myCurrentToken string = %@", [[FBSDKAccessToken currentAccessToken] tokenString]); // returns (null)

        // Get the token string from the PFSession
        [PFSession getCurrentSessionInBackgroundWithBlock:^(PFSession *session, NSError *error) {
                    NSString *tokenString = session.sessionToken;
                    NSLog(@"Session token = %@", tokenString);

                }];

}

这是调试控制台输出 在此处输入图像描述

所以我不确定发生了什么。如果 PFSession 令牌设置为不应该 FBSDKAccessToken currentAccessToken 不返回相同的 PFsession 令牌?

如果我要手动设置 accessToken,如何将存储在 Parse 中的令牌字符串转换为 FBSDKAccessToken 实例?似乎没有办法做到这一点?

谢谢

4

2 回答 2

0

发生这种情况是因为您需要将以下代码添加到 AppDelegate didFinishLaunchingWithOptions 的底部:

return [[FBSDKApplicationDelegate sharedInstance] application:application
                                    didFinishLaunchingWithOptions:launchOptions];

通过添加代码,您的 currentAccessToken 将不再为零,您可以立即向 FB 发出请求。

仅供参考,我能够发现 acccessToken 为 nil,因为每次尝试使用 FBSDKGraphRequest 时都会出现以下错误。因此,如果其他人收到以下错误,请确保您的 accessToken 即使在您登录后也不为零!

{"error":{"message":"An active access token must be used to query information about the current user.","type":"OAuthException","code":2500}}
于 2015-08-05T01:08:30.320 回答
0

@jhk:

是的。我得到了 Facebook 支持的解释。通过 Parse 登录是一个两步过程。第一步是授权步骤,用户通过 Facebook 进行身份验证。它切换到 Facebook 应用程序,应用程序在成功完成后接收 Facebook 访问令牌。第二步是,应用程序使用 Facebook 令牌通过 Parse(即您的应用程序)进行身份验证。如果它与现有用户/会话匹配,则您已成功登录。但是,我从解析后端手动删除了 PFSession,在每次我尝试登录时都进行测试,从而使存储在后端的会话无效,并且在第一步之后,当应用程序获得授权并获得访问令牌时,系统意识到本地会话与解析后的存储会话不匹配并使访问令牌无效,它将其设置为 nil。

于 2015-08-06T15:36:27.417 回答