Ошибка входа в 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: 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 активен.
Любая помощь?
Ответы
Ответ 1
У меня такое же предупреждение, но в Facebook Docs есть ответ.
Это предупреждение Xcode, указывающее canOpenURL: call возвращает false. Пока вы сконфигурировали запись LSApplicationQueriesSchemes в своем plist, как описано выше, вы можете игнорировать это предупреждение
https://developers.facebook.com/docs/ios/ios9
Ответ 2
"-canOpenURL: failed for URL" warning - это красная селедка, а просто означает, что приложение FB не установлено на устройстве/симуляторе, в котором вы работаете.
Похоже, вы запрашиваете недопустимую область (ака разрешение) для "Public". Можете ли вы включить свой код, который включает в себя разрешения, которые вы запрашиваете? public_profile, вероятно, то, что вы хотите (и то, что SDK по умолчанию, если ни один не предоставлен).
Что еще более важно, НЕ добавить fbauth2 в ваши CFBundleURLSchemes, так как это приведет к поломке логинов. Как указал Химаншу, эти записи должны вводиться в разделе LSApplicationQueriesSchemes в нашем plist.
Ответ 3
Если вы перекомпилируете iOS SDK 9.0, добавьте следующее в свой прикладной уровень, если используете версию SDK версии v4.6.0 или выше:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
</array>
Чтобы подготовить интеграцию facebook, поддерживаемую iOS 9, пройдите Facebook Integraion для iOS 9.
Чтобы проверить версию facebook SDK, используйте следующую строку кода:
print("SDK version \(FBSDKSettings .sdkVersion())")
Ответ 4
Я пропустил импорт FBSDKCoreKit
. Позже он начал работать на симуляторе, но не на устройстве iPhone.
Также был замечен следующий FAQ на сайте Facebook. Почему я вижу сообщения консоли, например
'canOpenURL: не удалось URL: "fb...://'
или? Это предупреждение Xcode, указывающее, что вызов canOpenURL:
возвращает false. Если вы сконфигурировали запись LSApplicationQueriesSchemes
в plist
, как описано выше, вы можете игнорировать это предупреждение
Что касается работы с устройством iPhone, обратитесь:
API-интерфейс анализа - вход в Facebook не работает на устройстве iPhone
Ответ 5
У вас есть дополнительный "/" в вашем URL-адресе "fbauth2:///".
Затем вы можете увидеть "error_message = Invalid + Scope" в URL-адресе, вероятно, вы должны проверить разрешения своего приложения:
https://developers.facebook.com/docs/facebook-login/permissions/v2.4
Ответ 6
Проблема связана с безопасностью транспорта приложений, представленной в iOS 9.
Существует два решения, которые связаны с исправлением файла info.plist
Здесь руководство http://discoverpioneer.com/blog/2015/09/18/updating-facebook-integration-for-ios-9/
Ответ 7
Вам нужно добавить этот метод, если ваше приложение работает на 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)
}
Ответ 8
Это предупреждение Xcode, указывающее, что canOpenURL: вызов возвращен ложный. Пока вы настроили LSApplicationQueriesSchemes
запись в вашем plist, как описано выше, вы можете игнорировать это предупреждение.
Перейдите к этой Ссылка Выберите свое приложение и настройте 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)
}
Ответ 9
Я понял свою проблему. Это был просто синтаксис в функции 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)
})
}
})
}