Глубокая ссылка на Android для дружественных URL-адресов

#android #android-studio #url #android-manifest #android-deep-link

Вопрос:

Как бы глубокая ссылка в манифесте открывала действие по этой ссылке

https://myapp.domain.com/#/view/abc

где только abc-это аргумент, который изменяется и является тем, который мне нужно, чтобы приложение принимало в качестве параметра .

Я пробовал это, но это не сработало

             <data
                android:host="myapp.domain.com"
                android:pathPrefix="/#/view"
                android:scheme="https" />
            <data
                android:host="myapp.domain.com"
                android:pathPrefix="/#/view"
                android:scheme="http" />
            <data
                android:host="myapp.domain.com"
                android:pathPrefix="/#/view"
                android:scheme="app" />
 

Ответ №1:

Попробуйте сделать это внутри тега действия в файле манифеста

 <intent-filter android:label="Example">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
            
      <data android:scheme="https"
            android:host="myapp.domain.com"
            android:pathPrefix="/#" />
            <!-- note that the leading "/" is required for pathPrefix-->
</intent-filter>
 

Внутри Activity.java

  Uri uri = getIntent().getData();
 
 if(uri != null){
      List<String> segments = uri.getPathSegments();
      Log.e(TAG, "onCreate: " segments );
      Log.e(TAG, "onCreate: " segments.get((segments.size()-1)) );
 }
 

Комментарии:

1. Не работает, при нажатии на ссылку Android отображается только открытым в Chrome, но не в моем приложении 🙁

Ответ №2:

После тяжелой работы я использовал это:

 <data android:scheme="https"
        android:host="myapp.domain.com"
        android:pathPrefix="/" />
 

И в моей Деятельности:

  String id = data.toString().replaceAll(".*/", "");
 

ПРИМЕЧАНИЕ: Я не смог использовать uri.getPathSegments(); потому что он возвращает мне пустой список.