веб-приложение, вызывающее приложение? Световая схема может знать достаточно!

JavaScript

Многие люди столкнутся с этой проблемой, и большинство из них объясняют эту проблему с точки зрения мобильного терминала.Эта статья начнется свеб-сторонаАнализировать и решать проблемы с точки зрения

задний план

Понимание предыстории поможет нам глубже понять потребности и проанализировать их.

Количество пользователей и трафик определяют качество интернет-продукта. Для элегантного интернет-продукта важна сторона приложения и веб-часть, и мы используем их, чтобы сформировать замкнутый цикл, чтобы обеспечить взаимодействие с пользователем и его активность. Помимо сквозного покрытия нам также необходимо добиться сквозного взаимодействия, поэтому выдвигаем требования к продукту: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 можно изменить как угодно, это потрясающе