Подтвердить что ты не робот

Глубокая привязка Android к приложению

Я пытаюсь создать ссылку, которая может быть отправлена ​​по электронной почте, которая при открытии на устройстве Android с установленным моим приложением автоматически откроет правильную страницу в моем приложении.

Я частично отработал несколько разных способов, но нашел несколько проблем, о которых мне было интересно, есть ли у кого-нибудь решения.

Попытка 1: Использование пользовательской схемы: myapp://someItem. Это работает, но некоторые приложения электронной почты не рассматривают это как ссылку, поскольку это не http. Есть ли способ заставить приложения рассматривать его как действительную ссылку? gmail, например.

Попытка 2: Использование ссылки http с хостом: http://com.myapp/someItem. Это также работает, но мое приложение заканчивается зарегистрированным, чтобы обрабатывать все http-ссылки, которые не идеальны.

Попытка 3: Использование ссылки http с хостом и портом: http://com.myapp:2345/someItem. Это мое текущее решение, единственным недостатком которого является то, что при открытии ссылки он по-прежнему дает возможность открыть ссылку в браузере. Есть ли способ остановить браузер, пытающийся открыть мои ссылки?

Есть ли у кого-нибудь способ сделать ссылки, которые будут рассматриваться как ссылки для всех приложений, а также игнорировать браузер при их открытии?

4b9b3361

Ответ 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

Если вы можете использовать что-то серверное, возможно, у вас может быть обычная страница, которая переходит на ссылку пользовательской схемы из браузера при посещении? Это имеет дополнительное преимущество, возможно, возможность определить, установлено ли приложение и запросить установку.

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