AppleiOS 10iOS 11iOS 9ИнструкцииМобильный маркетингПрямые ссылкиТехническая информацияУниверсальные ссылки

Настройка универсальных ссылок для использования прямых ссылок в Apple iOS

By Октябрь 30, 2017 No Comments

Этот материал был впервые опубликован 24 июля 2015 г., а затем был обновлен (добавлена последняя информация об iOS 9.2). Поскольку Apple больше не поддерживает схемы URI для прямых ссылок,, разработчикам приходится использовать универсальные ссылки, чтобы обеспечить правильную работу прямых ссылок в iOS. Если вы уже используете схемы URI, см. материалы по переходу на универсальные ссылки в нашем блоге. 

Мы уделяем много усилий реализации прямых ссылок на мобильных платформах. Мы создали универсальную ссылку, которую можно использовать где угодно (на любых платформах, на любых устройствах, в любых магазинах приложений), чтобы привлекать пользователей. Это одиночная ссылка, она полностью настроена, чтобы указывать на ваше приложение из любого канала (Facebook, Twitter, Gmail и пр.), она отображается в результатах поиска на всех поисковых порталах (индексирование приложений Google, поиск Bing, Apple Spotlight).

Наше решение просто работает. Более того, мы уже опубликовали в блоге статьи о том, как настроить индексирование приложений Google и ак использовать прямые ссылки в Facebook, можете ознакомиться с ними.

Slide1

Когда корпорация Apple объявила об «универсальных ссылках» на последней конференции WWDC, мы сразу решили внедрить их в платформу прямых ссылок Branch. Мы даже не представляли, насколько непросто будет добиться работоспособности этого решения. Потратив на это уйму времени и учитывая, насколько мало доступной документации по этому вопросу, мы решили опубликовать инструкции по использованию универсальных ссылок, чтобы сэкономить время другим разработчикам.

Итак, как универсальные ссылки работают в iOS 9?

До появления универсальных ссылок основным механизмом открытия приложения (если оно установлено) была попытка перенаправления к схеме URI приложения (зарегистрированной в PLIST приложения) в Safari. При этом логика переадресации обрабатывалась в Safari, но не было возможности проверить, установлено ли приложение. Это означало, что разработчикам приходилось вызывать схему URI в 100 % случаев, надеясь, что приложение установлено, а затем мягко откатываться в App Store, определяя отсутствие приложения по таймеру.

Эта проблема должна была быть решена с помощью универсальных ссылок в iOS 9. Вместо открытия Safari при первом переходе по ссылке операционная система iOS теперь сначала проверяет, зарегистрирована ли универсальная ссылка для домена, связанного со ссылкой, а затем проверяет, установлено ли соответствующее приложение. Если приложение установлено, оно будет открыто. Если приложение не установлено, откроется браузер Safari, в котором будет загружена ссылка http(s):// .

Таким образом, функционально мы получили одну ссылку, по которой открывается либо приложение, либо мобильный сайт.

Руководство по интеграции универсальных ссылок

Вот общее описание действий по использованию универсальных ссылок в вашем приложении:

1. Настройте приложение для регистрации утвержденных доменов.

  1. Зарегистрируйте приложение на сайте developer.apple.com.
  2. Включите «Связанные домены» в идентификаторе приложения.
  3. Включите «Связанные домены» в проекте Xcode.
  4. Добавьте необходимое разрешение для домена.
  5. Убедитесь, что файл разрешений включен при сборке.

Если вы используете Branch, то этого достаточно. Если нет, то переходим ко второй части.

2. Настройте свой веб-сайт для размещения файла AASA (связь приложения Apple и сайта).

  1. Купите домен или выберите один из ваших существующих доменов.
  2. Получите сертификат SSL для этого домена.
  3. Создайте структурированный JSON. apple-app-site-association файл связи приложения Apple и сайта JSON.
  4. Подпишите файл JSON сертификатом SSL.
  5. Настройте файловый сервер.

Если вы используете службу Branch, то вам не потребуется получать сертификат SSL, подписывать и размещать файл JSON вашего сервера, мы об этом уже позаботились. Нужно будет только изменить код приложения, чтобы использовать все это. Подробнее см. ниже в этой публикации.

Примечание. Мы также создали программу для проверки правильности файла apple-app-site-association связи приложения Apple и сайта.

Раздел 1. Настройка разрешений приложения

Примечание. Новые версии Xcode обычно назначают права для вас автоматически. Вы можете сразу перейти к разделу включить связанные домены в проекте Xcode ниже и обращаться к этим инструкциям только при возникновении проблем.

Чтобы зарегистрировать проект Xcode для использования универсальных ссылок, нужно создать идентификатор приложения на портале разработчиков Apple и включить необходимые разрешения. Настройка аналогична той, которая требуется для покупок в приложениях.

Для универсальных ссылок невозможно использовать подстановочный идентификатор приложения.

Зарегистрируйте приложение на сайте developers.apple.com

Сначала перейдите на сайт developer.apple.com войдите. Щелкните Сертификат, идентификаторы и профилизатем щелкните «Идентификаторы».

Apple Developer Portal for Universal LinksApple Dev Portal for Universal Links

Если ваш идентификатор приложения еще не зарегистрирован, вам потребуется его создать. Для этого щелкните «+». Если идентификатор у вас уже есть, можно перейти к следующему разделу.

Нужно заполнить два поля: имя и ИД пакета. Имя может быть произвольным. В качестве ИД пакета нужно указать значение пакета.

Explicit App ID for Universal Links

 

Его можно узнать на вкладке «Общие» проекта Xcode для соответствующей целевой платформы сборки.

Setting up Universal Links in xcode

Включите «связанные домены» в вашем идентификаторе приложения на сайте developers.apple.com.

Для предыдущих или текущего идентификатора приложения прокрутите вниз до последнего раздела и установите флажок «Связанные домены».

Setting up App ID for Universal Links

 

Прокрутите вниз и щелкните «Сохранить».

Включите «связанные домены» в проекте Xcode

Теперь нужно включить разрешение «Связанные домены» в проекте Xcode. Сначала убедитесь, что в вашем проекте Xcode выбрана такая же команда, как и для только что зарегистрированного идентификатора приложения. Затем перейдите на вкладку «Возможности» tab of

Universal Links in xcode

Прокрутите вниз и установите флажок «Связанные домены» , чтобы гармошка расширилась.

setting up associated domain for Universal Links

Если увидите подобную ошибку, поверьте следующее:

  1. выбрана нужная команда;
  2. идентификатор пакета проекта Xcode совпадает с использованным при регистрации идентификатора приложения.

Добавьте разрешение для домена

В разделе доменов добавьте соответствующий тег домена. Перед ним необходимо указать префикс applinks:. В этом случае мы добавили applinks:yourdomain.com.

App Links and your domain

Убедитесь, что файл разрешений включен при сборке

В Xcode 7 мой файл разрешений не был добавлен в сборку. В обозревателе проектов убедитесь, что новый файл разрешений выбран для соответствующих целевых платформ сборки.

Configuring xcode for universal links

 

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

Если хотите избавить себя от многочасовой головной боли, можно забыть про всю работу по размещению JSON и получению сертификатов SSL и просто использовать ссылки Branch https://dev.branch.io/recipes/branch_universal_links. Если же вы предпочитаете лично контролировать каждый байт и не боитесь нудной работы, то продолжаем дальше.

Раздел 2. Настройка файла связи приложения Apple и сайта

Универсальные ссылки превращают URL-адрес вашего веб-сайта в ссылку приложения, поэтому для использования универсальных ссылок потребуется действующий веб-сервер. Для помощи в этом используйте нашу программу Universal Links Validator она проверяет правильность настройки файла связи приложения Apple и сайта. apple-app-site-association

Выберите домен

Сначала укажите домен, который следует использовать для универсальных ссылок. Можно зарегистрировать новый домен или использовать существующий. При регистрации нового домена рекомендуем использовать регистратора с проверенной репутацией и не склонного к рассылке спама, напримерgandi.net.

Получите сертификат SSL

Нужно получить файлы сертификата SSL для домена, на котором будут размещены универсальные ссылки. Потребуется использовать стороннюю службу, чтобы зарегистрировать ваш домен для SSL и создать необходимые файлы. Мы выбрали компанию Digicert для домена branch.io и подчиненных доменов.

Выполните следующие действия для создания сертификата SSL.

  1. Посетите веб-сайт https://www.digicert.com/easy-csr/openssl.htm и заполните форму в верхней части окна, чтобы создать команду openSSL. Не закрывайте это окно.
  2. Войдите на свой удаленный сервер.
  3. Выполните команду openSSL, чтобы создать запрос подписания сертификата (.csr) и файл сертификата (.cert).
  4. Оплатите сертификат SSL по адресу https://www.digicert.com/welcome/ssl-plus.htm.
  5. Дождитесь утверждения и отправки итоговых файлов компанией Digicert.
  6. Затем переместите файлы yourdomain.com.cert, yourdomain.com.key и digicertintermediate.cert в один и тот же каталог на вашем удаленном севере.

Создайте файл связи приложения Apple и сайта JSON.

Этот файл JSON содержит стандартную структуру, поэтому можно просто скопировать эту версию и отредактировать ее в соответствии с вашими нуждами. Ниже я расскажу, где получить нужные значения.

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "T5TQ36Q2SQ.com.branch.sdk.TestBed",
        "paths": ["*"]
      }
    ]
  }
}

Нужно изменить только поля, связанные с T5TQ36Q2SQ.com.branch.sdk.TestBed. Это два значения, разделенные точкой. Оба значения находятся на сайте developers.apple.com в разделе «Идентификаторы» -> «Идентификаторы приложений». Просто щелкните соответствующий зарегистрированный идентификатор приложения, как показано ниже.

Configuring Apple ID for Universal Links

В этом примере префикс и идентификатор показаны вместе, они разделены точкой: T5TQ36Q2SQ.com.branch.sdk.TestBed.

Сохраните этот файл JSON как apple-app-site-association-unsigned.

Подпишите этот файл JSON своим сертификатом SSL.

Примечание. Если ваш домен уже сертифицирован как HTTPS, можно пропустить этот шаг и отправить JSON в виде обычного текста. Apple’s updated requirements:

Если ваше приложение работает на iOS 9 или более поздней версии и вы используете HTTPS для файлаapple-app-site-association, вы можете создать файл обычного текста, который будет использовать application/json MIME-тип и вам не потребуется подписывать его. Если поддерживается Handoff и Shared Web Credentials в iOS 8, вам потребуется подписать файл, как описано в Shared Web Credentials Reference.

Все файлы apple-app-site-association на платформе Branch сейчас используют не подписаный application/json MIME-тип.

Скопируйте файл apple-app-site-association-unsigned на сервер в ту же папку, где находятся файлы сертификата и ключа, полученные на предыдущих шагах. В командной строке перейдите в эту папку и выполните следующую команду:

cat apple-app-site-association-unsigned | openssl smime -sign -inkey yourdomain.com.key -signer yourdomain.com.cert -certfile digicertintermediate.cert -noattr -nodetach -outform DER > apple-app-site-association

При этом будет создан файл apple-app-site-association.

Настройте файловый сервер.

Отлично! Итак, файл связи приложения Apple и сайта подписан. Осталось лишь настроить файловый сервер для размещения этого файла. При этом действует ряд оговорок.

  1. Файл необходимо отправлять с заголовком application/pkcs7-mime (или application/json, как указано выше).
  2. Его необходимо отправлять из конечной точки youdomain.com/apple-app-site-association, и/или youdomain.com/.well-known/apple-app-site-association ( только iOS 9.3+ ).
  3. Сервер должен возвратить код HTTP 200.

Мы настроили один сервер для всех интегрированных приложений Branch с помощью наших серверов Node + Express link. Вот код, использованный для этого.

var aasa = fs.readFileSync(__dirname + '/static/apple-app-site-association');
app.get('/apple-app-site-association', function(req, res, next) {
     res.set('Content-Type', 'application/json');
     res.status(200).send(aasa);
});

Branch и руководство по интеграции универсальных ссылок в iOS 9

Напоминаем, что всей этой работы по размещению JSON и получению сертификатов SSL можно избежать, если использовать ссылки Branch.
Удачи!