Схема URL в уже открытом приложении


Я разрабатываю приложение, которое должно быть связано с другим приложением следующим образом:

  1. В первом приложении есть кнопка, которая через схему URL открывает второе приложение и передает два параметра (user и password).

  2. Второе приложение проверяет эти параметры и предоставляет доступ, если они в порядке.

Система работает хорошо, если второе приложение не открыто, но если второе приложение уже открыто (в фоновом режиме) и вызывается из первого приложения с другим пользователем и пароль, не работает (метод схемы URL в AppDelegate вызывается только один раз, конечно).

Есть ли способ разрешить второму приложению получать новые парамет-ры, даже если оно уже открыто?

Спасибо.

2 3

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: методы сначала, а затем этот метод. Возвращаемые значения этих методов можно использовать для предотвращения этот метод от того, чтобы быть вызванным. (Если приложение уже запущено, только этот метод называется.)