Глубокая привязка Android к приложению
Я пытаюсь создать ссылку, которая может быть отправлена по электронной почте, которая при открытии на устройстве Android с установленным моим приложением автоматически откроет правильную страницу в моем приложении.
Я частично отработал несколько разных способов, но нашел несколько проблем, о которых мне было интересно, есть ли у кого-нибудь решения.
Попытка 1: Использование пользовательской схемы: myapp://someItem. Это работает, но некоторые приложения электронной почты не рассматривают это как ссылку, поскольку это не http. Есть ли способ заставить приложения рассматривать его как действительную ссылку? gmail, например.
Попытка 2: Использование ссылки http с хостом: http://com.myapp/someItem. Это также работает, но мое приложение заканчивается зарегистрированным, чтобы обрабатывать все http-ссылки, которые не идеальны.
Попытка 3: Использование ссылки http с хостом и портом: http://com.myapp:2345/someItem. Это мое текущее решение, единственным недостатком которого является то, что при открытии ссылки он по-прежнему дает возможность открыть ссылку в браузере. Есть ли способ остановить браузер, пытающийся открыть мои ссылки?
Есть ли у кого-нибудь способ сделать ссылки, которые будут рассматриваться как ссылки для всех приложений, а также игнорировать браузер при их открытии?
Ответы
Ответ 1
Этот метод, по-видимому, работает на Android от того, что я могу сказать:
http://mobile.dzone.com/news/custom-url-schemes-phonegap
Я еще не пробовал это в реальном приложении для производства, поэтому ваш пробег может отличаться. То, что я сделал, это использование этой технологии создания скрытого iframe и попытка установить местоположение в пользовательскую схему URL-адреса и вызвать функцию из onload для документа. То, что я видел до сих пор (я тестировал только на устройствах 2.2 и 2.3), заключается в том, что если у меня установлено приложение, которое обрабатывает пользовательскую схему, приложение запустится, и если не будет отображаться страница.
Относительно чистый единственный URL-адрес, охватывающий оба случая, и не разрушает такие вещи, как щебетать в URL-адресе. Реальная производственная версия может делать только скрытый iframe-зонд, если запрос исходит из того, что выглядит как платформа, которая может поддерживать приложение, чтобы снизить риск несовместимого поведения на рабочем столе.
Ответ 2
Чтобы ответить на ваши вопросы, ниже приведен пример фильтра намерений в манифесте.
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data
android:host="www.example.com"
android:pathPrefix="/home"
android:scheme="https"/>
</intent-filter>
В общем, когда кто-то нажимает на любую ссылку, начинающуюся с http://www.example.com/home, ему/ей предоставляется возможность открыть ее вместе с вашим приложением вместе с приложениями браузера.
Вы должны справиться с намерением в упражнении
Кроме того, схема может быть любой, но Google рекомендует использовать схему http, чтобы и ваше приложение, и приложение браузера могли прослушивать клики по ссылке с глубокими ссылками.
Примечание. Не забудьте добавить на свои веб-страницы android-app://имя вашего пакета /http/www.example.com/home/..., если вы хотите связать приложение.
Ответ 3
1 - установить пользовательские схемы URL, такие как http://example.com
Например, URL http://example.com/?id=95 откроет соответствующий FAQ и URL http://example.com/?sectionid=8 (где sectionid - идентификатор публикации любого раздела), откроет соответствующий раздел.
2 - Определите в AndroidManifest.xml
свой DeepLinkActivity
(тот, который будет получать данные URL:
<activity android:name="com.example.shilpi.deeplinkingsample.DeepLinkActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" android:host="example.com"/>
</intent-filter>
</activity>
3 - переопределить метод onResume()
вашего класса DeepLinkActivity
:
@Override
protected void onResume() {
super.onResume();
Intent in = getIntent();
Uri data = in.getData();
System.out.println("deeplinkingcallback :- "+data);
}
Ответ 4
Если вы можете использовать что-то серверное, возможно, у вас может быть обычная страница, которая переходит на ссылку пользовательской схемы из браузера при посещении? Это имеет дополнительное преимущество, возможно, возможность определить, установлено ли приложение и запросить установку.
Это не устраняет проблему открытия ссылок в браузере. Единственное истинное решение, о котором я могу думать, - это обработчик ссылок, который перескакивает в соответствующее приложение. Тогда проблема позволит пользователю изменить предпочтительный браузер...