Я пытаюсь открыть приложение, созданное в мобильном браузере Chrome.
https://developer.chrome.com/multidevice/android/intents
Из этой ссылки я понял, что должен использовать синтаксис «intent:» для выполнения работы.
Однако мое приложение не открывается. Вместо этого он открывает магазин Google Play, но в магазине просто отображается страница «элемент не найден».
Я хотел бы знать, делаю ли я что-нибудь не так.
<intent-filter>
<action android:name = "android.intent.action.VIEW" />
<category android:name = "android.intent.category.BROWSABLE" />
<category android:name = "android.intent.category.DEFAULT" />
<data android:scheme = "myscheme" android:host = "myhost" android:path = "/"/>
</intent-filter>
Это фильтр намерений, который я написал.
var androidIntentUrl = 'intent://myhost/#Intent;scheme=myscheme;package=my.test.app.package;end';
if (!isIOS && isChromeAndBiggerThanVer25()) {
location.href = androidIntentUrl;
}
И это то, что я написал в сети.
Должно ли приложение быть выпущено в Play Маркете, чтобы это произошло?
Я еще не совсем все понимаю.
Я хочу знать, что случилось.
PS) Имена «myscheme» и «myhost» - это просто имена, которые я придумал для написания этого вопроса. Фактические имена в моем коде совпадают с именами, написанными в настройках моего проекта, включая имя пакета.
@Alexey Спасибо за предложение. Однако в официальной документации (ссылка, которую я написал) говорится, что если вы используете браузер Android Chrome с версией выше 25, необходимо использовать синтаксис намерения. Я все равно попробую. Спасибо.
@Alexey Вау, это сработало! Спасибо!
Параметр package должен соответствовать идентификатору вашего приложения (находится в build.gradle или AndroidManifest.xml).
В приведенном выше примере кода пакет показан как my.test.app.package. Если это не имя вашего пакета приложения или приложение не установлено, для его поиска по умолчанию используется Google Play Store. Точно так же было бы лучше изменить параметры host и scheme на что-то индивидуальное для вашего приложения, если вы еще этого не сделали.
О, спасибо за ответ. К сожалению, это всего лишь имена, которые я придумал, когда писал вопрос. В моем фактическом коде параметр пакета действительно соответствует идентификатору приложения. Извините, что забыл об этом упомянуть.
Ой! Должен был понять, что: P
Как прокомментировал мой пост Алексей:
<a href = "myscheme://myhost/some/other/parameters">
работал нормально для меня.
Я дважды проверил официальный документ (ссылка в моем сообщении) и свою версию Chrome (71), поэтому я понятия не имею, почему синтаксис intent: // не сработал.
Думаю, после 25 версии в мобильном Chrome были изменения, которые я пропустил или не смог найти.
Мой ответ - открыть приложение для Android из веб-приложения, используя глубокую ссылку:
Flipkart - <a href = "flipkart://app"> Open Flipkart! </a>
WhatsApp - <a href = "whatsapp://app"> Open WhatsApp! </a>
Clash Royale - <a href = "clashroyale://app"> Open Clash Royale! </a>
FaceBook - <a href = "fb://app"> Open FaceBook! </a>
Если указанное приложение установлено на вашем мобильном телефоне, то откроется только оно, либо вам придется разбираться с делом отдельно.
Я только что столкнулся с той же проблемой, когда связывание с намерениями не работало, а прямое связывание схемы работало. Однако я не хотел использовать прямую версию для резервного перенаправления в PlayStore.
Решение заключалось в том, что параметр пакета в ссылке намерения должен был соответствовать нет пакету, указанному в AndroidManifest.xml. Я работал с проектом Unity, и мне пришлось использовать имя пакета, указанное в настройках проекта.
tl; dr: это все еще работает в Chrome (v78), но параметр пакета не обязательно является пакетом, указанным в манифесте.
Где мы находим название пакета?
Ссылку типа
<a href = "myscheme://myhost/some/other/parameters">пробовали? Я думаю, вам нужно использовать вашу определенную схему (myscheme в вашем случае) вместоintent://