Android Deep Linking проблема! Как использовать схему пользовательского URL-адреса myapp://some_data
Я пробовал link1, link2, link3, link4, link5, link6
Здесь все описано о DeepLinking
То, что я хочу, это настраиваемый uri myapp://some_data, открывает собственное приложение, установленное на устройстве, для которого требуется инициализировать приложение some_data.
Есть два сценария, в которых можно щелкнуть пользовательский URL.
1) из приложения SMS, когда пользователь забирает ссылку, он должен автоматически открывать установленный в противном случае открытый магазин googleplay, где размещено приложение
2) изнутри сообщения электронной почты.
Я пробовал все перечисленные выше ссылки, но никто из них не работает для меня. У меня большая проблема со схемой.
Здесь мой AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="MainActivity"
android:label="@string/app_name"
android:exported="true" >
<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="inderbagga" />
</intent-filter>
</activity>
</application>
и здесь MainActivity.java
TextView tvText=(TextView)findViewById(R.id.tvid);
if (getIntent().getAction() == Intent.ACTION_VIEW&&getIntent().getScheme().equals("inderbagga")) {
Toast.makeText(getApplicationContext(), ""+getIntent().getScheme(), Toast.LENGTH_SHORT).show();
Uri uri = getIntent().getData();
// do stuff with uri
tvText.setText(uri.toString());
}
else tvText.setText("NULL");
Чтобы быть более конкретным, я хочу открыть собственное приложение, когда u url типа inderbagga://нажата кнопка a1b22c333, либо из приложения sms-приложения, либо из почтового сообщения gmail/yahoomail.
чтобы достичь того же, я использовал фильтры намерения для установки схемы. и getIntent() для чтения данных, равных a1b22c333 в MainActivity.
Ответы
Ответ 1
ссылка на ссылку означает, что этот код будет работать
<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="domain.com(google.com)"android:pathPrefix="/wp/poc1/(sufexes)" />
</intent-filter>
получить данные URL-адреса
//get uri data
Uri data = getIntent().getData();
//get schma
String scheme = data.getScheme(); // "http"
//get server name
String host = data.getHost(); // Ipaddress or domain name
//get parameter
String urltextboxname=data.getQueryParameter("name");
//set value in textview
name.setText(urltextboxname);
Ответ 2
Чтобы быть более конкретным, я хочу открыть собственное приложение, когда u url типа inderbagga://нажата кнопка a1b22c333, либо из приложения sms-приложения, либо из почтового сообщения gmail/yahoomail.
Для Android доступно множество приложений для SMS и электронной почты. Точно никто из них не знает, как конвертировать inderbagga://a1b22c333
в интерактивные записи. Вы можете составить список всех этих приложений, связаться с каждой из их групп разработчиков и попросить их добавить его.
Или вы могли бы использовать свое приложение для определенного URL http://
. Хотя пользователю будет предоставлен выборщик, чтобы просмотреть этот URL-адрес в вашем приложении или в веб-браузере, по крайней мере, он будет доступен для просмотра.
Ответ 3
Вы также можете попробовать эту библиотеку, которая облегчает объявление глубоких ссылок и извлечение необходимых параметров:
https://github.com/airbnb/DeepLinkDispatch
Он позволяет вам объявлять интересующий вас URI и параметр, который вы хотите извлечь из аннотаций, без необходимости выполнять синтаксический анализ.
Ответ 4
Похоже, проблема, с которой вы столкнулись, заключается в том, что ваш клиент электронной почты и SMS не разбирает схему и путь URI правильно. Большинство из них не позволяют вам напрямую вводить схему URI. Кроме того, если приложение не установлено, вам необходимо вернуться в Play Store, чтобы пользователь получил хороший опыт.
Для этого вам нужно вызвать схему URI на стороне клиента JS. Вы можете настроить простой веб-узел и использовать этот script:
<script type="text/javascript">
window.onload = function() {
var method = 'iframe';
var fallbackFunction = function() {
if (method == 'iframe') {
window.location = "market://details?id=your.package.name";
}
};
var addIFrame = function() {
var iframe = document.createElement("iframe");
iframe.style.border = "none";
iframe.style.width = "1px";
iframe.style.height = "1px";
iframe.src = "inderbagga://a1b22c333";
document.body.appendChild(iframe);
};
var loadChromeIntent = function() {
method = 'intent';
document.location = "intent://a1b22c333#Intent;scheme= inderbagga;package=your.package.name;end";
};
if (navigator.userAgent.match(/Chrome/) && !navigator.userAgent.match("Version/")) {
loadChromeIntent();
}
else if (navigator.userAgent.match(/Firefox/)) {
window.location = "inderbagga://a1b22c333";
}
else {
addIFrame();
}
setTimeout(fallbackFunction, 750);
};
</script>
Или вы можете использовать сервис, например branch.io, который автоматически собирает JS на стороне клиента для вас в дополнение к работе на рабочем столе и iOS также.