【问题标题】:Two iOS apps using the same Facebook app ID - is it possible?两个 iOS 应用程序使用相同的 Facebook 应用程序 ID - 有可能吗?
【发布时间】:2011-08-25 00:56:27
【问题描述】:

我正在使用最新的 facebook iOS SDK(支持 SSO)将我的 iPhone 应用程序与 facebook 连接。到目前为止一切顺利..

由于我当前的应用程序是免费的广告,我想创建另一个没有广告的版本(我会收费)。我不喜欢使用应用内购买方式。

我面临的问题是,使用 facebook SSO,我需要将 iOS 应用程序绑定到基于 facebook 应用程序 ID 的 URL。由于我只有一个 facebook 应用程序可供两个 iphone 应用程序使用,因此这两个 iOS 应用程序绑定到同一个 URL,因此当它们都安装在设备上时,从 facebook 到我的应用程序的回调不起作用(或而是打开另一个应用程序)。

除了创建另一个专用于新版 iphone 应用程序的 Facebook 应用程序之外,还有其他解决方案吗?

谢谢。

【问题讨论】:

  • 您的 iOS 应用是否需要 URL 回调?我已经为多个 iOS 应用使用了相同的 AppID,并且效果很好。
  • 在最新的 facebook iOS SDK 中,每个应用都必须添加 URL 绑定,否则登录成功消息将永远不会到达您的应用(SSO 流)。
  • 您不必在 FB iOS SDK 中使用该 URL 方案。这只是他们对 SSO 和多任务处理的建议。我建议你看看 Facebook.m,看看他们如何处理他们的身份验证传递。
  • 我知道我可以通过更改 SDK 代码以在默认情况下在内部显示登录对话框来禁用 SSO,但我希望在我的两个应用程序中都使用 SSO 方法。

标签: ios facebook single-sign-on


【解决方案1】:

在最新的Facebook iOS SDK on Github 中有一个名为authorize:delegate:localAppId: initWithAppId:urlSchemeSuffix:andDelegate: 的方法。您可以使用 localAppId urlSchemeSuffix 参数来区分使用相同 Facebook 应用程序 ID 的多个 iOS 应用程序。方法文档说:

urlSchemeSuffix 是附加到用于 SSO 的基本 URL 方案的小写字母字符串。例如,如果您的 facebook ID 是“350685531728”并且您将 urlSchemeSuffix 设置为“abcd”,则 Facebook 应用程序将期望您的应用程序绑定到以下 URL 方案:“fb350685531728abcd”。如果您有多个 iOS 应用程序共享一个 Facebook 应用程序 ID(例如,如果您在同一个应用程序上有免费和付费版本)并且您希望对这两个应用程序使用 SSO,这将非常有用。为这两个应用提供不同的 urlSchemeSuffix 值将允许 Facebook 应用消除其 URL 方案的歧义,并始终将用户重定向回正确的应用,即使设备上同时安装了免费应用和应用。

urlSchemeSuffix 在 Facebook 应用程序的 3.4.1 及更高版本上受支持。如果用户安装了较旧版本的 Facebook 应用,并且您的应用使用 urlSchemeSuffix 参数,则 SDK 将继续执行,就像设备上未安装 Facebook 应用一样,并将用户重定向到 Safari。

【讨论】:

  • 没有找到你提到的方法。但我发现“- (id)initWithAppId:(NSString *)appId urlSchemeSuffix:(NSString *)urlSchemeSuffix andDelegate:(id)delegate {"
  • 似乎他们从授权中删除了 localAppId 并将其作为 urlSchemeSuffix 添加到 init 方法中。我刚刚更新了我的答案,谢谢你的提示。
  • 我遇到了同样的问题,并且(使用这个答案)我已经通过设置:“fb40000000000006${PRODUCT_NAME}”作为我的 URL 方案来解决它,并将 urlSchemeSuffix 设置为获得的产品名称如此处建议:stackoverflow.com/questions/1247142/…。这样,SSO 可以在共享相同 Facebook 应用程序 ID 的应用程序中正确绑定,而无需额外的努力。
  • 显然我以前的解决方案只适用于模拟器。有人知道为什么吗?
  • 我已经完成了这个过程,它启动了正确的应用程序,但是会话总是返回 LoginFailed,即使它启动了所需的权限页面,并启动了后续的应用程序。
【解决方案2】:

我不得不在我的应用程序中使用 FBLoginView,但这些解决方案都不起作用。唯一缺少的是我需要在 plist 文件中添加一个新条目:FacebookUrlSchemeSuffix(documented here,在步骤 2 中)。

假设你的 App ID 是 123456,我要做的是:

1) 在您的 facebook 应用中,在 iOS 部分添加 URL Scheme Suffix:

2) 在您的两个应用程序中,转到应用程序的 .plist,并添加以下条目:

请注意,该值必须是添加的 URL 方案后缀之一。

3) 还将 .plist 文件中 Facebook 的 URL 方案更改为 fb。比如fb123456client

【讨论】:

  • 最简单最准确的答案。为什么在不需要的时候编写不必要的代码。
  • 谢谢 - 我错过了 FacebookUrlSchemeSuffix 键/值。 Facebook 文档很烂!
  • 谢谢。您如何在 Facebook 分析中区分两个 iOS 版本(例如免费和付费)的统计数据?
  • 这行得通。这个问题的其他答案对于“去哪里”并不是很清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多