Firebase Android:处理深层链接

Firebase 文档中 :

它说:

要接收深层链接,请调用getInvitation方法

然而,即使没有实现那里描述的代码,深层链接,幸存的安装似乎也能工作。

那么,是否真的需要调用getInvitation方法? 究竟是为了什么?

getInvitation()用于处理深层链接意图。 建议按照此处所述实现它:

您必须在链接可能启动的每个活动中调用getInvitation(),即使使用getIntent()。getData()可以从intent中获得该链接。 调用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设置了一个处理程序,以允许设置活动。 你不必那样做。

您必须设置这样的intentfilter

          

然后动态urlhttps://*****.app.goo.gl/?link=http://yourwebsite.com&al=yourappname://anything/method&apn=com.yourwebsite.yourappname应在桌面上打开您的网站iOS等,以及Android上的应用程序或Playstore。

要从谷歌搜索中获取深层链接,这些搜索会从您网站上的链接转换为应用中的片段,您必须定义它们。 我的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:RateMyASVAB@gmail.com")); // 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 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; }