8

アプリのインデックス作成を実装していますが、何か不足していると思いますが、何がわかりません。

ガイドに従って、インテント フィルターをアプリに追加し、アクティビティに必要なものを実装しました。

私のアプリケーションのパッケージは com.towers.hotelsclick で、関連する Web サイト (まだテスト中なので、リンクの rel メタタグを入れていません) は www.hotelsclick.com です。

ガイドで次のインテントフィルターの例を見ました

<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 と「View as google」機能で問題がないかテストしたいと思います。APK をアップロードしたところ、URI が要求されていることがわかりました。

さて、ドキュメントの「アプリのテスト」セクションで、http: //hotelsclick.com?hotel_id=135738 のようなリンクは「ディープ リンク」と呼ばれ、android-app://com.towers のようなリンクが参照されていることがわかりました。 hotelsclick/https/hotelsclick.com?hotel_id=135738 を「URI」と呼びます。私は正しいですか?

「Google として表示」機能は URI を要求しますが、作成方法がわかりません。また、この URI がアプリにどのように渡されるのか疑問に思っており、このすべての URI/deepLink のことについて非常に混乱していると確信しており、ドキュメントで救済策を見つけることができません。

URI はいつ、どこで使用する必要がありますか? どこで、いつディープリンクを使用する必要がありますか? リンク rel=URIを Web ページに配置するので、ページの URL ではなく URI を使用してアプリのインデックス作成でアプリが呼び出されると思います。しかし、もしそうなら...なぜadb shell am start -a android.intent.action.VIEW -dコマンドがURIではなくURLでのテストに使用されるのですか? アプリで URI または URL を取得して処理できるようにする必要がありますか? そしてどうやって?

アプリのインデックス作成についてはある程度理解できたと思っていましたが、今日、始めてからすべてが間違っていたと思い始めています。だからこそ、上記の質問に答えて、この URL/URI/intent-filter/ContentProvider のすべての混乱に光を当ててください。

みんなありがとう

4

1 に答える 1

8

まず、アプリが URL を正しく処理していることを確認します。

adb shell am start \
  -a android.intent.action.VIEW \
  -d 'https://www.hotelsclick.com?hotel_id=135738'

また、ブラウズ可能なカテゴリでアクティビティを開くことができることを確認します。

adb shell am start \
  -a android.intent.action.VIEW \
  -c android.intent.category.BROWSABLE
  -d 'https://www.hotelsclick.com?hotel_id=135738'

これがうまくいかない場合は、次のようにインテント フィルタを編集して、カテゴリ DEFAULT と BROWSABLE の両方を含めます。

<activity
  android:name="com.towers.hotelsclick.HotelActivity"
  android:label="@string/app_name">
    <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. hotelsclick.com" />
    </intent-filter>
</activity>

android-app リンクが適切に処理されていることを確認し (何もする必要はありません)、携帯電話で開きます。android-app://com.towers.hotelsclick/https/www.hotelsclick.com?hotel_id=135738

android-app://com.towers.hotelsclick/https/www.hotelsclick.com?hotel_id=135738

それが機能する場合は、HTML ページに追加するだけです。

<link rel="alternate"
      href="android-app://com.towers.hotelsclick/https/www.hotelsclick.com?hotel_id=135738" />

com.towers.hotelsclickこれにより、表示目的で識別されるアプリでページを開くことができることが Google に通知されますhttps://www.hotelsclick.com/?hotel_id=135738(テストしたばかりのもの)。

于 2016-02-16T19:43:24.660 に答える