#ios #xcode #parameter-passing #url-scheme
#iOS #xcode #передача параметров #url-схема
Вопрос:
Я разрабатываю приложение, которое должно быть связано с другим приложением таким образом:
-
В первом приложении есть кнопка, которая с помощью схемы URL открывает второе приложение и передает два параметра (пользователь и пароль).
-
Второе приложение проверяет эти параметры и предоставляет доступ, если они в порядке.
Система работает хорошо, если второе приложение не открыто, но если второе приложение уже открыто (в фоновом режиме) и вызывается из первого приложения с другим пользователем и паролем, не работает (метод схемы 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:, а затем этот метод. Возвращаемые значения этих методов могут быть использованы для предотвращения вызова этого метода. (Если приложение уже запущено, вызывается только этот метод.)