Схема URL в уже открытом приложении
Я разрабатываю приложение, которое должно быть связано с другим приложением следующим образом:
-
В первом приложении есть кнопка, которая через схему URL открывает второе приложение и передает два параметра (user и password).
-
Второе приложение проверяет эти параметры и предоставляет доступ, если они в порядке.
Система работает хорошо, если второе приложение не открыто, но если второе приложение уже открыто (в фоновом режиме) и вызывается из первого приложения с другим пользователем и пароль, не работает (метод схемы URL в AppDelegate вызывается только один раз, конечно).
Есть ли способ разрешить второму приложению получать новые парамет-ры, даже если оно уже открыто?
Спасибо.
2 ответа:
Существуют 2 случаи, когда ваше второе приложение вызывается другим приложением.
В этих 2 случаях ваше второе приложение получит объект
NSURL
.Вы должны реализовать 2 метода в вашем
AppDelegate.m
(здесь #1, здесь #2)- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //....... //....... NSURL *url = launchOptions[UIApplicationLaunchOptionsURLKey]; if (url) { //OK, it means that app is being called via URL Schema //..... HERE #1 } //....... //....... } - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { //............... HERE #2 }
В UIApplicationDelegate есть
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation Asks the delegate to open a resource identified by URL.
Согласно документам, этот метод вызывается после применения: DidFinishLaunchingWithOptions: когда последний метод возвращает YES. Если ваше приложение уже открыто, вызывается только этот метод.
Ваша реализация этого метода должна открыть указанный URL и обновите его пользовательский интерфейс соответствующим образом. Если ваше приложение должно быть запущено чтобы открыть URL-адрес, приложение вызывает применение: willFinishLaunchingWithOptions: и применение: didFinishLaunchingWithOptions: методы сначала, а затем этот метод. Возвращаемые значения этих методов можно использовать для предотвращения этот метод от того, чтобы быть вызванным. (Если приложение уже запущено, только этот метод называется.)