2013-04-24 16 views
20

Ich versuche Facebook Deep Linking-Funktion auf meine App und traf das folgende Szenario zu implementieren:Facebook DeepLinking auf Android

Ich habe eine Tätigkeit, genannt MainActivity, die wie so erklärt:

<activity 
     android:name="com.mypackage.android.MainActivity"> 

     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

Diese Aktivität und mein Paketname werden auch in den Einstellungen meiner App auf der Facebook-Entwicklerwebsite angegeben.

Sobald ein Link auf Facebook App angeklickt wird, soll ich dieses Ereignis über die OnCreate-Methode meiner Aktivität behandeln. Der folgende Code behandeln das Ereignis:

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Uri target = getIntent().getData(); 

     if (target != null){ 
      // got here via Facebook deep link 
      // once I'm done parsing the URI and deciding 
      // which part of my app I should point the client to 
      // I fire an intent for a new activity and 
      // call finish() the current activity (MainActivity) 
     }else{ 
      // activity was created in a normal fashion 
     } 
    } 

Alles geht nach Plan mit Ausnahme der folgenden Szenario:

  1. Benutzer startete meine app
  2. MainActivity erstellt
  3. SecondaryActivity erstellt
  4. MainActivity Fertig
  5. App geht in den Hintergrund über das Gerät hom e Taste
  6. Deep Link wird
  7. auf Facebook App geklickt

In diesem Fall meine App wieder in den Vordergrund geht, aber MainActivity der onCreate/onNewIntent Sie rief nicht bekommen, stattdessen SecondaryActivity der onResume() wird aufgerufen und wiederhergestellt es ist letzten Zustand.

Hinweis: Ich habe dieses Problem auf einem Samsung Nexus mit Android 4.2.1 getestet und bin zu diesem Ergebnis gekommen, obwohl es beim Testen auf Galaxy S1 mit Android 2.3.5 wie erwartet funktioniert hat.

Jede Hilfe wäre sehr willkommen, Vielen Dank.

+1

+1: Ich habe dieses Problem/Problem/Missverständnis auf ics + mit Benachrichtigungen auch bemerkt. –

+0

Hallo Tom Kannst du mir bitte helfen, dieses tiefe Link-Problem für Facebook http://stackoverflow.com/q/22372788/1503130 – Prateek

Antwort

9

Facebook App von ihrem eigenen App starten, indem Sie explizit Ihre „MainActivity“ beginnen (die man Sie ihnen in der Entwickler-Seite zur Verfügung gestellt).

von diesem - Androide Standardverhalten ist: wenn die Anwendung bereits ausgeführt wird, dann ruft erneut auf startActivity() neue Aufgabe von Grund auf neu, aber nur im Vordergrund die bereits laufende Aufgabe wiederherstellen.

aber die gute Nachricht ist, dass Sie dieses Standardverhalten ändern können, indem Sie zu Ihrer MainActivity android:launchMode="singleTask" hinzufügen.Die Definition lautet:

Das System erstellt eine neue Aufgabe und instanziiert die Aktivität im Stamm der neuen Aufgabe. Wenn jedoch eine Instanz der Aktivität bereits in einer separaten Aufgabe vorhanden ist, leitet das System die Absicht an die vorhandene Instanz durch einen Aufruf seiner onNewIntent() - Methode weiter, anstatt eine neue Instanz zu erstellen. Es kann immer nur eine Instanz der Aktivität vorhanden sein.

von diesem Punkt immer auf die Startabsicht reagieren konnte, und von diesem Punkt können Sie immer auf die Aufgabe zurück navigieren, die bereits im Hintergrund war (falls vorhanden) durch Aktivität Neustart mit beiden Fahnen Intent.FLAG_ACTIVITY_SINGLE_TOP & & Intent.FLAG_ACTIVITY_CLEAR_TOP Kombination

0

Sie benötigen mehr Informationen in der Intent-Filter haben:

<intent-filter> 
    <action android:name="android.intent.action.VIEW"></action> 
    <category android:name="android.intent.category.DEFAULT"></category> 
    <category android:name="android.intent.category.BROWSABLE"></category> 
    <data android:host="www.yoursite.com" android:scheme="http"></data> 
</intent-filter> 

Dies erfassen Links zu Ihrer Website gehen (stellen Sie sicher, dass die URL ändern), und leiten sie an, was auch immer Aktivität definieren Sie diese Intent-Filter unter.