2016-10-04 16 views
9

Na Firebase documentation:Firebase Android: Stosować głębokie linki

ona mówi:

Aby otrzymać głęboki związek, wywołać metodę

jednak głębokie linki getInvitation, instalacje, które przetrwały, wydają się działać nawet bez implementacji kodu tam opisanego.

Czy naprawdę trzeba wywołać metodę getInvitation? po co to właściwie jest?

Odpowiedz

3

getInvitation() służy do obsługi intencji głębokiego łącza. Zaleca się je realizować w sposób opisany here:

Należy zadzwonić getInvitation() w każdej działalności, która może zostać uruchomiona przez odnośnik, chociaż związek może być dostępny z zamiarem użyciu getIntent(). otrzymać dane(). Wywołanie funkcji getInvitation() powoduje pobranie linku i usunięcie tych danych, dzięki czemu jest przetwarzana tylko raz przez aplikację.

+0

Czy ** ** Link pobieranie i kasowanie danych ** ** jedyna funkcjonalność 'getInvitation()'? Udało mi się to już na własną rękę. –

+0

To właśnie wspomina link. Jeśli możesz sobie z tym poradzić samemu, to myślę, że dobrze jest iść i zignorować tę funkcję. – random

0

Nie wierzę, trzeba użyć getInvitation(), Osobiście po prostu zastąpić „onNewIntent” tak:

@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); 
    } 
} 

skonfigurować procedurę obsługi z postDelayed aby umożliwić aktywność do SEt- w górę. Nie musisz tego robić.

Musisz mieć filtr zamiaru ustanowienia jak ten

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

Następnie dynamiczny url https://*****.app.goo.gl/?link=http://yourwebsite.com&al=yourappname://anything/method&apn=com.yourwebsite.yourappname powinna otworzyć swoją stronę na pulpicie iOS itp, a aplikacja lub playstore na Androidzie.

Aby otrzymywać precyzyjne linki z wyszukiwań google, które są ukryte z linków w Twojej witrynie do fragmentów w Twojej aplikacji, musisz je zdefiniować. Moje metody handleItemId i getIdFromIntent są zdefiniowane w następujący sposób.

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

I 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; 
} 
Powiązane problemy