在按照Facebook的教程后,我在实现此功能时遇到问题: https://developers.facebook.com/docs/howtos/share-appid-across-multiple-apps-ios-sdk/
基本上,我在同一个项目下有2个目标 - 一个用于免费版本,另一个用于高级版本。我为此创建并设置了一个Facebook应用程序,并添加了2个url scheme后缀:
另外,我在相应的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;
任何想法将不胜感激。谢谢!
答案 0 :(得分:1)
除了将fbxxxxxxxxxxpremium URL Scheme添加到plist文件中的URL Types数组(您似乎正在执行此操作)之外,还要添加一个新的键/值:
key = FacebookUrlSchemeSuffix
value = premium
所以在plist文件中:
<key>FacebookUrlSchemeSuffix</key>
<string>premium</string>
这为我修好了。 Facebook文档提到了这一点,但并没有明确说明IMO。
答案 1 :(得分:0)
您的问题是iOS无法识别自定义网址方案。以下是一些可能的原因:
我看到您已正确地将plist中的CFBundleURLSchemes
键设置为支持的方案数组。您还需要将CFBundleURLName
设置为 com.myApp.MyURLScheme 之类的内容。你做过这个吗?
在调用will并完成启动方法后,iOS将调用您的app delegate的- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
方法。您还必须实现此方法,并且必须返回YES
。你呢?
确保您的网址格式正确无误。 fbxxxxxxpremium://foo=bar
无法使用fbxxxxxxpremium://?foo=bar
,?
是强制性的。
请注意,如果您的目标是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];