我已经使用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上分享。仍然是这样。
答案 0 :(得分:19)
好的,经过几次无用的实验后,我找到了一种方法来实现客户的需求。上述行为是较新版本的FBSDK的结果。一旦我从FBSDK 4.26.0降级到4.24.0(Swift SDK版本没关系),弹出窗口就停止了显示。因此,如果您遇到同样的问题,并且您的客户(或您)不想要此弹出窗口,这也可能是您的解决方案。
我不认为facebook家伙会偶然做到这一点,这个弹出窗口可以允许一些新的iOS 11功能。但是,我无法区分任何真正的新功能 - 我只注意到如果您想使用本机应用程序或Safari进行登录,新版本不会为您提供选择,而是直接进行Safari登录。但由于这也是我的客户的要求,对我来说,选择是很自然的。
该消息是SFAuthenticationSession
用来询问用户访问safari的权限的标准消息(摘自docs):
如果应用程序使用SFAuthenticationSession,则会通过对话框提示用户明确同意,允许应用程序访问Safari中的网站数据。
<强>更新强>
显然,Safari使用“CFBundleName”属性作为此对话框的显示名称。这通常设置为$ {PRODUCT_NAME},等于应用套装标识符的最后一部分,但您可以将其更改为您喜欢的任何内容。当然,建议将其设置为应用的实际显示名称。
答案 1 :(得分:0)
这与 iOS 11.x 更新有关, Facebook SDK 0.3.0 正在使用SFAuthenticationSession
,这会导致警告明确表示同意,允许应用程序访问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'
答案 2 :(得分:0)
我正在使用FacebookLogin 0.5.0
将目标的“构建设置”下的Product Name
更改为所需的文本即可。
此外,在我的plist Bundle display name
和Bundle name
上有$(PRODUCT_NAME)