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

#ios #xcode #parameter-passing #url-scheme

#iOS #xcode #передача параметров #url-схема

Вопрос:

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

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

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

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

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

Спасибо.

Ответ №1:

Есть 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
}
  

Ответ №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.
  

Согласно документам, этот метод вызывается после application:didFinishLaunchingWithOptions: когда последний метод возвращает YES . Если ваше приложение уже открыто, вызывается только этот метод.

Ваша реализация этого метода должна открыть указанный URL-адрес и соответствующим образом обновить его пользовательский интерфейс. Если для открытия URL-адреса необходимо было запустить ваше приложение, приложение сначала вызывает методы application:willFinishLaunchingWithOptions: и application:didFinishLaunchingWithOptions:, а затем этот метод. Возвращаемые значения этих методов могут быть использованы для предотвращения вызова этого метода. (Если приложение уже запущено, вызывается только этот метод.)