Facebookボタンでログインをクリックすると、safariブラウザが開き、すぐに閉じられます。コンソールに気づいたエラー。
アプリデリゲートメソッド:
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
print("###### URL : ")
print(url)
print("###### App : ")
print(app)
print(options["UIApplicationOpenURLOptionsSourceApplicationKey"])
return FBSDKApplicationDelegate.sharedInstance().application(app, openURL: url, sourceApplication: options["UIApplicationOpenURLOptionsSourceApplicationKey"] as! String,
annotation: nil)
}
2015-09-18 18:37:51.410 [21036:5050465] -canOpenURL:URLの失敗: "fbauth2:///"-エラー: "(null)" 2015-09-18 18:37:51.417 [21036:5050465] -canOpenURL:URLの失敗: "fbauth2:///"-エラー: "(null)" # ##### URL: fb4554284912963222:// authorize /?error_code = 100&error_message = Invalid + Scope%3A + public&state =%7B%22challenge%22%3A%222ZmK6R5F05d%252F060TkCqj8SjPLjc%253D %22%2C%220_auth_logger_id%22%3A%223C79F2C8-61B9-470E-AE1B-E1C68435DB83%22%2C%22com.facebook.sdk_client_state%22%3Atrue%2C%223_method%22%3A%22sfvc_auth%22%7D&e2e = 7B%22init%22%3A145973.000512302%7D#_ = _ ######アプリ: Optional( com.Apple.SafariViewService) nil ###### err: Optional(Error Domain = com.facebook.sdk .core Code = 8 "(null)" UserInfo = {com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorCode = 100、com.facebook.sdk:FBSDKErrorDeveloperMessageKey = Invalid Scope:public、com.facebook.sdk:FBSDKGraphRequestErro rCategoryKey = 0})
IDE:Xcode 7
言語:Swift2
Facebook SDK:4.6.0
解析:1.8.4
.plistに必要なすべてのキーがあることも確認しました。また、タイプミスのバンドル識別子を確認しました。すべてがよさそうだ。 Facebookはアクティブです。
何か助け?
同じ警告がありますが、Facebook Docsには答えがあります。
これは、canOpenURL:呼び出しがfalseを返したことを示すXcodeの警告です。上記のようにplistでLSApplicationQueriesSchemesエントリを構成している限り、この警告は無視できます。
「-canOpenURL:failed for URL」警告は赤いニシンであり、FBアプリが実行中のデバイス/シミュレーターにインストールされていないことを意味します。
「パブリック」の無効なスコープ(別名許可)をリクエストしているようです。求めている権限を含むコードを含めることができますか? public_profileは、おそらくあなたが望むものです(そして何も提供されない場合、SDKはデフォルトになります)。
さらに重要なことは、ではなくを実行すると、CFBundleURLSchemesにfbauth2が追加され、ログインフローが中断されるためです。 Himanshuが指摘したように、これらのエントリはplistのLSApplicationQueriesSchemesの下に入力する必要があります。
IOS SDK 9.0で再コンパイルする場合、Facebook SDK v4.6.0以降のバージョンを使用している場合は、アプリケーションのplistに次を追加します。
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
</array>
IOS 9でサポートされるFacebookの統合を準備するには、 iOS 9のFacebook Integraionガイドライン
Facebook SDKのバージョンを確認するには、次のコード行を使用します。
print("SDK version \(FBSDKSettings .sdkVersion())")
インポートFBSDKCoreKit
を見逃しました。その後、シミュレータで動作し始めましたが、iPhoneデバイスでは動作しませんでした。
また、Facebookサイトで次のFAQに気付きました。次のようなコンソールメッセージが表示されるのはなぜですか
'canOpenURL:URLの失敗: "fb ...://"
または ?これは、canOpenURL:
呼び出しがfalseを返したことを示すXcode警告です。上記のようにLSApplicationQueriesSchemes
にplist
エントリを設定している限り、この警告は無視できます。
IPhoneデバイスで動作しないことについては、以下を参照してください: Parse API-FacebookログインがiPhoneデバイスで動作しない
これは、canOpenURL:呼び出しがfalseを返したことを示すXcodeの警告です。上記のようにplistで
LSApplicationQueriesSchemes
エントリを設定している限り、この警告は無視できます。
これに移動 リンク アプリを選択し、info.plist
を設定します
import
そしてAppDelegate
にこのコードを追加します
import FBSDKCoreKit .
import FBSDKLoginKit
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options)
}
URL「fbauth2:///」に余分な「/」があります。
次に、URLに「error_message = Invalid + Scope」が表示されます。おそらく、アプリの権限を確認する必要があります。 https://developers.facebook.com/docs/facebook-login/permissions/v2.4
アプリがiOS9以上で実行されている場合、このメソッドを追加する必要があります。
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options {
return [[FBSDKApplicationDelegate sharedInstance] application:app
openURL:url
sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
}
Swiftバージョンが必要な場合:
@available(iOS 9.0, *)
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return SDKApplicationDelegate.shared.application(app,
open: url,
sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
annotation: options[UIApplicationOpenURLOptionsKey.annotation] as Any)
}
私は自分の問題を理解しました。これは、loginButtonClicked関数の単なる構文でした。エラーメッセージは、間違ったパスに私を導いていた。これが作業コードです。
@objc func loginButtonClicked() {
self.login = FBSDKLoginManager()
self.login.logIn(withReadPermissions: ["public_profile"], from: self, handler: {(result, error) -> Void in
if error != nil {
print("Process error")
}
else if (result?.isCancelled)! {
print("Cancelled")
}
else {
print("Logged in")
DispatchQueue.main.async(execute: {
let viewController:UIViewController = self.storyboard?.instantiateViewController(withIdentifier: "UITabBarController") as! UITabBarController
self.present(viewController, animated: true, completion: nil)
})
}
})
}
この問題は、iOS 9で導入されたApp Transport Securityによるものです。
2つの解決策があり、どちらもinfo.plistファイルの修正に対応しています
ここにガイドがあります http://discoverpioneer.com/blog/2015/09/18/updating-facebook-integration-for-ios-9/