Http 302 redirect to deep link не работает в Android


У нас есть приложение на iOS и Android. Оба они реализуют одну и ту же глубинную связь (например, myapp: / / home/?abc=xxx&bcd=yyy)

Мы протестировали в iOS и Android, глубокая ссылка работает, и она может открыть наше приложение.

Затем мы создаем API-сервис. (например, https://myapp.com/testing/1234568 )

Когда пользователь нажимает на эту ссылку, он определяет, является ли пользователь мобильным клиентом, использующим HTTP-заголовок User-Agent.

Если клиент является мобильным, он вернет HTTP 302 с заголовком Location, равным нашей глубокой ссылке.
Запрос и ответ примерно таковы:

GET /testing/1234568 HTTP/1.1
Host: myapp.com
Accept: */*
User-Agent: Mozilla/5.0 (Linux; Android 7.0; SM-G930V Build/NRD90M) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36


HTTP/1.1 302
Location: myapp://home/?abc=xxx&bcd=yyy
Content-Length: 0

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

Однако для Android это не работает. Пользователь не может перейти к нашему приложению после перехода по ссылке. Он по-прежнему остается на чистой странице.

Я протестировал, чтобы использовать html с javascript, как показано ниже:

<html>
<head>
  <script  type="text/javascript">
    window.onload = function(){ 
      window.location="myapp://home/?abc=xxx&bcd=yyy";
    };
  </script>
</head>
</html>

Пользователь Android может успешно перенаправить обратно в приложение.
Однако по какой-то причине я не могу вернуть html в свой API-сервис.
Есть ли какие-либо способы перенаправить пользователя обратно в мобильное приложение с помощью HTTP 302 в Android?

1 3

1 ответ:

Я полагаю, что ваша проблема может быть вызвана конкретным поведением браузера. На Android Chrome не обрабатывает URI-схемы так же, как браузер Android. Я склоняюсь к тому, что вы используете Chrome и должны использовать Chrome Intents. по сути, в Chrome вы должны использовать схему URI, отформатированную следующим образом:

intent://<optional path>#Intent;scheme=<URI scheme>;package=<package>;S.browser_fallback_url=<optional encoded fallback URL>;end

Схема URI [требуется]: это та же схема URI, которую вы использовали выше

Имя пакета приложения [обязательно]: это пакет имя приложения, настроенного для данного проекта.

URI path [необязательно]: Если вы хотите пройти по любому пути для маршрутизации

Резервный URL-адрес [необязательно]: это необязательное поле, в котором можно указать URL-адрес закодированного веб-сайта для резервного копирования, если приложение не установлено. По умолчанию, если не указано, можно открыть страницу приложения Play Store. Если вы не используете эту переменную, просто удалите всю’ S. browser_fallback_url= ' часть строки intent.

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