Android Custom URL Scheme weigert sich zu arbeiten / wie man zurück zu Android App nach OAuth navigieren

Bearbeiten, sehen Sie bitte meine 2. Antwort unterhalb dieser Frage für eine viel prägnantere und einfache Anzeige des Problems


Ich habe endlich meinen Verstand beendet. Ich arbeite an einer Cross-Plattform-App (IOS und Android) mit Titan und verbindet mit Salesforce-AIP über Rest-Anrufe. Ich habe 3 Tage und 20 Stunden in diesem Thema verbracht und bin immer noch fest. Jede Unterstützung wäre sehr geschätzt! So taucht man direkt ein.

  • Wie bekomme ich den Google-Benutzernamen auf Android?
  • Kann nicht auf recceive () im boot abgeschlossenen Empfänger debuggen
  • Material Design layout_scrollFlags Bedeutungen
  • EditText-Hinweis wird nicht angezeigt
  • Wie kann ich Screenshot programmgesteuert machen?
  • Android gridview row dividers / separatoren
  • Was ich wünsche: Die App startet, prüft, ob der Benutzer mit der oauth2-Berechtigung einen Token erhalten hat, wenn er dem Benutzer nicht den Anmeldebildschirm von salesforce gibt. Benutzer gibt Anmeldeinformationen und schlägt "erlauben" Knopf und dann werden wir zurück zu der app umgeleitet .

    Das Problem: Aus der Beschreibung dessen, was ich will, dass es oben geht alles funktioniert, außer für die letzte Zeile in Fettschrift. Sobald der Benutzer auf "erlauben" Button klickt, erhalten wir diesen unbekannten URL-Schema-Fehler:

    Fehler

    Der Code: Der Code besteht aus 3 verschiedenen wichtigen Bereichen

    • Meine index.js datei, wo ist der salesforce login call gemacht wird
    • Meine AuthService.js Datei, wo ist die salesforce url info in der index.js aufgerufen wird
    • Meine tiapp.xml wo Konfigurationsmaterial für android benutzerdefinierte URL-Schema gehalten wird

    Index.js

    var Auth = require('AuthService'); Auth.openLogin(); 

    AuthService.js Nur die "openLogin" -Funktion ist hier wirklich wichtig.

     var loginWindow; module.exports = { get: function () { console.log("made it into the auth.get function"); return Ti.App.Properties.getObject('auth'); }, set: function (data) { Ti.App.Properties.setObject('auth', data); console.log("auth set function was executed!!!"); }, erase: function () { Ti.App.Properties.removeProperty('auth'); }, openLogin: function () { console.log("made it into openLogin!!"); var webview = Titanium.UI.createWebView({url:'https://login.salesforce.com/services/oauth2/authorize' + '?response_type=token&display=touch' + '&redirect_uri=testapp://app.open' + '&client_id=' + Ti.App.Properties.getString('salesforce_client_id')}); //console.log("Webview URL: " + webview.getUrl()); loginWindow = Titanium.UI.createWindow(); loginWindow.add(webview); loginWindow.open({modal:true}); // attempt to log url to console here //console.log("this is the webview URL during callback: " + webview.getUrl()); }, closeLogin: function () { loginWindow.close(); } }; 

    Tiapp.xml Ich bin nur mit meinem Android-Bereich von diesem für die Kürze

     <android xmlns:android="http://schemas.android.com/apk/res/android"> <manifest android:versionCode="1" android:versionName="1.00"> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> </manifest> <activity android:name=".TesterActivity" android:exported="true" android:label="@string/app_name" > <intent-filter> <data android:host="app.open" android:scheme="testapp" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </android> 

    Rückruf Url bei Salesforce registriert: Bildbeschreibung hier eingeben

    Was ich ausprobiert habe: Ich habe mich in diesem Thema blau gelassen. Die meisten meiner Basteln haben Anpassungen an meine "tiapp.xml" vorgenommen, indem sie die Eigenschaften und Werte dieser Eigenschaften innerhalb des Android-Tags sowie viele Anpassungen des "redirect_rui" -Wertes in meiner "AuthService.js" -Datei und im Salesforce ändern "Callback-URL" -Feld (da diese Werte übereinstimmen müssen oder man einen Uri-Mismatch-Fehler bekommt).

    Hier sind einige Lösungen, die ich angeschaut und versucht habe, um mein Problem zu beheben: https://gist.github.com/jasonkneen/5736738

    Android benutzerdefinierte url schema ..?

    Wie implementiere ich mein eigenes URI-Schema auf Android

    Nur um ein paar zu nennen.

    Konsole Anmeldung bei der Ausführung:

     [INFO] : Emulator is booted [INFO] : SD card not required, skipping mount check [INFO] : Emulator ready! [INFO] : Creating unsigned apk [INFO] : Processing /Users/michael.kellogg/Documents/Appcelerator_Studio_Workspace/tester/build/android/src [INFO] : Writing unsigned apk: /Users/michael.kellogg/Documents/Appcelerator_Studio_Workspace/tester/build/android/bin/app-unsigned.apk [INFO] : Using MD5withRSA signature algorithm [INFO] : Signing apk: /Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/bin/jarsigner "-sigalg" "MD5withRSA" "-digestalg" "SHA1" "-keystore" "/Users/michael.kellogg/Library/Application Support/Titanium/mobilesdk/osx/5.1.2.GA/android/dev_keystore" "-storepass" "*******" "-signedjar" "/Users/michael.kellogg/Documents/Appcelerator_Studio_Workspace/tester/build/android/bin/tester.apk" "/Users/michael.kellogg/Documents/Appcelerator_Studio_Workspace/tester/build/android/bin/app-unsigned.apk" "tidev" [INFO] : Aligning zip file: /Users/michael.kellogg/android-sdk/build-tools/23.0.2/zipalign "-v" "4" "/Users/michael.kellogg/Documents/Appcelerator_Studio_Workspace/tester/build/android/bin/tester.apk" "/Users/michael.kellogg/Documents/Appcelerator_Studio_Workspace/tester/build/android/bin/tester.apkz" [INFO] : Writing build manifest: /Users/michael.kellogg/Documents/Appcelerator_Studio_Workspace/tester/build/android/build-manifest.json [INFO] : Making sure the adb server is running [INFO] : Installing apk: /Users/michael.kellogg/Documents/Appcelerator_Studio_Workspace/tester/build/android/bin/tester.apk [INFO] : App successfully installed [INFO] : Starting app: com.test.test/.TesterActivity [INFO] : Application pid: 1160 [INFO] : Project built successfully in 3m 8s 295ms [INFO] : art: Late-enabling JIT [INFO] : art: JIT created with code_cache_capacity=2MB compile_threshold=1000 [INFO] : TiApplication: (main) [2,2] checkpoint, app created. [INFO] : TiApplication: (main) [1067,1069] Titanium 5.1.2 (2015/12/16 19:00 ca822b2) [INFO] : art: Background sticky concurrent mark sweep GC freed 15623(973KB) AllocSpace objects, 11(384KB) LOS objects, 41% free, 2MB/3MB, paused 2.142ms total 105.631ms [INFO] : TiApplication: (main) [383,1452] Titanium Javascript runtime: v8 [INFO] : TiRootActivity: (main) [0,0] checkpoint, on root activity create, savedInstanceState: null [WARN] : TiTempFileHelper: (main) [189,189] The external temp directory doesn't exist, skipping cleanup [INFO] : TiRootActivity: (main) [0,0] checkpoint, on root activity resume. activity = com.test.test.TesterActivity@a298e02 [WARN] : V8Object: (KrollRuntimeThread) [1039,1228] Runtime disposed, cannot set property 'userAgent' [INFO] : made it into openLogin!! [INFO] : OpenGLRenderer: Initialized EGL, version 1.4 [WARN] : EGL_emulation: eglSurfaceAttrib not implemented [WARN] : OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xb4d32b20, error=EGL_SUCCESS [INFO] : WebViewFactory: Loading com.android.webview version 44.0.2403.119 (code 246011900) [WARN] : System: ClassLoader referenced unknown path: /system/app/webview/lib/arm [INFO] : LibraryLoader: Time to load native libraries: 36 ms (timestamps 588-624) [INFO] : LibraryLoader: Expected native library version number "",actual native library version number "" [INFO] : LibraryLoader: Expected native library version number "",actual native library version number "" [INFO] : chromium: [INFO:library_loader_hooks.cc(120)] Chromium logging enabled: level = 0, default verbosity = 0 [INFO] : BrowserStartupController: Initializing chromium process, singleProcess=true [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [ERROR] : SysUtils: ApplicationContext is null in ApplicationStatus [WARN] : chromium: [WARNING:resource_bundle.cc(285)] locale_file_path.empty() [ERROR] : libEGL: validate_display:255 error 3008 (EGL_BAD_DISPLAY) [ERROR] : libEGL: validate_display:255 error 3008 (EGL_BAD_DISPLAY) [ERROR] : eglCodecCommon: glUtilsParamSize: unknow param 0x00008d57 [WARN] : AudioManagerAndroid: Requires BLUETOOTH permission [ERROR] : DataReductionProxySettingListener: No DRP key due to exception:java.lang.ClassNotFoundException: com.android.webview.chromium.Drp [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : AwContents: onDetachedFromWindow called when already detached. Ignoring [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : chromium: [WARNING:data_reduction_proxy_config.cc(423)] SPDY proxy OFF at startup [WARN] : EGL_emulation: eglSurfaceAttrib not implemented [WARN] : OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xb4d32b40, error=EGL_SUCCESS [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [INFO] : art: Background sticky concurrent mark sweep GC freed 7564(860KB) AllocSpace objects, 25(988KB) LOS objects, 0% free, 11MB/11MB, paused 1.603ms total 308.766ms [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [INFO] : art: Background partial concurrent mark sweep GC freed 1948(144KB) AllocSpace objects, 3(8MB) LOS objects, 22% free, 13MB/17MB, paused 1.658ms total 271.298ms [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [INFO] : art: Background partial concurrent mark sweep GC freed 148(6KB) AllocSpace objects, 13(36MB) LOS objects, 17% free, 19MB/23MB, paused 1.205ms total 327.978ms [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [INFO] : art: Background partial concurrent mark sweep GC freed 91(3KB) AllocSpace objects, 5(14MB) LOS objects, 22% free, 13MB/17MB, paused 1.228ms total 201.595ms [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Suspending all threads took: 15.737ms [INFO] : art: Background sticky concurrent mark sweep GC freed 261(13KB) AllocSpace objects, 2(5MB) LOS objects, 0% free, 25MB/25MB, paused 18.832ms total 174.330ms [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [INFO] : art: Background partial concurrent mark sweep GC freed 98(20KB) AllocSpace objects, 7(19MB) LOS objects, 26% free, 11MB/15MB, paused 3.244ms total 302.681ms [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 1160 [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [INFO] : art: Background sticky concurrent mark sweep GC freed 11512(602KB) AllocSpace objects, 0(0B) LOS objects, 4% free, 14MB/15MB, paused 1.739ms total 174.806ms [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [INFO] : art: Background partial concurrent mark sweep GC freed 301(32KB) AllocSpace objects, 2(5MB) LOS objects, 25% free, 11MB/15MB, paused 2.370ms total 274.103ms [WARN] : EGL_emulation: eglSurfaceAttrib not implemented [WARN] : OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x9d719f80, error=EGL_SUCCESS [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [INFO] : art: Background sticky concurrent mark sweep GC freed 358(19KB) AllocSpace objects, 0(0B) LOS objects, 0% free, 17MB/17MB, paused 6.593ms total 277.832ms [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [INFO] : art: Background partial concurrent mark sweep GC freed 148(5KB) AllocSpace objects, 3(8MB) LOS objects, 18% free, 17MB/21MB, paused 7.547ms total 414.524ms [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [INFO] : art: Background sticky concurrent mark sweep GC freed 30(608B) AllocSpace objects, 1(2MB) LOS objects, 0% free, 23MB/23MB, paused 2.321ms total 159.615ms [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [INFO] : art: Background partial concurrent mark sweep GC freed 36(1168B) AllocSpace objects, 5(14MB) LOS objects, 21% free, 14MB/18MB, paused 1.626ms total 197.175ms [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [INFO] : art: Background sticky concurrent mark sweep GC freed 21(448B) AllocSpace objects, 0(0B) LOS objects, 0% free, 20MB/20MB, paused 37.280ms total 96.680ms [INFO] : art: Background partial concurrent mark sweep GC freed 34(960B) AllocSpace objects, 4(11MB) LOS objects, 30% free, 8MB/12MB, paused 1.475ms total 106.381ms [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [INFO] : art: Background partial concurrent mark sweep GC freed 56(3KB) AllocSpace objects, 3(8MB) LOS objects, 21% free, 14MB/18MB, paused 3.001ms total 243.577ms [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 1160 [WARN] : BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 1160 [WARN] : BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 1160 [INFO] : I/TiWebChromeClient.console: (main) [21796,21796] Not allowed to load local resource: file:///android_asset/webkit/android-weberror.png (0:data:text/html,chromewebdata) [INFO] : art: Background sticky concurrent mark sweep GC freed 337(53KB) AllocSpace objects, 1(2MB) LOS objects, 6% free, 17MB/18MB, paused 43.249ms total 82.260ms [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [INFO] : art: Background partial concurrent mark sweep GC freed 82(11KB) AllocSpace objects, 3(8MB) LOS objects, 21% free, 14MB/18MB, paused 1.613ms total 159.713ms [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [INFO] : art: Background sticky concurrent mark sweep GC freed 27(544B) AllocSpace objects, 1(2MB) LOS objects, 6% free, 17MB/18MB, paused 21.912ms total 68.965ms [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [INFO] : art: Background partial concurrent mark sweep GC freed 39(1056B) AllocSpace objects, 3(8MB) LOS objects, 21% free, 14MB/18MB, paused 1.523ms total 136.698ms [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [WARN] : art: Attempt to remove non-JNI local reference, dumping thread [ERROR] : Surface: getSlotFromBufferLocked: unknown buffer: 0xaad48dc0 [INFO] : art: Background partial concurrent mark sweep GC freed 40(1104B) AllocSpace objects, 5(14MB) LOS objects, 25% free, 11MB/15MB, paused 3.871ms total 157.623ms [INFO] : APSAnalyticsService: Analytics Service Started [INFO] : APSAnalyticsService: Stopping Analytics Service -- End application log ------------------------------------------------------- 

  • Erkennung der Statusleiste Sichtbarkeit / TYPE_SYSTEM_OVERLAY nicht automatisch ändern
  • Extrahieren von Daten aus pdf417 wie Treiberlizenz
  • Warum sollte ich nicht die Menüsymbole verwenden, die vom Betriebssystem bereitgestellt werden?
  • Weiß jemand, was die Ausgabe von getevent bedeutet?
  • Alibaba Android App verursacht Absturz, wenn Sie versuchen, eine URL zu öffnen
  • NoClassDefFondError in Android ... aber die Klasse ist in einem Jar im Klassenpfad enthalten
  • 3 Solutions collect form web for “Android Custom URL Scheme weigert sich zu arbeiten / wie man zurück zu Android App nach OAuth navigieren”

    Nach so etwas wie 64 Stunden des Internets und unzähligen Versuchen habe ich endlich eine Lösung für dieses Problem gefunden. Yay ich! Ich muss zugeben, dass ich ein bisschen Schande habe, wie lange dieses Thema zur Lösung kam.

    Die Ausgabe: Konnte nicht finden, einen Weg, um zurück zu Android-App nach Salesforce-Autorisierung (benutzerdefinierte URL-Schema war extrem schmerzhaft mit Android) zu navigieren.

    Lösung: Nach der Suche herum fand ich ein Codebeispiel von salesforce, das tat, was ich hier versuchte:

    https://developer.salesforce.com/page/Developing_Mobile_Applications_with_Force.com_and_Appcelerator_Titanium

    Hier ist die github Link in der oben genannten Artikel, dass die dringend benötigte Code:

    https://github.com/appcelerator-developer-relations/Force

    TLDR: Der eigentliche Schlüssel hier war, NICHT ein benutzerdefiniertes URL-Schema mit Android und Titan zu verwenden. Stattdessen öffnet der oben genannte Github-Code die Auth-Seite in einer Web-Ansicht und schließt dann mit Hilfe von Zuhörern diese Webansicht nach auth fertig und öffnet, was auch immer Sie benötigen.

    Erläuterung: Um zu meiner App auf IOS zu navigieren, musste ich nur noch ein paar Zeilen zu meiner Datei tiapp.xml hinzufügen, um ein benutzerdefiniertes URL-Schema zu verwenden. Es funktionierte sehr schnell und einfach ohne Kopfschmerzen. Natürlich nahm ich eine benutzerdefinierte url Schema war der Weg, um mit Android zu gehen, einfach richtig? falsch. Ich verbrachte viele Stunden, wie oben aufgeführten versucht, eine benutzerdefinierte URL-Schema auf Android zu machen, ohne Erfolg. Es gibt viele Infos online über androide benutzerdefinierte url-Schemata, aber keiner von ihnen hat für mich gearbeitet und mir geglaubt, dass ich so viele Dinge versuchte (nach allem war es ca. 64 Stunden). Irgendwann habe ich gerade versucht, ein Beispiel online von Code zu finden, der was ich wollte. Das war das, was ich gefunden habe.

    Könnte es nicht in Kommentar, so dass eine Antwort. Ich würde Sie bitten, es bitte auszuprobieren und zu sehen, ob es hilft.

     <android xmlns:android="http://schemas.android.com/apk/res/android"> <manifest> <application android:icon="@drawable/appicon" android:label="MyApp" android:name="MyApplication"> <activity android:label="MyApp" android:name=".MyApplicationActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> <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:scheme="mytestapplication" /> </intent-filter> </activity> </application> </manifest> 

    Kannst du das probieren und sehen, ob das funktioniert. Sie können auch die TiApp.xml Eintrag in diesem Git Post .

    Fordern Sie an, um zu versuchen, uns zu informieren, wenn das nicht klappt, dann können wir etwas anderes ausprobieren.

    In Bezug auf die Einrichtung der Manifest für eine Schema Anerkennung sollten Sie am Ende mit etwas ähneln die folgenden

     <manifest ...> ... <application ...> ... <activity ... android:exported="true"> <!-- Make it exported --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter android:label="..."> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="testapp" /> <data android:host="app" /> <!-- cover all your bases --> <data android:host="app.open" /> </intent-filter> </activity> </application> </manifest> 

    Ich würde dann eine Methode in dieser Aktivität haben, die überprüfen könnte, ob dein Schema in der Absicht ist. Etwas wie das folgende:

     protected void onCreate(final Bundle savedInstanceState) { ... checkIntent( getIntent() ); } protected void onNewIntent(final Intent intent) { ... checkIntent( intent ); } private void checkIntent(Intent intent) { if ( intent.getDataString() != null && Intent.ACTION_VIEW.equals(intent.getAction()) ) { //If we reached here we have some kind of deep link or custom schema //so lets identify which schema if ( "testapp".equals(data.getScheme().toLowerCase()) ) { //my tests were able to reach here } } } 

    Ein Quarz von Androiden ist, dass bei späteren Versionen der Benutzer Absicht zu zeigen hat . Was das bedeutet realistisch ist, dass die Eingabe einer URL im Browser und drücken gehen wird nicht funktionieren. Es wird nur ausgelöst, wenn ein Benutzer auf einen Link klickt oder wenn man eine Absicht schießt. Wenn du nur die Umleitung von deinem eigenen WebView (und nicht von externen Browsern) erkennen willst, dann kannst du das umgehen:

     myWebView.setWebViewClient( new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.startsWith("testapp://")) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData( Uri.parse(url) ); view.getContext().startActivity( intent ); return true; //with return true, the webview wont try rendering the url } return false; } } ); 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.