繁体   English   中英

facebook登录问题 - canOpenURL:网址失败:“fbauth2:///” - 错误:“(null)”

[英]facebook login issue - canOpenURL: failed for URL: “fbauth2:///” - error: “(null)”

当我点击登录Facebook按钮时,它正在打开safari浏览器并立即关闭。 控制台上出现错误。

App委托方法:

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: failed for URL: "fbauth2:///" - error: "(null)"

2015-09-18 18:37:51.417[21036:5050465] -canOpenURL: failed for URL: "fbauth2:///" - error: "(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#_=_

###### App : 


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:FBSDKGraphRequestErrorCategoryKey=0})

IDE:xcode 7
语言:Swift2
Facebook SDK:4.6.0
解析:1.8.4

我还验证了.plist是否拥有所需的所有密钥。 还验证了拼写错误的捆绑标识符。 一切都很好看。 Facebook很活跃。

有帮助吗?

我有同样的警告,但在Facebook Docs中有一个答案。

这是一个Xcode警告,指示canOpenURL:call返回false。 只要您如上所述在plist中配置了LSApplicationQueriesSchemes条目,就可以忽略此警告

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

“-canOpenURL:URL失败”警告是一个红色的鲱鱼,只是意味着你正在运行的设备/模拟器上没有安装FB应用程序。

看起来您正在请求“公共”的无效范围(也称为权限)。 你能包括你的代码,其中包括你要求的权限吗? public_profile可能就是您想要的(如果没有提供SDK,则默认为SDK)。

更重要的是, 不要将fbauth2添加到CFBundleURLSchemes中,因为这会破坏登录流程。 正如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集成,请通过Facebook Integraion for iOS 9指南

要检查facebook SDK的版本,请使用以下代码行:

   print("SDK version \(FBSDKSettings .sdkVersion())")

我错过了导入FBSDKCoreKit 后来它开始在模拟器上工作,但不在iPhone设备上。

还注意到Facebook网站上的以下常见问题解答。 为什么我会看到控制台消息

'canOpenURL:网址失败:“fb ...://'

要么 ? 这是一个Xcode警告,指示canOpenURL: call返回false。 只要您LSApplicationQueriesSchemesplist配置了LSApplicationQueriesSchemes条目,就可以忽略此警告

关于不使用iPhone设备,请参考: Parse API - Facebook登录不在iPhone设备上运行

这是一个Xcode警告,指示canOpenURL:call返回false。 只要您LSApplicationQueriesSchemes在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)
}

你的网址“fbauth2:///”中有一个额外的“/”。

然后你可以在网址中看到“error_message = Invalid + Scope”,你应该查看你的应用程序的权限: https//developers.facebook.com/docs/facebook-login/permissions/v2.4

问题是由iOS 9中引入的App Transport Security引起的。

有两种解决方案,都涉及修复info.plist文件

这是一本指南http://discoverpioneer.com/blog/2015/09/18/updating-facebook-integration-for-ios-9/

如果您的应用程序在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)
            })
        }

        })
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM