Facebook SDK for Swiftを使用してfacebook経由でログインを実装しました。 iOS 10.3では期待どおりに動作しますが、iOS 11では、facebook.comからのサインインを許可するようユーザーに要求する追加のポップアップが表示されます。
これにより、ログインプロセスにもう1つのステップが追加され、ログインプロセスの速度が低下します。これをデフォルトで許可するようにアプリを構成して、迷惑なポップアップを削除する方法はありますか?
ココアポッドから追加された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
がサファリへのアクセス許可をユーザーに求めるために使用する標準メッセージです( docs からの抜粋):
アプリケーションがSFAuthenticationSessionを使用している場合、ユーザーはダイアログボックスで明示的な同意を求められ、アプリケーションがSafariのWebサイトのデータにアクセスできるようにします。
UPDATE:
どうやら、Safariはこのダイアログの表示名として「CFBundleName」プロパティを使用しています。これは通常、アプリのバンドルIDの最後の部分と等しい$ {PRODUCT_NAME}に設定されますが、好きなように変更できます。もちろん、アプリの実際の表示名に設定することをお勧めします。
FacebookLogin 0.5.0を使用しています
ターゲットのビルド設定の下にある_Product Name
_を目的のテキストに変更すると機能しました。
また、私のplistでは_Bundle display name
_と_Bundle name
_に$(PRODUCT_NAME)
があります
これはiOS 11.x更新に関連していますFacebook SDK 0.3.がSFAuthenticationSession
を使用しているため、アラートにより明示的な同意が与えられ、 SafariでWebサイトのデータにアクセスするためのアプリケーション。
これを試してみましたiOS 10.x、アラートなし!
ポップアップを削除したい場合は、Facebook SDKを.2.にダウングレードする必要があります。Facebook Swift SDKObjective 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'