web-dev-qa-db-ja.com

Facebookのログインの問題-canOpenURL:URLの失敗: "fbauth2:///"-エラー: "(null)"

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はアクティブです。

何か助け?

59
sfbayman

同じ警告がありますが、Facebook Docsには答えがあります。

これは、canOpenURL:呼び出しがfalseを返したことを示すXcodeの警告です。上記のようにplistでLSApplicationQueriesSchemesエントリを構成している限り、この警告は無視できます。

https://developers.facebook.com/docs/ios/ios9

42
EdoBen

「-canOpenURL:failed for URL」警告は赤いニシンであり、FBアプリが実行中のデバイス/シミュレーターにインストールされていないことを意味します。

「パブリック」の無効なスコープ(別名許可)をリクエストしているようです。求めている権限を含むコードを含めることができますか? public_profileは、おそらくあなたが望むものです(そして何も提供されない場合、SDKはデフォルトになります)。

さらに重要なことは、ではなくを実行すると、CFBundleURLSchemesにfbauth2が追加され、ログインフローが中断されるためです。 Himanshuが指摘したように、これらのエントリはplistのLSApplicationQueriesSchemesの下に入力する必要があります。

34
Chris Pan

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())")
4

インポートFBSDKCoreKitを見逃しました。その後、シミュレータで動作し始めましたが、iPhoneデバイスでは動作しませんでした。

また、Facebookサイトで次のFAQに気付きました。次のようなコンソールメッセージが表示されるのはなぜですか

'canOpenURL:URLの失敗: "fb ...://"

または ?これは、canOpenURL:呼び出しがfalseを返したことを示すXcode警告です。上記のようにLSApplicationQueriesSchemesplistエントリを設定している限り、この警告は無視できます。

IPhoneデバイスで動作しないことについては、以下を参照してください: Parse API-FacebookログインがiPhoneデバイスで動作しない

2
sfbayman

これは、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)
}
1
ZAFAR007

URL「fbauth2:///」に余分な「/」があります。

次に、URLに「error_message = Invalid + Scope」が表示されます。おそらく、アプリの権限を確認する必要があります。 https://developers.facebook.com/docs/facebook-login/permissions/v2.4

0
Paul Slm

アプリが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)
}
0
Muzammil

私は自分の問題を理解しました。これは、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)
            })
        }

        })
}
0
Rob Schlackman

この問題は、iOS 9で導入されたApp Transport Securityによるものです。

2つの解決策があり、どちらもinfo.plistファイルの修正に対応しています

ここにガイドがあります http://discoverpioneer.com/blog/2015/09/18/updating-facebook-integration-for-ios-9/

0
Phil