URLScheme перестала работать после добавления Facebook URLScheme

Я использую схему URL, чтобы открыть приложение из виджета сегодня. Все работало нормально - при нажатии на виджет загружалось приложение и выполнялся этот метод из AppDelegate.

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {}

Позже я добавил схему URL для входа в facebook, и приложение все еще открывается из виджета, но этот метод из AppDelegate не выполняется. Вход в Facebook работает нормально.

Моя часть info.plist о схемах URL-адресов теперь выглядит так.

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>MY_URL_SCHEME</string>
            <string>fb{someid}</string>
        </array>
    </dict>
</array>

Обновление: я обнаружил, что Facebook также нужен этот метод в AppDelegate.

@available(iOS 9.0, *)
func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
    return SDKApplicationDelegate.shared.application(application, open: url, options: options)
}

Таким образом, он также фиксирует запуск из виджета. Как мне использовать оба этих метода?


person moonvader    schedule 12.03.2018    source источник


Ответы (2)


Мы не можем реализовать оба метода в AppDelegate. Начиная с iOS 9.0, был представлен метод ниже.

Есть набор ключей, которые этот делегат имеет в словаре параметров, таких как «UIApplicationOpenURLOptionsKey», «UIApplicationOpenURLOptionsAnnotationKey» и т. Д., Которые вы можете использовать в соответствии с вашими потребностями. Вы можете использовать "параметры" словаря, указанные в следующем методе: -

-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{

 if ([url.scheme isEqualToString:@"YOUR_FACEBOOK_ID"]){
     return [[FBSDKApplicationDelegate sharedInstance] application:app openURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
 }

   return NO;

}

SWIFT-КОД: -

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {

   if url.scheme == "YOUR_FACEBOOK_ID"{
      return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options[.sourceApplication] as! String!, annotation: options[.annotation])
    }

    return false

}
person Shankey    schedule 12.03.2018

Прежде чем позволить facebook обрабатывать URL-адрес, вы можете проверить, является ли это схемой fb или вашей:

    if (url?.scheme == "your_fb_scheme") {
        return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
    }
    //have your own logic here
person ahbou    schedule 12.03.2018