簡體   English   中英

Firebase Android:處理深層鏈接

[英]Firebase Android: handle deep links

在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設置了一個處理程序,以允許設置活動。 你不必那樣做。

您必須設置這樣的intent過濾器

    <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>

然后動態網址https://*****.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<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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM