Deep-Links für Android folgen nicht dem Pfadpräfix

8

Am ehesten konnte ich diese Frage hier finden. aber es deckt nicht das Problem, das ich habe.

Ich habe tiefe Links in meinem App-Setup, um / app als Pfadpräfix zu verwenden. Das Problem, das ich habe, ist, dass Links wie http://example.com/upgrade auch versuchen, in meiner App zu öffnen, obwohl es nicht / app irgendwo in der URL hat. Ich verstehe, dass Sie URLs, die durch das Präfix angegeben werden, nicht ausschließen können, aber ist nicht der ganze Punkt des Pfadpräfixes, nur diese URLs einzuschließen?

Grundsätzlich möchte ich Links wie diese zu Deep Link:

%Vor%

aber keine Links wie diese:

%Vor%

und hier ist, was ich in meinem Manifest habe:

%Vor%

Bearbeiten 1

fand auch diesen Link , aber ich habe keine leeren Präfixe , nur solche mit nur einem Schrägstrich "/"

Bearbeiten 2

Die URL, die es ausgelöst hat, war http://example.com/upgrade.php?app=1&method=1&uid=1 , ich war mir nicht sicher, ob die App nach dem? würde es auch auslösen, also habe ich das Präfix in / application geändert, aber das hat auch nicht funktioniert, es löst sie immer noch aus.

Bearbeiten Sie 3

Hier sind die anderen Deep-Link-Daten-Tags im Manifest:

Profil Aktivität

%Vor%

Anmeldung / Anmeldung Aktivität

%Vor%

Haupttätigkeit

%Vor%

Bearbeiten 4

Das wird immer verwirrender, wenn ich das Daten-Tag mit myapp als Schema aus der Aktivität entferne (oder wenn ich den pathPrefix von allem mit dem Präfix "/" entferne), löst es nicht mehr die Deep-Links aus die Web-URLs, selbst wenn sie / app in ihnen haben.

    
JStephen 14.12.2015, 21:07
quelle

3 Antworten

8

Ich habe es herausgefunden. Es scheint so, als ob die Datentags ineinander verlaufen, so dass das Präfix "/" auf den Daten mit dem Schema "Beispiel" auch für alle Schemata in den anderen Datentags gilt. Ich musste nur separate Intent-Filter für meine Deep-Links für das benutzerdefinierte Schema und die Deep-Links für die URL verwenden:

%Vor%     
JStephen 15.12.2015 16:22
quelle
1

Ich habe selbst ein paar Tests durchgeführt. Ich denke, Sie haben dieses Problem selbst erstellt, bevor Sie weitergehende Links von Ihrer App aus testen. Gehen Sie zu

Einstellungen - & gt; Ihr App-Name - & gt; Starten Sie mit Default und wählen Sie Standardwerte löschen

Navigieren Sie dann zu Ihrem App-Manifest zurück und fügen Sie für jede URL den Intent-Filter zu Ihrer Aktivität hinzu:

In Ihrem Beispiel fragen Sie nach

%Vor%

Ich gehe davon aus, dass Sie über eine Aktivität verfügen, mit der jede dieser Aufgaben für die oben angegebene URI gestartet wird.

für HomeActivity in Manifest do:

%Vor%

Test mit adb shell am start -W -a android.intent.action.VIEW -d http://example.com/app/home und adb shell am start -W -a android.intent.action.VIEW -d example.com/app/home Von Ihrem Terminal aus

dann für Ihre SpecialsActivity

%Vor%

Test mit adb shell am start -W -a android.intent.action.VIEW -d http://example.com/app/specials und adb shell am start -W -a android.intent.action.VIEW -d example.com/app/specials Von Ihrem Terminal aus

Das ist so, wie es funktioniert, wenn Sie Ihre App so einstellen, dass sie eine http://example.com/ url verarbeitet und wählen Sie dann standardmäßig auswählen, also versuchen Sie, http://example.com/{anything} mit Ihrer App zu öffnen

Kurz gesagt, wenn Sie Ihren pathPrefix angeben, stellen Sie sicher, dass Sie das aufnehmen, was Sie wirklich abfangen möchten und wählen Sie Ihre App nicht standardmäßig, wenn Sie einen Link testen, der Ihre App nicht öffnen soll, passen Sie einfach Ihren Pfad an Es wird nicht von Ihrer App ausgelöst.

Zum Beispiel werden die URLs über nicht geöffnet

%Vor%

, weil wir kein <data /> -Tag definiert haben, um das zu handhaben.

UPDATE Und direkt aus den Dokumenten hinzufügen, wenn Sie \ oder *:

verwenden
  

Da '\' als Escape-Zeichen verwendet wird, wenn die Zeichenfolge aus XML gelesen wird (bevor sie als Muster analysiert wird), müssen Sie doppeltes Escapen durchführen: Beispielsweise würde ein Literal '*' als geschrieben werden '\*' und ein Literal '\' werden als '\\' geschrieben. Das ist im Grunde das Gleiche wie das, was Sie schreiben müssten, wenn Sie die Zeichenkette im Java-Code konstruieren.

Viel Glück und glückliche Programmierung!

    
inner_class7 14.12.2015 22:57
quelle
0

Wie hier hier erklärt, werden Ihre Attribute zusammengeführt:

  

Es ist zwar möglich, mehrere <data> -Elemente in denselben Filter aufzunehmen, es ist jedoch wichtig, dass Sie separate Filter erstellen, wenn Sie eindeutige URLs deklarieren möchten (z. B. eine bestimmte Kombination aus Schema und Host), weil mehrere <data> Elemente in demselben Intent-Filter werden tatsächlich zusammengeführt, um alle Variationen ihrer kombinierten Attribute zu berücksichtigen.

Wenn Sie sie in separate Instanzen von <intent-filter> einfügen, wird Ihr Problem dadurch behoben.

    
saraedum 14.01.2018 17:57
quelle

Tags und Links