Android
Обработка глубоких ссылок
Поиск…
Вступление
Глубокие ссылки - это URL-адреса, которые используют пользователей непосредственно для определенного контента в вашем приложении. Вы можете настроить глубокие ссылки, добавив фильтры намерений и извлечение данных из входящих намерений, чтобы привлечь пользователей на правый экран в вашем приложении.
параметры
<data> Атрибут | подробности |
---|---|
схема | Часть схемы URI (с учетом регистра). Примеры: http , https , ftp |
хозяин | Хост- часть URI (с учетом регистра). Примеры: google.com , example.org |
порт | Часть порта URI. Примеры: 80 , 443 |
дорожка | Часть пути URI. Необходимо начинать с / . Примеры: / , /about |
PATHPREFIX | Префикс для части пути URI. Примеры: /item , /article |
pathPattern | Шаблон для соответствия для части пути URI. Примеры: /item/.* , /article/[0-9]* |
MIMETYPE | Тип mime для соответствия. Примеры: image/jpeg , audio/* |
замечания
<intent-filter>
Эта комбинация элементов <action>
и <category>
- это то, что сообщает системе Android, что определенное действие должно запускаться, когда пользователь нажимает ссылку в другом приложении.
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data ... />
</intent-filter>
Несколько тегов <data>
Набор глубоких ссылок, которые поддерживает ваш <intent-filter>
является кросс-продуктом всех элементов <data>
которые вы определяете в этом фильтре-намерении. Это демонстрируют примеры с несколькими доменами, несколькими путями и несколькими схемами.
Ресурсы
- Включение Deep Links для содержимого приложения (developer.android.com)
-
<intent-filter>
(developer.android.com
Простая глубокая ссылка
AndroidManifest.xml:
<activity android:name="com.example.MainActivity" >
<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="www.example.com" />
</intent-filter>
</activity>
Это позволит принять любую ссылку, начиная с http://www.example.com
в качестве глубокой ссылки, чтобы начать свою MainActivity
.
Несколько путей в одном домене
AndroidManifest.xml:
<activity android:name="com.example.MainActivity" >
<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="www.example.com" />
<data android:path="/" />
<data android:path="/about" />
<data android:path="/map" />
</intent-filter>
</activity>
Это запустит вашу MainActivity
когда пользователь нажмет на любую из этих ссылок:
-
http://www.example.com/
-
http://www.example.com/about
-
http://www.example.com/map
Несколько доменов и несколько путей
AndroidManifest.xml:
<activity android:name="com.example.MainActivity" >
<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="www.example.com" />
<data android:scheme="http"
android:host="www.example2.com" />
<data android:path="/" />
<data android:path="/map" />
</intent-filter>
</activity>
Это запустит вашу MainActivity, когда пользователь нажмет на любую из этих ссылок:
-
http://www.example.com/
-
http://www.example2.com/
-
http://www.example.com/map
-
http://www.example2.com/map
И HTTP, и https для одного домена
AndroidManifest.xml:
<activity android:name="com.example.MainActivity" >
<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" />
<data android:scheme="https" />
<data android:host="www.example.com" />
<data android:path="/" />
<data android:path="/map" />
</intent-filter>
</activity>
Это запустит вашу MainActivity, когда пользователь нажмет на любую из этих ссылок:
-
http://www.example.com/
-
https://www.example.com/
-
http://www.example.com/map
-
https://www.example.com/map
Получение параметров запроса
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = getIntent();
Uri data = intent.getData();
if (data != null) {
String param1 = data.getQueryParameter("param1");
String param2 = data.getQueryParameter("param2");
}
}
}
Если пользователь нажимает ссылку на http://www.example.com/map?param1=FOO¶m2=BAR
, тогда param1
здесь будет иметь значение "FOO"
а param2
будет иметь значение "BAR"
.
Использование pathPrefix
AndroidManifest.xml:
<activity android:name="com.example.MainActivity" >
<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="www.example.com"
android:path="/item" />
</intent-filter>
</activity>
Это запустит вашу MainActivity, когда пользователь нажмет любую ссылку, начиная с http://www.example.com/item
, например:
-
https://www.example.com/item
-
http://www.example.com/item/1234
-
https://www.example.com/item/xyz/details