Как работает ссылка facebook app без объявления LSApplicationQueriesSchemes?

В приложениях iOS 9 нельзя использовать canOpenURL, чтобы проверить, установлено ли приложение или нет.

Если ваше приложение (iOS 9.0 или новее) вызывает этот метод, используя схему, вы не объявлены, метод возвращает false, независимо от того, на устройстве установлено соответствующее приложение для схемы.

но мне интересно, как приложение facebook сможет направить пользователя в appstore, если приложение не установлено, или открыть целевое приложение, если оно установлено!

facebook не может перечислить все приложения в LSApplicationQueriesSchemes!

Спасибо

Ответ 1

От canOpenURL: документация:

В отличие от этого метода, метод openURL: не ограничивается Требование UIDefaultLaunchStoryboard: если приложение, которое обрабатывает схему установлен на устройстве, метод openURL: работает ли вы не указали эту схему.

Итак, они делают следующее:

1) Попробуйте вызвать openURL: с fb-совместимыми URL-адресами, например fb[app-id]://authorize..., пока не вернется true (я проверил его, они вызывают множество URL-адресов, например fb[app-id]lite, fb[app-id]mac, fb[app-id]paid, fb[app-id]green и т.д.). Если он преуспеет, откроется целевое приложение.

2) Если при вызове openURL: нет успеха, они пытаются вызвать canOpenURL: с помощью http://itunes.apple.com/app/... url, а затем вызвать openURL: с тем же адресом. Пользователь перенаправляется в App Store.