Как указать URL Deeplink Android манифест
Проблема в том, что я не знаю, как сделать глубокую ссылку из этой ссылки "my.app//id=819"
Я пробовал некоторые варианты данных, но не могу понять шаблон пути
<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="my.app"
android:host="id"
android:pathPattern="=.*"/>
Ожидается обеденное намерение и принять значение идентификатора
2 ответа
Вы имеете в виду что-то вроде my.app//host?id=819
, право?
Вы строите фильтр намерений вокруг my.app//host
, не включайте параметры.
Добавить фильтры намерений для входящих ссылок:
<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="my.app"
android:host="host" />
</intent-filter>
Затем, попав внутрь действия, вы можете проанализировать параметры, Считать данные из входящих намерений:
Intent intent = getIntent();
Uri data = intent.getData();
От data
, вы можете использовать Uri#getQueryParameter(), чтобы получить 819
от id
:
String id = data.getQueryParameter("id");
С <intent-filter>
Вы указываете URL-адреса, которые должны обрабатывать ваши действия. Как только система обнаружит, что активность в вашем приложении может обрабатывать URL-адрес, она откроет эту активность и вы сможете получить данные в Extra
или же .getData()
объект.
В вашем файле AndroidManifest.xml:
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter android:label="My app preview">
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data
android:host="www.myapp.com/api/id"
android:pathPrefix="/api/" <!-- optional, you can skip this field if your url doesn't have prefix-->
android:scheme="http"/>
<data
android:host="www.myapp.com/api/id"
android:pathPrefix="/api/" <!-- optional, you can skip this field -->
android:scheme="https"/>
</intent-filter>
</activity>
В вашей деятельности:
public class MainActivity extends Activity {
Bundle bundle = getIntent.getExtras();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
handleExtra(getIntent());
}
// If your app is in opened in background and you attempt to open an url, it
// will call this function instead of onCreate()
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
handleExtra(getIntent());
}
private void handleExtra(Intent intent) {
String myID = intent.getData().getLastPathSegment();
....
}
}