Facebook登录在iOS 11上显示另一个确认弹出窗口

时间:2017-09-27 15:38:03

标签: ios swift facebook facebook-login ios11

我已经使用Facebook SDK for swift通过facebook实现了登录。它在iOS 10.3上按预期工作,但在iOS 11上显示并显示其他弹出窗口,要求用户允许通过facebook.com登录。

security confirmation

这会在登录过程中再添加一个步骤,从而减慢登录过程。有没有办法如何配置应用程序默认允许这样做,从而删除恼人的弹出窗口?

我正在使用通过可可豆荚添加的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上分享。仍然是这样。

3 个答案:

答案 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 nameBundle name上有$(PRODUCT_NAME)