appLinks не открывает приложение iPhone из электронной почты

Я пытаюсь создать среду, позволяющую открывать приложение для iPhone по электронной почте. Если я использую размещенный сервис Facebook для appLink ( API хостинга Facebook AppLink), я могу успешно открыть приложение, если нажму на ссылку, которую оно создает в мобильном приложении Facebook. Но если я попытаюсь нажать на эту же ссылку из другого мобильного приложения (например, Notes или Mail), оно будет перенаправлено только на Facebook, но не на мое приложение. Кроме того, API хостинга Facebook AppLink позволяет создавать ссылки только для одного приложения. Я хочу иметь возможность автоматически открывать либо мою платную версию приложения, либо бесплатную версию приложения (в таком порядке) в зависимости от того, какое приложение пользователь имеет на своем мобильном устройстве.

Итак, я следовал описанию ( http://applinks.org/), как настроить метатеги на моем собственном сервере для выполнения задачи по открытию AppLink. Итак, у меня есть веб-страница со следующим HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>MyApp</title>
<meta property="al:iphone:url" content="myAppLinkScheme://Home">
<meta property="al:iphone:app_name" content="MyApp">
<meta property="al:iphone:app_store_id" content="471147787">
<meta property="al:iphone:url" content="myAppLinkLiteScheme://Home">
<meta property="al:iphone:app_name" content="MyApp Lite">
<meta property="al:iphone:app_store_id" content="518829102">
<meta property="al:ipad:url" content="myAppLinkLiteScheme://Home">
<meta property="al:ipad:app_name" content="MyApp Lite">
<meta property="al:ipad:app_store_id" content="518829102">
<meta property="al:web:should_fallback" content="false">
</head>
<body>Redirecting...</body>
</html>

Затем я создал appLink, используя инструмент Facebook для размещения AppLink. Используя их Open Graph Object Debugger, я смог очистить содержимое AppLink, которое я создал с помощью их инструмента. Мета-теги Facebook были очень похожи на мои мета-теги, но имели пару отличий. Как я уже упоминал ранее, первое отличие состоит в том, что вы можете указать только одно приложение с помощью инструмента Facebook, поэтому есть только один метатег iPhone url, app_name и app_store_id. Двумя другими отличиями являются следующие теги [я заменил свой app_id в следующих тегах на....]:

<meta property="fb:app_id" content="28...........64">
<meta http-equiv="refresh" content="0;url=https://apps.facebook.com/28...........64/?fb_source=mobile">

Очевидно, что происходит перенаправление с метатегом "refresh" на apps.facebook.com. Я не знаю, что там происходит, но даже если я добавлю все эти теги в теги заголовков моей веб-страницы, результат будет одинаковым. Если вы нажмете на ссылку в мобильном приложении, таком как Почта или Заметки, вы откроете только мою веб-страницу. Перенаправление не происходит ни в мое приложение, ни в Facebook.

Обратите внимание, что я также добавил необходимую информацию о схеме в каждый из info.plists и appDelegates моего приложения. А именно, в типах URL моего info.plist я добавил идентификатор com.myApp.myAppLinkScheme и схему myAppLinkScheme. Аналогичное дополнение было сделано для облегченной версии info.plist. Также я добавил необходимые изменения в свой appDelegate как для платной, так и для бесплатной версии приложения:

-(BOOL)application:(UIApplication *)application
           openURL:(NSURL *)url
 sourceApplication:(NSString *)sourceApplication
        annotation:(id)annotation {

    if ([[url scheme] isEqualToString:@"myAppLinkScheme"]) {
        return YES;
    }
    ...
}

Итак, я явно что-то упускаю. Какая дополнительная реализация требуется для настройки моего сервера таким образом, чтобы, когда пользователь щелкает ссылку, указывающую на мой сервер, из приложения Mail на своем iPhone, он перенаправляется в мое приложение?

1 ответ

Решение

Те <meta> теги уважаются приложениями (такими как Facebook), которые реализовали протокол Applinks и знают, как их искать. Другие приложения, такие как Mail и Safari, полностью игнорируют их, открывая запасной URL.

Когда вы используете API мобильного хостинга, этот резервный URL-адрес регистрируется для открытия приложения Facebook. К сожалению, Facebook не перенаправляет вас в ваше собственное приложение.

Когда вы используете свой собственный сервер, резервным вариантом является просто URL на вашем веб-сайте... который не зарегистрирован ни для чего. Еще.

Чтобы обойти это, вам нужно выполнить перенаправление ссылки на приложение каким-либо образом, который не зависит от Facebook. Есть несколько вариантов:

  1. Реализуйте перенаправление JavaScript на вашем сервере примерно так:

    setTimeout(function() {
      window.location = "https://itunes.apple.com/path/to/your/app/";
    }, 25);
    
    // If "yourapp://" is registered, the user will see a dialog
    // asking if want to open your app. If they agree, your app will 
    // launch  immediately and the timer won't fire.
    // If not installed, you'll get an ugly "Cannot Open Page" 
    // dialogue and the App Store will launch when the timer expires.
    
    window.location = "yourapp://";
    

    Очевидно, что это не идеальное решение, и в нем есть множество неприятных крайних случаев, в частности, пользователи с ошибкой "Не удается открыть страницу" увидят, что у вас не установлено ваше приложение. До недавнего времени это можно было обойти. достаточно удобным для пользователя путем интеллектуального перенаправления в App Store с более тонкой версией этого скрипта. К сожалению, Apple намеренно сломала это с обновлением iOS 9.2.

  2. Включить универсальные ссылки. Apple знает, что это надоедливая проблема, и пытается помочь. Universal Links позволяет вам использовать обычный URL-адрес для страницы на вашем веб-сайте (заботясь о резервной проблеме, связанной с не установленным приложением), которая перехватывается вашим телефоном и отправляется непосредственно в ваше приложение, если оно установлено. К сожалению, Universal Links работает только в iOS 9+ иеще не работает, когда открывается во многих приложениях (включая, по иронии судьбы, Facebook).

Лучшее решение - это сочетание перечисленных выше методов: универсальные ссылки и ссылки на приложения везде, где они поддерживаются, и интеллектуальные перенаправления JavaScript в качестве запасного варианта. Это довольно сложная задача, поэтому лучшим вариантом может стать бесплатный сервис, такой как https://branch.io/ (полное раскрытие: я работаю с командой), который позаботится обо всех технических аспектах.

Другие вопросы по тегам