2016-08-04 6 views
3

Я внедрил custom URL scheme на Android и iOS с мыслью, что мы отправим пользователю «активационное» письмо , который нажимает ссылку, которая порождает собственное приложение.Невозможно получить gmail для Android, чтобы открыть собственную схему URL-адреса или намерение: // URL-адрес

Технически мы посылаем HTML форматированный письмо со ссылкой, например, как:

<a href="myapp://activate/accountId/uniquetoken">Click to activate</a> 

КСН он работает отлично, но на Android, это не работает.

Я видел несколько других сообщений о С.О. и подобных вещах, которые сам андроид должен обрабатывать custom URL scheme, но укажите, что это браузер Chrome и приложение GMail для Android, которое лишает эти пользовательские myapp:// URL-адреса.

В соответствии с рекомендацией некоторых из этих сообщений я попытался создать URL-адрес намерения. Я пробовал все следующие

intent://activate#Intent;scheme=myapp;package=com.mycompany.myapp;end 

#Intent;action=activate;end 

#Intent;component=com.mycompany.myapp/.ui.MainActivity;end 

intent://#Intent;component=com.mycompany.myapp/.ui.MainActivity;end 

но никто из них не работал. Ни один из них не был доступен из приложения GMail для Android на Android 6, а документация андроида в формате для намерения uri невероятно плохо документирована. Лучшее, что я могу найти «программно создать свое намерение в Java, а затем вызвать .toUri на нем» (который, как я произвел большую часть разбитого намерения Ури выше)

Любая помощь будет высоко ценится


Update 1. Вот моя деятельность и намерения от Android манифеста

<activity android:name=".ui.MainActivity" android:theme="@style/AppTheme.NoActionBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 

     <!-- load via URL scheme --> 
     <intent-filter> 
      <data android:scheme="myapp" /> 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.BROWSABLE" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 

Я попытался создать веб-сервер, который «отражает» назад к схеме пользовательских приложений, и это работает для обоих Android и iOS

<a href="http://mycloudserver.net/myapp/activate/accountId/uniqueToken">Click</a> 

Эта страница делает 302 перенаправления

myapp://activate/accountId/uniqueToken 

Веб-браузер (Chrome для Android) следует переадресацию, который вызывает нативный приложение для запуска, так что это обеспечить решение (сортов) для приложения Gmail для Android.

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

На iOS он также оставляет пустую страницу в браузере Safari, что является незначительным, но несчастливым.

+0

Для 'myapp: // activate/accountId/uniqueToken' вам может потребоваться указать полный путь в вашем намерении или, по крайней мере, достаточно далеко на пути, который« фильтр-замысел »в вашем' AndroidManifest.xml 'может идентифицировать его. Не могли бы вы вставить свой 'намеренный фильтр' 'AndroidManifest.xml', который обрабатывает схему URL? – nicobatu

ответ

2

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

Маршрутизация через пункт назначения облака действительно является единственным надежным способом для этого, и в Branch.io мы используем решение, аналогичное тому, что вы собрали вместе. Если вы используете облачное назначение с интеллектуальным перенаправлением для объединения Universal Links (iOS 9+), схемы URL (iOS < 8, базовые Android), приложения (новый Android) и Chrome Intents (Chrome на Android), то вы обработали большинство ситуаций, которые возникли бы.Дополнительным преимуществом является то, что у вас также есть способ работать с устройствами без приложения, так как они будут видеть контент в облачном назначении, если все вышеперечисленные методы терпят неудачу. На iOS вы также можете запустить окончательный переадресацию после запуска приложения, чтобы не осталось пустого экрана, но это не работает во всех ситуациях.

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

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

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