【问题标题】:iOS URL Scheme for FacebookFacebook 的 iOS URL 方案
【发布时间】:2014-09-02 19:05:38
【问题描述】:
iOS Facebook 要求我添加一个 URL 方案,以便用户可以在我的应用程序中通过 Facebook 登录/注册。那么,我也可以使用这个 Facebook URL 方案来启动我的应用程序吗?我不需要支持深度链接——我只想从营销电子邮件中启动应用程序。
显然,添加我自己的 URL 方案是首选,但添加我自己的方案需要几周时间才能使应用程序投入生产。
我为什么不应该同时使用 Facebook URL 方案(如 fb12345://test)?
【问题讨论】:
标签:
ios
url
facebook-ios-sdk
【解决方案1】:
Facebook 的 iOS SDK 是开源的,因此您实际上可以单步调试代码,看看会发生什么。我在我的应用程序上使用虚拟 URL fb12345://noop 进行了尝试,发现 A)正在进行大量测试,B)它们似乎都失败了,没有任何副作用。
你的里程可能会有所不同,但我的策略是:
使用稍后会提醒您正在执行的操作的 URL,例如fb12345://placeholder-until-Brett-does-something-better
选择几个场景,登录 Facebook,未登录 Facebook,登录但令牌无效。
使用调试器逐步完成这些场景,并确保您没有触发 Facebook SDK 中的任何逻辑。
-
在您的应用的新版本中,为 Facebook 内容编写一个包装器:
if ([url.scheme isEqualToString:facebookScheme] && ![url.host isEqualToString:@"placeholder-until-Brett-does-something-bette"]) {
return [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];
}
在合理的情况下尽快停止使用此 hack。跟踪您的应用的 hacky 版本的用户数量。当它下降到您觉得舒服的程度时,开始更新您的 URL 以指向新方案。
您还必须接受这样一个事实:某些第三方开始使用该 URL 启动您的应用,或者您可能有一些活跃用户没有将应用更新到非 hacky 版本.您可能永远无法清理您的 URL 处理程序或指向该 Facebook URL 以外的任何内容,因为风险太高了。
【解决方案2】:
AFAIK Facebook 让您使用的特殊 url 方案包含您的 Facebook 应用程序 ID。这是public information。所以那里没有伤害。
只要 Facebook SDK 不会误解您打开应用程序时使用的 url 中的数据,并且会对其进行一些奇怪的处理(例如,由于参数无效或其他任何原因(不太可能但可能)而崩溃),您应该是好的。
也就是说,你需要发布你的
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;
对我来说,100% 不会有什么不好的事情发生。