在清单中,需要深度链接的活动(可通过您定义的 URI 打开)应具有以下结构:
<activity
android:name=".MyActivity"
<intent-filter android:label="@string/app_name">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://my-app.com/mypage" -->
<data android:scheme="http"
android:host="my-app.com"
android:pathPrefix="/mypage" />
</intent-filter>
</activity>
在您的活动中,定义一个唯一标识该活动的 URI。它应采用以下格式://android-app://<package_name>/<scheme>/[host_path])
.
例如 :
private static final Uri MY_URI = Uri.parse("android-app://com.myapp/http/my-app.com/mypage/");
此外,您还需要使用 GoogleApiClient 的实例。
private GoogleApiClient mClient;
在 onCreate 函数中,初始化客户端:
mClient = new GoogleApiClient.Builder(this).addApi(AppIndex.APP_INDEX_API).build();
然后,在代码中的适当位置,连接到客户端并创建一个将传递给 AppIndex API 的 Action。
例如 :
// Connect your client
mClient.connect();
// Define a title for your current page, shown in autocompletion UI
final String TITLE = "My Title";
//Define an action
Action viewAction = Action.newAction(Action.TYPE_VIEW, TITLE, MY_URI);
// Call the App Indexing API view method
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 view successfully.");
} else {
Log.e(TAG, "App Indexing API: There was an error recording the view."
+ status.toString());
}
}
});
最后,在 onStop 方法中断开 GoogleApiClient 实例:
mClient.disconnect();
我建议您阅读以下关于 Google CodeLabs 的 AppIndexing 和 DeepLinking 教程。在正确实施应用索引之前,您需要了解深度链接的工作原理。
https://codelabs.developers.google.com/codelabs/app-indexing/#0