火力地堡的Android:处理深层链接
问题描述:
在火力地堡documentation:火力地堡的Android:处理深层链接
它说:
要接收的深层链接,请拨打getInvitation方法
然而,深层链接,幸存的装置,即使没有实施那里描述的代码,似乎也能工作。
那么,是否真的需要调用getInvitation
方法?这究竟是什么?
答
getInvitation()
是处理深层链接的意图。建议来实现它描述here:
你必须在每一个可能被链接启动 活动调用getInvitation(),即使该链接可能使用getIntent可以从意图 ()。的getData()。调用getInvitation()将检索 链接并清除该数据,以便仅由您的应用程序处理一次。
答
我不相信你必须使用getInvitation(),我个人只是重写“onNewIntent”,像这样:
@Override
protected void onNewIntent(final Intent intent) {
super.onNewIntent(intent);
if (intent.getAction().equals("android.intent.action.VIEW")) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
handleItemId(getIdFromIntent(intent));
}
}, 50);
}
}
我设置了一个postDelayed处理程序,以允许活动SET-向上。你不必这样做。
你必须有一个意图过滤器设置这样
<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:host="yourwebsite.com" android:scheme="http"/>
<data android:host="yourwebsite.com" android:scheme="https"/>
<data android:host="anything" android:scheme="yourappname"/>
</intent-filter>
然后动态URL https://*****.app.goo.gl/?link=http://yourwebsite.com&al=yourappname://anything/method&apn=com.yourwebsite.yourappname
应该打开你的网站上桌面的iOS等,和Android上的应用程序或Play商店中。
要接收来自谷歌搜索的深层链接,该链接从您网站上的链接转换为您应用中的片段,您必须定义它们。我的handleItemId和getIdFromIntent方法定义如下。
public boolean handleItemId(int id) {
if (id == R.id.nav_home) {
fragment = new FragmentHome();
} else if (id == R.id.nav_favorites) {
fragment = new FragmentFavoritesPager();
} else if (id == R.id.nav_contact) {
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:[email protected]")); // only email apps should handle this
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
} else {
Toast.makeText(this, "No email app is installed", Toast.LENGTH_LONG).show();
}
return false;
} else if (id == R.id.nav_settings) {
fragment = new FragmentSettings();
} else {
return false;
}
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
getSupportFragmentManager()
.beginTransaction()
.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out)
.replace(R.id.content_main, fragment)
.commitAllowingStateLoss();
}
},400);
return true;
}
而且getIdFromIntent
private int getIdFromIntent(Intent intent) {
int id = R.id.nav_home;
if (intent.getData() != null) {
List<String> segments = intent.getData().getPathSegments();
if (segments.size() > 0) {
switch (segments.get(0)) {
case "favorites":
id = R.id.nav_favorites;
break;
case "contact":
id = R.id.nav_contact;
break;
case "settings":
id = R.id.nav_settings;
break;
}
}
}
return id;
}
是**链接检索**和**数据清算**'getInvitation()'的唯一功能?我已经自己管理这个。 –
这就是链接提到的。如果你自己可以处理它,那么我认为你应该去忽略这个功能。 – random