2016-12-10 12 views
1

Вот моя история. У меня есть приложение для Android, которое разделяет ссылку на мой сайт. на устройствах Android. Я хочу проверить, есть ли у пользователя приложение Android для Android и показать соответствующий контент по этой ссылке, но если у меня нет моего приложения, открывайте эту ссылку в браузере. Я использую DeepLinkDispatch для этого, но у меня есть проблема, когда пользователь нажимает на общую ссылку, андроид попросит клиенту выбрать, какое приложение открыть эту ссылку (включая мое приложение), но я хочу заставить открыть свое приложение. (если установлено на устройстве)Force open android app через схему

+0

попытайтесь изменить свой вопрос, трудно понять, что вы на самом деле после. –

ответ

-1

Это невозможно до Android 6.0.

В Android 6.0+ вы можете использовать automatic verification of app links, чтобы запросить, чтобы ваше приложение обрабатывало определенные URL-адреса, когда они используются в ACTION_VIEWIntents.

Однако:

  • Веб-браузер не должен использовать ACTION_VIEW для URL. Веб-браузер можно просто загрузить веб-страницу, указанную в URL-адресе.

  • Не знаю, работает ли проверка ссылок на приложение для Intent действий, кроме ACTION_VIEW. Ваш вопрос предполагает, что URL-адрес может использоваться вместо ACTION_SEND.

  • Пользователи могут войти в Настройки и не допустить, чтобы ваше приложение обрабатывало URL-адреса.

+0

спасибо, я понимаю, но у меня есть другой вопрос, когда я открываю канал канала телеграммы, он идет на сайт и автоматически открывает мобильное приложение, не спрашивая клиента. так что мой вопрос, как это работает? (даже на android pre 6.0) –

+0

@MostafaDavodi: единственный способ открыть ссылку в приложении, которая «гарантирована» только для этого приложения, - это если ссылка не выполняется ничем другим. Поскольку все URL-адреса 'http' и' https' будут выполняться веб-браузерами, это означает, что вам нужно будет использовать собственную схему (например, 'телеграмма'). Telegram, в частности, имеет действия, которые поддерживают схемы tg и tgb. Однако многие приложения не будут соблюдать такие URL-адреса. Например, клиент SMS может не признать, что 'tg: // ...' является URL-адресом и делает его доступным для кликов. – CommonsWare

+0

@MostafaDavodi: Что еще более важно, это не поддерживает ваши требования («но если у меня нет моего приложения, открывайте эту ссылку в браузере»). Веб-браузер может попробовать попробовать «ACTION_VIEW» для запуска приложения, когда он встречает ссылку на URL-адрес «tg: // ...». Однако, если для этого не установлено приложение, браузер не имеет возможности автоматически сопоставить это с каким-либо URL-адресом https, чтобы открыть веб-страницу. – CommonsWare

0

Вы должны определить намерения категории, по умолчанию и просматриваемый с андроид: схемы, андроид: хозяин и Android: PATHPREFIX в деятельности умысел фильтра в файле манифеста с учетом действия. Например, если URL-адрес: «http://www.example.com/gizmos». На основе хоста, схемы и префикса пути в андроиде данных обнаружено намерение, которое может обрабатывать URL-адрес. Чтобы включить os, чтобы найти свое намерение, вы должны добавить в приложение следующий фильтр.

<activity 
android:name="com.example.android.GizmosActivity" 
android:label="@string/title_gizmos" > 
<intent-filter android:label="@string/filter_title_viewgizmos"> 
    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <category android:name="android.intent.category.BROWSABLE" /> 
    <!-- Accepts URIs that begin with "http://www.example.com/gizmos” --> 
    <data android:scheme="http" 
      android:host="www.example.com" 
      android:pathPrefix="/gizmos" /> 
    <!-- note that the leading "/" is required for pathPrefix--> 
    <!-- Accepts URIs that begin with "example://gizmos” --> 
    <data android:scheme="example" 
      android:host="gizmos" /> 
</intent-filter> 

Тест глубокую связь: Вы можете проверить Deeplink из оболочки следующим образом:

adb shell am start -W -a android.intent.action.VIEW -d "http://www.example.com/gizmos" packageIDofYourApp 

Вы можете поковыряться на deplinking в developer site

Проверьте, если ваше приложение может получить намерение Вы можете проверить, может ли ваше приложение обрабатывать намеренно имея конкретный адрес, используя диспетчер пакетов:

Intent intent = new Intent(); 
    intent.setAction(Intent.ACTION_VIEW); 
    intent.setData(Uri.parse("http://www.example.com/gizmos")); 

    PackageManager packageManager = getPackageManager(); 
    List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 
      PackageManager.MATCH_DEFAULT_ONLY); 
    boolean isIntentSafe = activities.size() > 0; 
    System.out.println("print pack:"+ ((isIntentSafe == true) ? activities.get(0).activityInfo.packageName : "No package found")); 
+0

Я реализую эту часть, я просто хочу заставить устройство открыть мое приложение, не прося клиенту выбрать его. –

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

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