Android 应用中的深层链接
Deeplinking in Android app
我正在尝试在我的应用中启用深层链接。下面是我在AndroidManifest中运行实现的代码:
<activity
android:name=".ui.WalletActivity"
android:label="@string/title_activity_wallet">
<intent-filter android:label="@string/title_activity_link_wallet" >
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="myapp"
android:host="wallet"
/>
</intent-filter>
</activity>
我还需要做些什么才能在 myapp://wallet
上点击以打开我的应用 WalletActivity
吗?
要测试并确保您的意图有效,您可以按照 deep linking docs
中的建议使用 adb
命令
要在您的 uri 中传递参数,只需将它们添加为普通查询参数(即 example://gizmos/path?key=value
,然后通过像这样解析意图数据来检索它们:
Uri uri = getIntent().getData();
String value = uri.getQueryParameter("key");
确保检查空值等
在我的应用程序中,这工作正常:
<activity
android:name=".ui.WalletActivity"
android:label="@string/title_activity_wallet">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<intent-filter>
<data android:scheme="myapp" android:host="wallet" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
我还有额外的参数(myapp://wallet?id=42),我是这样解析的:
Intent intent = getIntent();
String providerUrl = intent.getData().toString();
UrlQuerySanitizer sanitizer = new UrlQuerySanitizer();
sanitizer.setAllowUnregisteredParamaters(true);
sanitizer.parseUrl(providerUrl);
String id = sanitizer.getValue("id");
(您可以阅读 UrlQuerySanitizer
here)
为了测试,我建议通过电子邮件将 myapp://wallet link 发送给自己,例如 :-)(或评论中提到的 adb)
我正在尝试在我的应用中启用深层链接。下面是我在AndroidManifest中运行实现的代码:
<activity
android:name=".ui.WalletActivity"
android:label="@string/title_activity_wallet">
<intent-filter android:label="@string/title_activity_link_wallet" >
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="myapp"
android:host="wallet"
/>
</intent-filter>
</activity>
我还需要做些什么才能在 myapp://wallet
上点击以打开我的应用 WalletActivity
吗?
要测试并确保您的意图有效,您可以按照 deep linking docs
中的建议使用adb
命令
要在您的 uri 中传递参数,只需将它们添加为普通查询参数(即 example://gizmos/path?key=value
,然后通过像这样解析意图数据来检索它们:
Uri uri = getIntent().getData();
String value = uri.getQueryParameter("key");
确保检查空值等
在我的应用程序中,这工作正常:
<activity
android:name=".ui.WalletActivity"
android:label="@string/title_activity_wallet">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<intent-filter>
<data android:scheme="myapp" android:host="wallet" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
我还有额外的参数(myapp://wallet?id=42),我是这样解析的:
Intent intent = getIntent();
String providerUrl = intent.getData().toString();
UrlQuerySanitizer sanitizer = new UrlQuerySanitizer();
sanitizer.setAllowUnregisteredParamaters(true);
sanitizer.parseUrl(providerUrl);
String id = sanitizer.getValue("id");
(您可以阅读 UrlQuerySanitizer
here)
为了测试,我建议通过电子邮件将 myapp://wallet link 发送给自己,例如 :-)(或评论中提到的 adb)