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

Facebook登录在iOS 11上显示一个额外的确认弹出窗口,ios,swift,facebook,facebook-login,ios11,Ios,Swift,Facebook,Facebook Login,Ios11,我已经使用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>Face

我已经使用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>
LoginController
有一个自定义登录按钮,其中包含以下in处理程序:

    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
    }

我从头开始创建了一个应用程序来测试它,并在上共享。还是一样的。

好吧,经过几次无用的实验,我终于找到了一种方法来实现我的客户想要的。上述行为是FBSDK更新版本的结果。一旦我从FBSDK 4.26.0降级到4.24.0(Swift SDK版本无关紧要),弹出窗口就停止显示。因此,如果您面临同样的问题,并且您的客户(或您)不希望出现此弹出窗口,那么这也可能是您的解决方案

我不认为facebook的人这样做是偶然的,这个弹出窗口可以允许一些新的iOS 11功能。但是,我无法区分任何真正的新功能-我只注意到,如果您想使用本机应用程序或safari登录,更新的版本不会让您选择,而是直接用于safari登录。但由于这也是我的客户的要求,对我来说,选择是很自然的

该消息是一条标准消息,由
SFAuthenticationSession
用于请求用户访问safari的权限(摘录自):

如果应用程序使用SFAuthenticationSession,则会出现一个对话框提示用户明确同意,从而允许应用程序在Safari中访问网站数据

更新:

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'

显然,Safari使用“CbundLename”属性作为此对话框的显示名称。这通常设置为${PRODUCT_NAME},它等于应用程序包标识符的最后一部分,但您可以将其更改为任何您喜欢的值。当然,最好将其设置为应用程序的实际显示名称。

这与iOS 11.x更新有关,Facebook SDK 0.3.0正在使用
SFAuthenticationSession
,这会导致发出警报以明确表示同意,允许应用程序在Safari中访问网站数据

在iOS 10.x上尝试此操作,没有警报

如果你想摆脱弹出窗口,你应该将Facebook SDK降级到0.2.0,因为Facebook swift SDK仍然依赖于Objective C SDK,你应该强制将这些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'
降级后:

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

将目标构建设置下的
产品名称
更改为所需文本有效


另外,在我的plist
捆绑包显示名
捆绑包名
上有
$(产品名)

我也在ios 11中通过pod文件使用facebook sdk,但我没有遇到任何问题。你能分享一下你如何集成你的facebook登录吗?确切地说,它是自动定向的。我认为问题在你的plist文件中。也许你可以检查这个链接和inspect plist配置好吧,我看不到任何我会错过的东西。。并且登录名正在工作。。这看起来就像是一些安全调整,虽然我不明白为什么它适用于你(和其他一些应用程序),但不是在我的情况下。。可能是SDK版本的问题?我使用这些pod'FBSDKLoginKit'可能是您的pod版本的问题。嘿,您认为我们可以以某种方式更改此警报中的消息吗?显示此弹出窗口是可以的,但我想知道如何编辑应用程序名称?似乎app name不是app的昵称,而是一个bundle名称,所以它的confusing@Jigar您需要在“打包”部分下的“应用程序生成设置”中更改产品名。@vignesh这不准确,我的产品名与此处显示的不同,它仍然显示包id@GustavoParrado与此同时,我找到了一个解决办法。显然,Safari使用“CbundLename”属性作为此对话框的显示名称。这通常设置为${PRODUCT_NAME},这是内部标识符。我修复了我的问题,将其更改为我的应用程序的显示名称,它工作得非常好。FFR: