Как указать URL Deeplink Android манифест - PullRequest
0 голосов
/ 11 января 2019

Проблема в том, что я не знаю, как сделать глубокую ссылку по этой ссылке "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="=.*"/>

ожидается обеденное намерение и принять значение id

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Ты имеешь в виду что-то вроде 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");
0 голосов
/ 11 января 2019

С помощью <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();
           ....
       }
}
...