2014-09-04 21 views
8

Ich versuche, tiefe Verknüpfung in Android App zu implementieren.Wie kann Deep-Linking in WebView in der Android App aktiviert werden?

Wenn ich die tiefe Verknüpfung von benutzerdefinierten URL klicken (xxxx: // umbuchen id = 12) auf Android-Browser wie Chrome, öffnet sich meine App und funktioniert sehr gut.

Problem ist, in der App, gibt es einen WebView-Widget, und ich mag die Deep-Linking Arbeit auch dort.

Derzeit ist es zeigt Can't connect to the server Fehler.

Vielen Dank im Voraus.

+0

Aufschalten shouldOverrideUrlLoading Funktion selbst handelt, wenn url.startsWith (APP_SCHEME) – mitvenkatesan

Antwort

11

Dies ist das Problem mit Android-Web-Ansicht, da dies alles als URL behandelt, aber andere Browser wie Chrome auf Mobile abfängt das Schema und OS wird den Rest tun, um die entsprechende App zu öffnen. Dazu müssen Sie implementieren Ihre Web-Ansicht shouldOverrideUrlLoading Funktionen wie folgt ändern:

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     LogUtils.info(TAG, "shouldOverrideUrlLoading: " + url); 
     Intent intent; 

     if (url.contains(AppConstants.DEEP_LINK_PREFIX)) { 
      intent = new Intent(Intent.ACTION_VIEW); 
      intent.setData(Uri.parse(url)); 
      startActivity(intent); 

      return true; 
     } 
} 

In obigem Code AppConstants.DEEP_LINK_PREFIX mit dem URL-Schema zB ersetzen.

android-app: // Ihr Paket

hoffe, das hilft !!

+0

Dies, wenn der Benutzer nicht gebunden ist, die andere App –

+1

nicht installiert hat, den tiefen Link Dies ist über das Öffnen für Ihre App über die Webansicht Ihrer App. Bitte sehen Sie die Frage? Wenn es etwas gibt, das ich vermisse, bitte erläutern. – Pranav

+3

if (intent.resolveActivity (getPackageManager())! = Null) Dies überprüft, ob die Absicht gestartet werden kann –

0

Die Antwort von @pranav ist perfekt, aber könnte abstürzen, wenn es keine Apps sind, die Absicht zu behandeln. @ Georgianbenetatos-Lösung, das verhindern hilft

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setData(Uri.parse(url)); 
if (intent.resolveActivity(getPackageManager()) != null) { 
    startActivity(intent); 
} else { 
    Toast.makeText(this, R.string.no_apps_to_handle_intent, Toast.LENGTH_SHORT).show(); 
} 
Verwandte Themen