我需要找到我的应用程序打开的来源(fb,twitter,g +)有没有办法找到它。我知道 url 的标头中有一个开放的引用,但我如何在 android app
谷歌为此提供了在线材料:https://codelabs.developers.google.com/codelabs/deeplink-referrer
总结
您可以使用 Activity#getReferrer() 获取深层链接的引用。它从 API 22 开始可用。
对于 API 级别 21 及更低版本,您可以使用上述在线资料中的以下代码片段:
private static final String REFERRER_NAME = "android.intent.extra.REFERRER_NAME";
/** Returns the referrer on devices running SDK versions lower than 22. */
private Uri getReferrerCompatible(Activity activity) {
Intent intent = activity.getIntent();
Uri referrerUri = intent.getParcelableExtra(Intent.EXTRA_REFERRER);
if (referrerUri != null) {
return referrerUri;
}
String referrer = intent.getStringExtra(REFERRER_NAME);
if (referrer != null) {
// Try parsing the referrer URL; if it's invalid, return null
try {
return Uri.parse(referrer);
} catch (ParseException e) {
return null;
}
}
return null;
}
看看 Firebase 动态链接https://firebase.google.com/docs/dynamic-links/
试试这个
在您的 android 清单文件上注册您的活动,该活动必须在单击链接时打开
<activity
android:name=".YOURACTIVITY"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait">
<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"
android:host="somedomainname.com"
android:pathPrefix="/index"/>
</intent-filter>
</activity>
在你的网页上
<a href="android-app:/your android app packagename/http://somedomainname.com/index">Click me</a>
取决于@Ahmad Fadli答案(有效,但可能无法检测到某些应用程序)我有一个类似的用例,所以有人可能需要它,你也可以同时使用它们:
fun getReferrerCompatible(activity: Activity?): String? {
if (activity == null)
return null
try {
val intent = activity.intent
val bundle = intent.extras
if (bundle != null) {
val keySet = bundle.keySet().toTypedArray()
for (k in keySet) {
if (k.contains("application_id")) {
return bundle.getString(k)
}
}
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
return activity.referrer?.toString()
}
} catch (e: Exception) {
Crashlytics.logException(e)
}
return null
}
默认referrer
实际上不会为您提供某些深层链接的Chrome应用程序,由于某种原因它会返回"google.com"