Facebook& iOS:在多个应用中共享应用ID

时间:2013-02-18 13:40:04

标签: ios facebook facebook-ios-sdk url-scheme

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

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

two URL scheme suffices

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

screenshot of info.plist file

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

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

alert with message "cannot open page, safari cannot open the page because the address is invalid"

执行登录的代码是:

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;

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

3 个答案:

答案 0 :(得分:1)

除了将fbxxxxxxxxxxpremium URL Scheme添加到plist文件中的URL Types数组(您似乎正在执行此操作)之外,还要添加一个新的键/值:

key = FacebookUrlSchemeSuffix
value = premium

所以在plist文件中:

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

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

答案 1 :(得分:0)

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

  1. 我看到您已正确地将plist中的CFBundleURLSchemes键设置为支持的方案数组。您还需要将CFBundleURLName设置为 com.myApp.MyURLScheme 之类的内容。你做过这个吗?

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

  3. 确保您的网址格式正确无误。 fbxxxxxxpremium://foo=bar无法使用fbxxxxxxpremium://?foo=bar?是强制性的。

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

    有关详细信息和示例代码,请参阅iOS SDK文档中Advanced App Tricks与其他应用通信部分。

答案 2 :(得分:0)

我认为问题出在你打电话的时候:

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

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

所以你应该打电话给

[session openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent 
        completionHandler:completion];