2016-03-18 5 views
0

Когда приложение открывается по схеме URL (в первый раз, когда приложение даже не находится в фоновом режиме), didFinishLaunchingWithOptions в приложении будет вызван, и мы сможем получить UIApplicationLaunchOptionsURLKey из словаря launchOptions.Как закрыть/вернуть вызов методу openURL

Я попытался вернуть NO в didFinishLaunchingWithOptions, но это не имело никакого значения.

Что я пытаюсь сделать, это закрыть приложение, когда что-то не так с параметрами в URL-адресе, и этот URL-адрес является URL-адресом, который открывает приложение.

Скажем, адрес myapp://&param1=2&param2=2 открывает мое приложение.

В делегате приложения я проверяю правильные параметры. Если значения параметра неверны, я не хочу, чтобы URL открыл мое приложение. Я хочу приостановить это действие и вернуться туда, откуда я пришел.

Я попытался сохранить NO как в didFinishLaunchingWithOptions, так и в openURL, но никто не дал мне то, что я хочу.

if (![self checkURL:launchOptions[UIApplicationLaunchOptionsURLKey]]) { 
     DLog(@"Don't launch the app/close the app"); 
     return NO; 
    } 

Есть ли способ, чтобы закрыть приложение (или по крайней мере сделать приложение, чтобы пойти фон), если URL является недействительным?

+0

В этом случае вы должны просто отобразить сообщение об ошибке. Вы не можете препятствовать открытию своего приложения или заставить его закрыться, и даже если бы он мог быть невероятно запутанным для пользователя. – dan

+0

Я подумал о том, чтобы показать пользователю о ситуации и отпустить это всплывающее окно, а затем отклонить приложение. Кажется, что это невозможно сделать так, как я хочу. Интересно, почему яблоко не обеспечило способ closeURL, как метод openURL. –

ответ

2

Закрытие приложения программно является технически нарушением Руководства пользователя по интерфейсу Apple (source). Официальная аргументация:

Никогда не оставляйте приложение iOS программно. Люди склонны интерпретировать это как катастрофу. Если что-то мешает вашему приложению функционировать должным образом, вы должны сообщить пользователям о ситуации и объяснить, что они могут с этим поделать. Вот два хороших способа сделать это:

  1. Если все функции приложения недоступны, отображается экран, который описывает ситуацию и предполагает коррекцию. Информация дает отзывы пользователям и заверяет их, что нет ничего плохого в вашем приложении. Он также ставит пользователей под контроль, позволяя им решить, хотят ли они предпринять корректирующие действия и продолжать использовать ваше приложение или переключиться на другое приложение.
  2. Если только некоторые функции приложения недоступны, отобразите экран или предупреждение, когда люди попытаются использовать эту функцию. В противном случае люди должны иметь возможность использовать остальную часть приложения. Если вы решите использовать оповещение, обязательно показывайте его только тогда, когда люди пытаются получить доступ к функции, которая не работает.

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

+0

, так что это похоже на двойную маршрутизацию? Маршрутизация FIrst похожа на сафари на приложение, а затем, если мой condiiton не удался, затем снова перейдите на сафари. Это то, что вы предлагаете? –

+0

Я думаю, это то, что вам нужно делать, да. Это было бы похоже на то, что делает Facebook с их системой аутентификации ... он мгновенно вспыхивает, а затем исчезает, если он уже разрешен. –

 Смежные вопросы

  • Нет связанных вопросов^_^