两个iOS应用程序是否可以使用相同的Facebook应用程序ID?

18

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

由于我的当前应用是带广告的免费版本,我想创建另一个无广告的版本(我会收费)。我不想采用应用内购买的方式。

问题是,使用Facebook SSO,我需要将iOS应用程序绑定到一个基于Facebook应用程序ID的URL上。由于我只有一个Facebook应用程序可供两个iPhone应用程序使用,因此这两个iOS应用程序绑定到相同的URL,因此当它们都安装在设备上时,来自Facebook到我的应用程序的回调将无法工作(或打开其他应用程序)。

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

谢谢。


你的任何一个iOS应用需要URL回调吗?我已经为多个iOS应用使用了相同的AppID,它一直运行良好。 - Joey Schluchter
在最新的Facebook iOS SDK中,每个应用程序都必须添加URL绑定,否则登录成功消息将永远无法到达您的应用程序(SSO流程)。 - Amir Naor
你不一定需要在FB iOS SDK中使用那个URL scheme。那只是他们推荐的单点登录和多任务处理方式。我建议你查看Facebook.m文件,看看他们如何处理授权传递。 - Joey Schluchter
我知道我可以通过更改SDK代码以默认内部显示登录对话框来禁用SSO,但我希望在我的两个应用程序中都使用SSO方法。 - Amir Naor
2个回答

29

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

假设您的应用程序ID为123456,则我所要做的是:

1)在您的Facebook应用程序中,在iOS部分中添加URL方案后缀:

enter image description here

2)在两个应用程序的.plist文件中,添加以下条目:

enter image description here

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

3)还要将.plist文件中Facebook的URL Scheme更改为fb。例如,fb123456client

enter image description here


1
最简单和最准确的答案。当你不需要时,为什么要写不必要的代码呢? - polterfest
1
谢谢 - 我缺少了FacebookUrlSchemeSuffix键/值。Facebook文档太烂了! - Dunc
1
谢谢。在Facebook Analytics中,如何分离twe iOS版本(例如免费和付费)的统计数据? - toto_tata
1
这个可以。对于这个问题的其他答案并没有明确说明“应该放在哪里”。 - nickdnk

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

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

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


没有找到你提到的方法。但我找到了“-(id)initWithAppId:(NSString *)appId urlSchemeSuffix:(NSString *)urlSchemeSuffix andDelegate:(id <FBSessionDelegate>)delegate {” - Cullen SUN
似乎他们从授权中删除了localAppId,并将其作为urlSchemeSuffix添加到init方法中。我刚刚更新了我的答案,感谢提示。 - Zargony
2
我曾经遇到过同样的问题,通过使用这个答案,我将"fb40000000000006${PRODUCT_NAME}"设置为我的URL方案,并将urlSchemeSuffix设置为在这里建议的产品名称:https://dev59.com/tnM_5IYBdhLWcg3wvV5w。这样,在共享相同Facebook应用程序ID的应用程序中,SSO会正确绑定,而不需要额外的努力。 - DannyA
显然,我的先前解决方案只在模拟器中有效。有人知道为什么吗? - DannyA
我已经完成了这个过程,它启动了正确的应用程序,但是会话始终返回LoginFailed,即使它启动了所需的权限页面并启动了后续的应用程序。 - Woodmister1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接