1

我在这里讨论了同样的问题。最终找到的解决方案是破坏 plist 文件中的 URL 方案,以便在登录 Facebook 时,您永远不会离开应用程序去 Safari,而是通过应用程序内的 Web 视图登录。但是,这似乎相当不方便,因为它不像 Safari 那样保存用户凭据。

为什么 PFLoginViewController didLogin 在 webview 中加载 facebook 时会被调用,但在 safari 中加载 facebook 时不会被调用,我该如何解决这个问题。不仅没有调用它,而且没有创建用户,因为 [PFUser currentUser] 在使用 safari 加载 facebook 后返回 nil。

4

1 回答 1

1

这很糟糕,但实际上很容易解决。我回顾了我的步骤,并意识到我不小心删除了我的回调方法。他们来了:

// Facebook oauth callback
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    return [FBSession.activeSession handleOpenURL:url];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    return [FBAppCall handleOpenURL:url sourceApplication:sourceApplication withSession:[PFFacebookUtils session]];
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    [FBAppCall handleDidBecomeActiveWithSession:[PFFacebookUtils session]];
}

试一试,如果这能解决您的问题,请告诉我。我不是 100% 确定这是否是这样做的方法,因为我有一个旧的不推荐使用的例子来查看。这是旧的不推荐使用的方法:

// Facebook oauth callback
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    return [PFFacebookUtils handleOpenURL:url];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    return [PFFacebookUtils handleOpenURL:url];
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
// Handle an interruption during the authorization flow, such as the user clicking the home button.
    [FBSession.activeSession handleDidBecomeActive];
}
于 2014-11-06T04:04:32.657 回答