2017-03-16 1 views
5

Ich weiß, es gibt einige Fragen zu SO darüber, aber keine von ihnen helfen, mein Problem zu lösen.Öffnen Sie meine App von URL-Schema in Android

Ich möchte auf einen Link von einem E-Mail/Text/Browser klicken und meine App öffnen.

Ich habe den AndroidManifest.xml Code:

<!-- Splash Activity --> 
    <activity 
     android:name=".ui.SplashActivity" 
     android:label="@string/app_name" 
     android:theme="@style/SplashTheme" 
     android:launchMode="singleTask"> 

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

     <!-- Branch URI scheme --> 
     <intent-filter> 
      <data android:scheme="myscheme" android:host="open" /> 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <category android:name="android.intent.category.BROWSABLE" /> 
     </intent-filter> 
    </activity> 

Diese Dokumentation here genau, aber zu folgen scheint, wenn ich Chrome (oder Android-Browser) verwenden, um myscheme://open, wird meine app durchsuchen nicht Öffnen Sie und stattdessen erhalte ich Google-Suchergebnisse für myscheme: // Öffnen Sie.

Kann jemand sehen, welches Teil des Puzzles ich hier vermisse? Wie kann ich meine App per URI öffnen lassen?

Kleines Update:

Nach this lesen, habe ich festgestellt, dass Chrome zu market://details?id=com.myapp Navigation macht nicht das Play Store öffnen. Stattdessen gibt es die Google-Suchergebnisse zurück - genau wie beim Versuch, meine App direkt zu starten. Das ist verwirrend. Fehle ich eine globale Betriebssystemeinstellung, um Deep-Linking zu ermöglichen?

+0

"Wenn ich Chrome (oder Android Browser) verwende, um zu myscheme zu navigieren: // öffne" - wie ** genau ** machst du das? Geben Sie das in die Adressleiste ein? Klicken Sie auf einen Link auf einer Webseite mit dieser URL? Etwas anderes? – CommonsWare

+0

@CommonsWare Durch (1) Eingabe in die Adressleiste und (b) Klicken auf einen Link in einer E-Mail. Beides führt zu demselben Verhalten. – Brett

Antwort

1

Es ist nicht erforderlich, dass eine App auf myscheme://open Acht gibt.

Insbesondere:

  • Es besteht keine Notwendigkeit für einen beliebigen Web-Browser, um zu versuchen einige Drittanbieter-App zu starten, wenn Sie myscheme://open in die Adressleiste eingeben, da die Benutzer unwahrscheinlich sind, das zu tun in der realen Welt.

  • Es ist nicht erforderlich, dass ein E-Mail-Programm versucht, einen ACTION_VIEWIntent für myscheme://open zu erstellen.

  • Es ist nicht erforderlich, dass ein SMS-Client alle eingehenden Nachrichten nach der Zeichenfolge myscheme://open durchsucht, erkennt, dass es sich um einen App-Link handelt, und tun Sie etwas damit.

Sie werden insgesamt etwas mehr Glück haben eine https (oder in eine Prise, http) URL als App-Link (die http://www.example.com/gizmos URL von the documentation that you linked to) verwenden. Dann erkennen SMS-Clients möglicherweise, dass dies eine URL ist, und tun etwas damit. Und insgesamt sollten Sie entweder zu Ihrer App oder zu Ihrer Webseite gebracht werden, die für den Benutzer zumindest einigermaßen nützlich sind. Ihre App wird jedoch immer noch nicht geöffnet, wenn der Nutzer Ihre URL in die Adressleiste eingibt, da Browser möglicherweise nicht erwarten, dass dort ein App-Link eingegeben wird.

Sie können die Chancen einer https App-Verknüpfung zu arbeiten, und arbeiten Sie so, wie Sie wollen, indem Sie und binden, dass in Ihrem Manifest.

Insgesamt ist dies jedoch immer noch darauf angewiesen, dass sich Kunden dafür entscheiden. Manchmal werden sie es, weil Android es relativ einfach macht. Manchmal werden sie nicht. Ein Webbrowser ist willkommen, Ihre URL zu sehen, sehen Sie, dass es https ist, sagen Sie "Hey, wie ein Webbrowser, ich weiß, wie man damit umgeht!", Und laden Sie diese Webseite, Ignorieren Sie Ihre installierte App. Sie und ich könnten das als einen Bug in diesem Browser betrachten; Die Entwickler dieses Browsers können gerne widersprechen.

Ich habe festgestellt, dass Chrome auf den Markt zu navigieren: // Details id = com.myapp nicht auf das Play Store öffnet

Dies geht zurück auf die „Entwickler können tun, was sie wollen“ -Teil . Wenn Sie auf einen Link auf einer Webseite mit dieser URL geklickt haben, besteht die Möglichkeit, dass Chrome Sie zum Play Store führt. Chrome ist jedoch nicht verpflichtet, die Adressleiste so zu behandeln, wie sie einen Link in einer Webseite behandelt.

2

Chrome öffnet keine Apps von manuell eingegebenen URI-Schemas. In der Tat wird ein manuell eingegebener Link nie eine externe App in Chrome starten. Das ist Absicht - aus welchem ​​Grund auch immer, das Chrome-Team ist der Meinung, dass Nutzer nach Eingabe einer Adresse immer im Browser bleiben sollten.

Sie können dies zu einem gewissen Grad umgehen, indem Sie den Deep-Link hinter eine Benutzer-Laufwerk-Aktion setzen (ein Standard-Tag <a>), aber Chrome hat seinen eigenen Standard namens Chrome Intents, den Sie stattdessen verwenden sollen . Je nach Gerät, das Sie verwenden, könnte dies auch für den Standardbrowser der Fall sein.

In anderen Apps liegt es an der fraglichen App, ob ein benutzerdefiniertes URI-Schema als "anklickbarer Link" identifiziert wird. Um die beste Kompatibilität zu erzielen, sollten Sie es in einen normalen http:// Link mit einer Weiterleitung einbinden.

Wenn Sie sich für eine detaillierte Erklärung der Komplikationen rund um Deep Linking interessieren, ist this post ein guter Ausgangspunkt. Wenn Sie nur wollen, dass es ohne viel zusätzlichen Aufwand funktioniert, löst Branch.io (vollständige Offenlegung: Ich bin im Branch-Team) dieses Problem als einen kostenlosen Dienst.

Verwandte Themen