公式ドキュメントに従って、アプリのインデックス作成の一部としてディープリンクを実装しました。検索のオートコンプリート部分に関して、いくつかの異なるが関連する問題に直面しています。
- オートコンプリートの結果には、最後に開いたアイテムのみが表示されます (以前にアクセスしたアイテムは上書きされているようです)。たとえば、アプリのトレンド トピック/コレクションのリスト ビューで、ユーザーがアイテム A (添付のスクリーンショットの「shortvideos1」) を開き、フィードを再開してからアイテム B (「shortvideos2」) を開くとします。「shortvid」を部分的に検索すると、後者の「shortvideos2」のみが表示されます。「shortvideos1」を完全に検索しても何も得られません。最新のアイテムのみが検索結果リストに表示されることを示唆しています。
- 一部のコンテンツ アクセスが結果リストに表示されません。ユーザーがトレンド コレクション内のアイテムのリストをスワイプできるビュー ページャーがあります。個々の項目をタイトルで索引付けすると、それらのタイトルによる検索結果から一部のタイトルのみが表示されることがわかります。
アプリのインデックス作成 API を実装する方法は次のとおりです。
TrendingCollectionActivity
static final Uri BASE_URI_APP = Uri.parse("android-app://" + BuildConfig.APPLICATION_ID + "/mySchema/");
@Override
public void onCreate(Bundle savedInstance) {
// basic setup
mClient = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
}
...
public void onLoadFinished(Loader<CollectionModel> loader, CollectionModel trendingCollection) {
// adapter & view pager setup ...
mCollectionModel = trendingCollection
// Call the App Indexing API start method after the view has completely rendered
startAppIndexing(mCollectionModel)
}
@Override
public void onStop() {
// other teardown ...
// register end of collection view
stopAppIndexing(mCollectionModel);
}
//View Pager callback to handle individual card/item swipes
@Override
public void onPageSelected(int position) {
// get current fragment, update action bar menus, etc
// ...
// app indexing: register currently visible card view
ItemModel itemModel = mCollectionPagerAdapter.getItemModel(mViewPager.getCurrentItem());
startAppIndexing(itemModel); // implementation very similar to the collection's onCreate()
// register end of previous card view
int prevIndex = mViewPager.getCurrentItem() - 1;
ItemModel prevCard = mCollectionPagerAdapter.getItemModel(prevIndex >= 0 ? prevIndex : 1);
stopAppIndexing(prevCard); // implementation very similar to the colleciton's onStop()
}
private void startAppIndexing(CollectionModel collectionModel) {
mClient.connect()
if (trendingCollection == null) { return; }
final String TITLE = trendingCollection.getHashtag();
final String hostPath = new StringBuilder("collections/").append(trendingCollection.getId()).toString();
final Uri APP_URI_COLLECTIONS = BASE_URI_APP.buildUpon().appendEncodedPath(hostPath).build(); // = android-app://net.kip2.android/myScheme/collections/7091
Action viewAction = Action.newAction(Action.TYPE_VIEW, TITLE, APP_URI_COLLECTIONS);
PendingResult<Status> result = AppIndex.AppIndexApi.start(mClient, viewAction);
result.setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(Status status) {
if (status.isSuccess()) {
Log.d(TAG, "App Indexing API: Recorded trend "
+ TITLE + " view successfully.");
} else {
Log.e(TAG, "App Indexing API: There was an error recording the trend view."
+ status.toString());
}
}
});
}
private void stopAppIndexing(CollectionModel collectionModel) {
if (trendingCollection == null) { return; }
final String TITLE = trendingCollection.getHashtag();
final String hostPath = new StringBuilder("collections/").append(trendingCollection.getId()).toString();
final Uri APP_URI_COLLECTIONS = BASE_URI_APP.buildUpon().appendEncodedPath(hostPath).build();
Action viewAction = Action.newAction(Action.TYPE_VIEW, TITLE, APP_URI_COLLECTIONS);
PendingResult<Status> result = AppIndex.AppIndexApi.end(mClient, viewAction);
result.setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(Status status) {
if (status.isSuccess()) {
Log.d(TAG, "App Indexing API: Recorded trend "
+ TITLE + " view ended successfully.");
} else {
Log.e(TAG, "App Indexing API: There was an error recording the trend view end."
+ status.toString());
}
}
});
mClient.disconnect();
}
私が正しくないことを知っている人はいますか?