2016-10-04 13 views
9

Firebaseアンドロイド:扱うディープリンクFirebase <a href="https://firebase.google.com/docs/dynamic-links/android" rel="nofollow">documentation</a>で

それは言う:

がディープリンクを受信するには、getInvitation方法

しかしディープリンクを呼び出し、生存しているインストールは、そこに記述されているコードを実装しなくても動作するようです。

したがって、実際にはgetInvitationメソッドを呼び出す必要がありますか?それはまさに何のためですか?

答えて

3

getInvitation()ディープリンクインテントを処理することです。 hereを説明するように、それはそれを実装することをお勧めします。

あなたは、リンクがgetIntentを使用して意図 から入手できない場合でも、リンクによって を起動することがありますすべての活動にgetInvitation()を呼び出す必要があります()。 getData()。 getInvitation()を呼び出すと、 リンクが取得され、そのデータがアプリで一度だけ処理されるようにクリアされます。

+0

**リンク検索**と**データクリア**は 'getInvitation()'の唯一の機能はありますか?私はすでにこれを自分で管理しています。 –

+0

これは、リンクに言及しているものです。あなたがそれを自分で処理できるなら、あなたはこの機能を無視して無視するのがよいと思います。 – random

0

私はあなたが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とハンドラを設定アップ。あなたはそれをする必要はありません。

あなたはその後、動的URL https://*****.app.goo.gl/?link=http://yourwebsite.com&al=yourappname://anything/method&apn=com.yourwebsite.yourappnameは、デスクトップのiOSなどのウェブサイトを開き、アンドロイドのアプリやplaystore必要があります。この

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

ように設定インテントフィルタを持っている必要があります。

あなたのウェブサイトのリンクからあなたのアプリの断片に変換するGoogle検索から深いリンクを受け取るには、それらを定義する必要があります。私の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; 
} 
関連する問題

 関連する問題