Я внедряю индексацию приложений, и я думаю, что у меня что-то не хватает, но я не знаю, что.Индексирование приложений Android и глубокие ссылки: я все время ошибался?
После guide Я добавил свои фильтры намерений в приложение и реализовал то, что необходимо в моей деятельности.
пакет моего приложения является com.towers.hotelsclick и связанный с ним веб-сайт (где я не ставил ссылку отн мета-тег еще, так как я просто тестирование) является www.hotelsclick.com
I увидел следующий пример намеренных фильтра в руководстве
<activity
android:name="com.example.android.PetstoreActivity"
android:label="@string/title_petstore">
<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.examplepetstore.com" />
</intent-filter>
</activity>
поэтому я написал мои таким образом:
<activity
android:name=".ActivityForAppIndexing"
android:label="@string/title_activity"
android:screenOrientation="portrait" >
<intent-filter android:label="@string/app_name">
<data android:scheme="android-app"
android:host="com.package.myappname" />
<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.mywebsite.com" />
<data android:scheme="https"
android:host="www.mywebsite.com" />
</intent-filter>
</activity>
Кроме того, я написал поставщик контента для того, чтобы разбор URI
<provider
android:name=".contentproviders.HotelDetailsContentProvider"
android:authorities="com.towers.hotelsclick" >
</provider>
, который должен отображать идентификаторы URI следующим образом:
private static final String BASE_PATH = "https";
private static final String AUTHORITY = "com.towers.hotelsclick";
public static final Uri CONTENT_URI = Uri.parse("android-app://" + AUTHORITY
+ "/" + BASE_PATH);
Я тестирую реализацию через командную строку, используя следующую команду ADB:
adb shell am start -a android.intent.action.VIEW -d "https://hotelsclick.com?hotel_id=135738" com.towers.hotelsclick
и она работает. Приложение автоматически открывается с правильным действием и правильными параметрами. Когда приложение начинает onNewIntent метод вызывается:
protected void onNewIntent(Intent intent) {
String action = intent.getAction();
String data = intent.getDataString();
if (Intent.ACTION_VIEW.equals(action) && data != null) {
String recipeId = data.substring(data.lastIndexOf("/") + 1);
Uri contentUri = HotelDetailsContentProvider.CONTENT_URI.buildUpon()
.appendPath(recipeId).build();
bundle = new Bundle();
bundle.putString("pictureUrl", "");
//showRecipe(contentUri);
}
}
(я получил это, конечно, из примеров, вот почему он говорит о рецептах и не гостиницах)
Но мне интересно: что я должен делать? Получите данные от цели с
getIntent().getData().getQuery()
или использовать ContentProvider и получить их из URI?
Кроме того, я бы хотел протестировать с помощью Google Search Console и функциональностью «Посмотреть как Google», если все в порядке. Я загрузил свой APK и увидел, что запрашивается URI.
Теперь в "testing your app" части документации, я увидел, что ссылки, как http://hotelsclick.com?hotel_id=135738 называют как «глубокие связи», а те, как android-app://com.towers.hotelsclick/https/hotelsclick.com?hotel_id= 135738 называются «URI». Я прав?
Функция «Посмотреть как Google» запрашивает URI, но я не знаю, как ее создать. Кроме того, мне интересно, как этот URI передается в приложение, и я уверен, что я очень смущен об этом все URI/deepLink, и не могу найти облегчение в документации.
Где и когда следует использовать URI? Где и когда я должен использовать deepLink? Я предполагаю, что, поскольку я собираюсь поместить ссылку rel = URI на свои веб-страницы, приложение будет вызываться в индексировании приложения с помощью URI, а не с URL-адресом страницы. Но если это так ... почему это adb shell am start -a android.intent.action.VIEW -d команда, используемая для тестирования с URL-адресом, а не с URI? Должно ли мое приложение получать и обрабатывать URI или URL-адреса? И как?
Мне показалось, что я кое-что понял о индексировании приложений, но сегодня я начинаю думать, что с тех пор, как начал, все неправильно. Вот почему я прошу вас о помощи в ответе на вышеуказанные вопросы и, возможно, осветить весь этот URL/URI/намерение-фильтр/ContentProvider беспорядок.
Спасибо всем
Эй, Марко, просто предложение сделать этот вопрос более читаемым: Пожалуйста, укоротите вопрос! Сократите нерелевантный флэг, плюс несколько вопросов внутри одного вопроса должны быть разбиты на список вопросов. –