我已经使用Facebook SDK for swift通过facebook实现了登录。它在iOS 10.3上按预期工作,但在iOS 11上显示并显示额外的弹出窗口,要求用户允许通过facebook.com登录。
这会在登录过程中再添加一个步骤,从而减慢登录过程。有没有办法如何配置应用程序默认允许这样,从而删除恼人的弹出窗口?
我正在使用通过可可豆荚添加的facebook-sdk-swift 0.2.0(FBSDK版本为4.26.0)。
info.plist
中的配置:
<key>FacebookAppID</key>
<string>xxxxxxxxxxxxxxx</string>
<key>FacebookDisplayName</key>
<string>XXXXX</string>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
</array>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>akamaihd.net</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>facebook.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>fbcdn.net</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>facebook</string>
<key>CFBundleURLSchemes</key>
<array>
<string>fbxxxxxxxxxxxxxxx</string>
</array>
</dict>
</array>
AppDelegate
中的代码:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
return SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return SDKApplicationDelegate.shared.application(app, open: url, options: options)
}
LoginController
在处理程序中有一个自定义登录按钮:
let loginManager = LoginManager()
loginManager.loginBehavior = .native
loginManager.logIn([ .publicProfile, .userFriends, .email, .custom("user_location"), .custom("user_education_history"), .custom("user_work_history") ], viewController: self) { loginResult in
}
我从零开始创建了一个应用程序来测试它,在GitHub上分享。仍然是这样。
好的,经过几次无用的实验后,我找到了一种方法来实现我的客户想要的。上述行为是较新版本的FBSDK的结果。一旦我从FBSDK 4.26.0降级到4.24.0(Swift SDK版本没关系),弹出窗口就停止了显示。因此,如果您遇到同样的问题,并且您的客户(或您)不想要此弹出窗口,这也可能是您的解决方案。
我不认为facebook家伙会偶然做到这一点,这个弹出窗口可以允许一些新的iOS 11功能。但是,我无法区分任何真正的新功能 - 我只注意到如果您想使用本机应用程序或Safari进行登录,新版本不会为您提供选择,而是直接进行Safari登录。但由于这也是我的客户的要求,对我来说,选择是很自然的。
该消息是SFAuthenticationSession
用来询问用户访问safari的权限的标准消息(摘自docs):
如果应用程序使用SFAuthenticationSession,则会通过对话框提示用户明确同意,允许应用程序访问Safari中的网站数据。
更新:
显然,Safari使用“CFBundleName”属性作为此对话框的显示名称。这通常设置为$ {PRODUCT_NAME},等于应用套装标识符的最后一部分,但您可以将其更改为您喜欢的任何内容。当然,建议将其设置为应用的实际显示名称。
这与iOS 11.x更新有关,Facebook SDK 0.3.0正在使用SFAuthenticationSession
,这导致Alert明确表示同意,允许应用程序访问Safari中的网站数据。
在iOS 10.x上试过这个,没有提醒!
如果你想摆脱弹出窗口,你应该将Facebook SDK降级到0.2.0,并且由于Facebook swift SDK仍然依赖于Objective C SDK,你应该强制将这些版本降级到版本4.22.1
降级前:
pod 'FacebookCore', '~> 0.3.0'
pod 'FacebookLogin', '~> 0.3.0'
pod 'FacebookShare', '~> 0.3.0'
降级后:
pod 'FacebookCore', '~> 0.2.0'
pod 'FacebookLogin', '~> 0.2.0'
pod 'FacebookShare', '~> 0.2.0'
pod 'FBSDKCoreKit', '~> 4.22.1'
pod 'FBSDKLoginKit', '~> 4.22.1'
pod 'FBSDKShareKit', '~> 4.22.1'
我正在使用FacebookLogin 0.5.0
将目标的构建设置下的Product Name
更改为所需的文本。
此外,在我的plist Bundle display name
和Bundle name
有$(PRODUCT_NAME)