11

在遵循 Facebook 的教程后,我在实现此功能时遇到了问题: https ://developers.facebook.com/docs/howtos/share-appid-across-multiple-apps-ios-sdk/

基本上,我在同一个项目下有 2 个目标 - 一个用于免费版本,一个用于高级版本。我为此创建并设置了一个 Facebook 应用程序,并添加了 2 个 url 方案后缀:

两个 URL 方案就足够了

另外,我在相应的 plist 文件中添加了后缀。例如,高级应用程序定义为:

info.plist 文件的屏幕截图

其中“xxxxx...”只是我的 Facebook 应用 ID。

毕竟,我仍然无法在 iOS 5.0 和 6.0 上登录应用程序(使用原生 FB 对话框或 Safari 中的 SDK 对话框)。这是我通过 Safari 登录时得到的:

带有消息的警报

进行登录的代码是:

NSArray *permissions = kInitialPermissions;

BOOL result = NO;
FBSession *session = [[FBSession alloc] initWithAppID:@"xxxxxxxxxxx"
                                          permissions:@[]
                                      urlSchemeSuffix:@"premium"
                                   tokenCacheStrategy:nil];

if (allowLoginUI ||
    (session.state == FBSessionStateCreatedTokenLoaded)) {
    [FBSession setActiveSession:session];
}

result = [FBSession openActiveSessionWithReadPermissions:permissions
                                                allowLoginUI:allowLoginUI
                                           completionHandler:completion];
return result;

任何想法将不胜感激。谢谢!

4

3 回答 3

1

除了将 fbxxxxxxxxxxpremium URL Scheme 添加到 plist 文件中的 URL Types 数组(您似乎正在这样做)之外,还添加一个新的键/值:

key = FacebookUrlSchemeSuffix
value = premium

所以在 plist 文件本身:

<key>FacebookUrlSchemeSuffix</key>
<string>premium</string>

这为我修好了。Facebook 文档提到了这一点,但没有明确 IMO。

于 2015-06-16T16:00:12.937 回答
0

您的问题是 iOS 无法识别自定义 URL 方案。以下是一些可能的原因:

  1. 我看到您已将CFBundleURLSchemesplist 中的密钥正确设置为一系列受支持的方案。您还需要设置CFBundleURLNamecom.myApp.MyURLScheme 之类的内容。你做过吗?

  2. 在调用 will 并确实完成启动方法后,iOS 将调用您的应用程序委托的- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation方法。您还必须实现此方法并且它必须返回YES。你?

  3. 确保您的 URL 格式正确。 fbxxxxxxpremium://foo=bar不会工作,但fbxxxxxxpremium://?foo=bar会(这?是强制性的)。

请注意,如果您的目标是 iOS 4.1 或更早版本,则委托方法会略有不同。

有关详细信息和示例代码,请参阅iOS SDK 文档中高级应用技巧的与其他应用通信部分。

于 2013-02-23T03:47:14.097 回答
0

我认为问题出在您打电话时:

result = [FBSession openActiveSessionWithReadPermissions:permissions
                                            allowLoginUI:allowLoginUI
                                       completionHandler:completion];

正在打开的会话没有 url 方案后缀。

所以你应该打电话

[session openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent 
        completionHandler:completion];
于 2013-02-23T21:43:24.380 回答