Многие люди столкнутся с этой проблемой, и большинство из них объясняют эту проблему с точки зрения мобильного терминала.Эта статья начнется свеб-сторонаАнализировать и решать проблемы с точки зрения
задний план
Понимание предыстории поможет нам глубже понять потребности и проанализировать их.
Количество пользователей и трафик определяют качество интернет-продукта. Для элегантного интернет-продукта важна сторона приложения и веб-часть, и мы используем их, чтобы сформировать замкнутый цикл, чтобы обеспечить взаимодействие с пользователем и его активность. Помимо сквозного покрытия нам также необходимо добиться сквозного взаимодействия, поэтому выдвигаем требования к продукту:WAP-страница вызывает приложение, и если у пользователя не установлено приложение, оно перейдет на страницу загрузки (подойдет любая загрузочная страница). Если пользователь установил его, перейдите к указанному интерфейсу в приложении по URL-адресу., что и является проблемой, которую пытается решить эта статья
1. Поговорим о самом традиционном методе и наиболее часто используемом методе: схема
Например 🌰:
wzry://videolists.show/mark/penta_kill?num=1
Этот метод требует предварительной регистрации соответствующей схемы в приложении и доступа к зарегистрированной схеме через веб-страницу, чтобы вызвать клиент приложения и связанные интерфейсы.
Конфигурация, связанная с Android: AndroidManifest.xml
<activity android:name=".ui.SchameFilterActivity">
<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="videolists.show"
android:path="/mark/penta_kill"
android:scheme="wzry"/>
</intent-filter>
</activity>
Что еще сказать о графической конфигурации iOS
Что касается логики после определения схемы, пожалуйста, сделайте это самиgoogle, но логика должна быть защищена
Ну, мы можем использовать его с удовольствием
<a href="wzry://videolists.show//mark/penta_kill?vid=666">你过来啊!</a>
(Вы также используете метод прямого доступа к адресу. В этом методе есть подводные камни: некоторые браузеры вернут код состояния 404 или станут страницей результатов поиска, особых проблем)
После объявления схемы вернитесь и посмотрите на требования: пользователь устанавливает приложение и активирует его. У пользователя он не установлен Нам нужно помочь пользователю загрузить . Тогда тут проблема:Веб-страница не знает, установил ли пользователь приложение.那我们换一个思路----可不可以知道页面被置于后台了?页面进入后台,可以认为是唤起成功了;页面没进入后台,说明唤起失败(没安装or其他原因)
Новый API полностью отвечает указанным выше требованиям:Page Visibility API, Этот API подробно описан в документе ----> Вы можете точно знать текущее состояние страницы (передний план, фон и т. д.),ноЭтот API слишком новый, требует поддержки новых браузеров, а охват немного низок. Поместите картинку, чтобы почувствовать это:
Позвольте мне поговорить о идеях:
-
Процесс реализации setTimeout:
Браузер пытается открыть схему URL и записывает момент времени t1. Через 2 секунды проверьте текущее время t2. Если t2-t1> 2200 мс, это означает, что приложение успешно запущено (вызванное приложение будет задержано браузером). таймер), если t2-t1
-
Процесс реализации setInterval
В принципе, как и в setTimeout, этот метод изменен, чтобы установить относительно небольшой интервал времени (например, 20 мс), выполнить несколько раз (например, 100) и сравнить общее время, затраченное на выполнение 100 раз, и разницу во времени 20 * 100. Логическое суждение такое же, как setTimeout
Преимущества и недостатки:
-
setTimeout нестабилен, так как Android основан на многозадачности с разделением времени Linux, отклонение setTimeout от бенчмарка будет не таким большим, и его сложнее настроить
-
setInterval лучше, страница всегда на переднем плане (приложение не вызывается), то после 100 запусков общее время будет не сильно отличаться от 100х20=2000мс, но когда страница работает в фоне (приложение app вызывается успешно), это время значительно превысит 2000 мс
Примечание. Я не знаю, почему setTimeout и setInterval задерживаются, пожалуйста, компенсируйте их принципы выполнения.
Ладно, рот-пушка закончилась, поехали 🌰:
setTimeout
var openTime = +new Date();
window.location.href = 'wzry://videolists.show/mark/penta_kill?num=1'
var timer = setTimeout(function () {
if ((new Date()) - openTime < 2200) {//加了200ms基准误差
window.location.href = 'you app download page';
}
if ((new Date()) - openTime > 2200) {
clearTimeout(timer);
}
}, 2000);
setInterval
var limit_num = 100;
var openTime = +new Date();
window.location.href = 'wzry://videolists.show/mark/penta_kill?num=1'
var timer = setInterval(function () {
if(limit_num > 0){
limit_num--;
}else{
if ((new Date()) - openTime < 2200) {//加了200ms基准误差
window.location.href = 'you app download page';
}
clearTimeout(timer);
}
}, 20);
После того, как мы завершим эти операции, приложение можно будет разбудить в обычных условиях.
2. Тогда позвольте мне рассказать об особой ситуации ---- Weibo, WeChat и т. д.
У такого приложения уровня отца есть белый список схем, только схемы из белого списка не будут отфильтровываться Боишься? Эм?
Как нам это решить?
(I) На самом деле, самый простой способ - склонить голову, как отец ---- использовать сокровище приложения.
Используйте адрес приложения, которое оно вам выдало, перейдите по этому адресу, а затем предоставьте все папе, просто игнорируйте WeChat или что-то в этом роде и отправляйтесь прямо в приложение.
(II) Использование универсальных ссылок
Это мощная функция, представленная в iOS9. может сделать тебяВызовите свое приложение по http-ссылке (независимо от того, находится ли оно в WeChat/Weibo или других приложениях, поскольку универсальные ссылки обрабатываются непосредственно системой)., позвольте мне кратко рассказать о том, как использовать универсальные ссылки для завершения приложения пробуждения, вы также можете использоватьофициальная документацияУзнайте больше об этом.
первый
- должен датьНастройка доменного имени httpsиспользовать его
- Настройте в центре разработчиков: найдите соответствующий идентификатор приложения -> Связанные домены, установите значение «Включено».
- Откройте проект, установите связанные домены в возможностях, заполните доменное имя, которое вы хотите поддерживать в доменах, обратите внимание, что оно должно иметь префикс applinks:
- Отредактируйте файл Apple-App-Site-Association (имя файла, формат JSON изменить нельзя, обратите внимание, что файл Apple-App-Site-Association не имеет суффикса формата)
{
"applinks": {
"apps": [],
"details": [
{
"appID": "TeamID + BundleId TeamID",
"paths": [ "/mark/penta_kill?num="]
}
]
}
}
- Загрузите файл в корневой каталог доменного имени, чтобы обеспечить доступ к нему.
После этого вы можете попытаться вызвать ваше приложение для iOS.
Здесь следует подчеркнутьПерехваченный адрес не должен находиться под тем же доменным именем, что и URL-адрес текущего веб-просмотра. Таким образом, универсальные ссылки вступят в силу.Не спрашивайте меня, откуда я знаю, это все кровь и слезы
3. Остался последний ---- сделай гайд сам, гайд пользователю открыть браузер и обойти ограничение. Однако в этом случае шагов больше, и скорость потерь может возрасти.
Подводить итоги,Приложение для Android не нашло лучшего способа, кроме как использовать сокровище приложения для перехода к вызову и навигации по странице, а решение для iOS добавило универсальные ссылки., вот почему мы часто видим, что некоторые приложения могут быть напрямую вызваны на стороне iOS в WeChat/Weibo, в то время как на стороне Android часто требуется приложение.
Что ж, приведенный выше контент - это часть моего резюме и опыта по возбуждению приложения, я надеюсь, что он может вам помочь.
Воспроизведение без моего разрешения запрещено. В статье есть упущения и поверхностность, прошу меня поправить
Модификация: было проверено, что WeChat добавил функцию взрыва для блокировки универсальных ссылок.Общий принцип выглядит следующим образом:Prevent universal links from opening in WKWebView
/UIWebView
Встроенный браузер Wechat можно изменить как угодно, это потрясающе