Подтвердить что ты не робот

Перенаправить на приложение, если оно установлено, иначе в App Store

Я знаю, что можно напрямую связать приложение с iOS, зарегистрировав пользовательскую схему (например, так://), а также можно связать приложение с Appunes через itunes.

Во многих случаях идеальным потоком является предоставление ссылки, которая перенаправляет приложение, если оно установлено, и в хранилище, если нет. Возможно ли это, и если да, то как?

Добавлен для ясности, сценарий: я открываю ссылку (http) из электронной почты на своем iphone, предлагая мне присоединиться к группе в приложении. Если у пользователя установлено приложение на этом устройстве, оно должно открыться, иначе ссылка http должна быть перенаправлена ​​на itunes.

4b9b3361

Ответ 1

Невозможно проверить это. Однако есть приятное обходное решение.

Идея в основном такова:

  • При первом открытии приложения вы открываете мобильное сафари из своего приложения на предопределенный URL-адрес на вашем сервере.
  • На этом URL-адресе вы настроили файл cookie, например appInstalled для сафари пользователей для мобильных устройств.
  • Затем вы удаляете пользователя обратно в свое приложение с помощью вашей зарегистрированной схемы (то же, что и FB с SSO)
  • Все ваши ссылки по электронной почте указывают на ваш сайт, но на веб-сайте вы проверяете, является ли браузер мобильным Safari и существует ли установленный файл cookie appInstalled.
  • Если браузер не является мобильным Safari или cookie не найден, вы перенаправляетесь в AppStore или остаетесь на своей веб-странице.
  • Если условия №4 верны, вы перенаправляете пользователя в свое приложение с зарегистрированной схемой.
  • Если приложение было удалено пользователем, поэтому схема пользовательского url не работает, у вас есть отказоустойчивое перенаправление к appstore

Два последних шага объясняются в этом сообщении SO

Ответ 2

Я думаю, что более простым ответом было бы создание страницы на вашем сервере со следующим javascript:

(function() {
  var app = {
    launchApp: function() {
      window.location.replace("myapp://");
      this.timer = setTimeout(this.openWebApp, 1000);
    },

    openWebApp: function() {
      window.location.replace("http://itunesstorelink/");
    }
  };

  app.launchApp();
})();

Это в основном пытается перенаправить ваше приложение и устанавливает тайм-аут для перенаправления на магазин приложений, если он не работает.

Вы даже можете сделать код немного более умным и проверить агент пользователя, чтобы узнать, являются ли они пользователем ios, пользователем Android или веб-браузером, а затем перенаправляют их соответствующим образом.

Ответ 3

Если у вас есть веб-страница, на которую вы ссылаетесь, из электронной почты с веб-страницей, содержащей iframe с параметром src, настроенным на пользовательскую схему для вашего приложения, iOS автоматически перенаправляется на это место в приложении. Если приложение не установлено, ничего не произойдет. Это позволяет вам глубоко входить в приложение, если оно установлено, или перенаправить в App Store, если он не установлен.

Например, если у вас установлено приложение twitter и перейдите на веб-страницу, содержащую следующую разметку, вы сразу же будете перенаправлены в приложение. Если у вас не было установленного приложения Twitter, вы увидите текст "Приложение Twitter не установлено".

<!DOCTYPE html>
<html>
    <head>
    <title>iOS Automatic Deep Linking</title>
    </head>
    <body>
        <iframe src="twitter://" width="0" height="0"></iframe>
        <p>The Twitter App is not installed</p>
    </body>
</html>

Вот более подробный пример, который перенаправляется в App Store, если приложение не установлено:

<!DOCTYPE html>
<html>
    <head>
    <title>iOS Automatic Deep Linking</title>
    <script src='//code.jquery.com/jquery-1.11.2.min.js'></script>
    <script src='//mobileesp.googlecode.com/svn/JavaScript/mdetect.js'></script>
    <script>
      (function ($, MobileEsp) {
        // On document ready, redirect to the App on the App store.
        $(function () {
          if (typeof MobileEsp.DetectIos !== 'undefined' && MobileEsp.DetectIos()) {
            // Add an iframe to twitter://, and then an iframe for the app store
            // link. If the first fails to redirect to the Twitter app, the
            // second will redirect to the app on the App Store. We use jQuery
            // to add this after the document is fully loaded, so if the user
            // comes back to the browser, they see the content they expect.
            $('body').append('<iframe class="twitter-detect" src="twitter://" />')
              .append('<iframe class="twitter-detect" src="itms-apps://itunes.com/apps/twitter" />');
          }
        });
      })(jQuery, MobileEsp);
    </script>
    <style type="text/css">
      .twitter-detect {
        display: none;
      }
    </style>
    </head>
    <body>
    <p>Website content.</p>
    </body>
</html>

Ответ 4

Да, это довольно легко. Для этого требуется приложение, которое вы хотите открыть, чтобы иметь URL-схему, объявленную в plist:

//if you can open your app
if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"yourapp://"]])
{
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"yourapp://"]];
}
else
{
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"ituneappstorelink"]];
}