2013-03-22 10 views
10

Ich bin seit Stunden auf dieser Sache festgefahren, da das Ding vorher arbeitete, aber plötzlich aufhörte, sich wie erwartet zu verhalten. Ich weiß nicht wirklich, wie und warum ich jede einzelne Codezeile überprüft habe, ohne in der Lage zu sein zu sehen, was falsch ist, also bitte ich euch um Hilfe.OAuth und benutzerdefiniertes Schema führen zu einem "ERR_UNKNOWN_URL_SCHEME" in Chrome

In Ordnung. So habe ich eine LoginScreen Aktivität mit einer Schaltfläche, die eine neue Intent.ACTION_VIEW auf Klick startet. Dies startet den OAUTH-Prozess im Browser mit ApiManager.OAUTH_CALLBACK_URI auf stjapp://oauthresponse.

Hier ist mein AndroidManifest.xml Teil für diese Aktivität:

<activity 
    android:name=".LoginScreen" 
    android:label="@string/application" 
    android:launchMode="singleTask"> 
    <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="stjapp" android:host="oauthresponse" /> 
    </intent-filter> 
</activity> 

Wie kann ich die Intent.ACTION_VIEW in meiner Tätigkeit beginnen:

private View.OnClickListener loginHandler = new View.OnClickListener() { 
     public void onClick(View v) { 
      OAuthClientRequest request = null; 
      try { 
       request = OAuthClientRequest 
        .authorizationLocation(ApiManager.OAUTH_AUTHORIZE) 
        .setClientId(ApiManager.CLIENT_ID).setRedirectURI(ApiManager.OAUTH_CALLBACK_URI) 
        .buildQueryMessage(); 
      } 
      catch (OAuthSystemException e) { e.printStackTrace(); } 
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(request.getLocationUri() + "&response_type=code")); 
      startActivity(intent); 
     } 
    }; 

Und hier ist ein Screenshot von dem, was im Browser geschieht:

enter image description here

Dort sollte ich wieder zu meiner LoginScreen Aktivität zurückkehren und die code Abfrageparameter innerhalb der onNewIntent Methode behandeln, aber ... ja, das Ding funktioniert nicht mehr wie erwartet.

Jede Hilfe wird geschätzt.

+0

Alles funktioniert wie erwartet, den Link mit dem integrierten Browser von Android zu öffnen. Fange an zu fühlen, dass ich eine interne 'WebView' verwenden muss, anstatt diesen Teil des OAuths nach draußen verarbeiten zu lassen. Irgendwelche Gedanken? – kytwb

Antwort

6

Es sieht so aus, als ob dies ein Chromium bug ist. Die Abhilfe Ich verwende ist eine PHP-Zielseite für die RedirectURI, die die App via JavaScript öffnet (die von diesem Fehler betroffen ist nicht):

<script language="javascript"> 
    window.location = 'myscheme://myhost/?<?=$_SERVER["QUERY_STRING"]?>'; 
</script> 
+0

Ich markiere als akzeptierte Antwort, wie Sie mit dem Chrom-bezogenen Problem verbunden sind. Ich werde sehen, welche Alternativen zu meinem Bedarf passen. Vielen Dank! – kytwb

+0

@Kyotoweb gerne helfen! – domsom

4

ich den gleichen Fehler hatte und gelöst durch die URL prefixing mit http://.

2

In Chrome Version 40 und höher wurde dieser Fehler behoben, jedoch nur, wenn Sie die URL der Umleitungsseite manuell in die Adressleiste eingeben. Das Problem ist auf dem Chrom-Problem-Tracker here.

Die Antwort mit der „Abhilfe“, aus der Ausgabe eingefügt:

OK, ich habe, dass die window.location über Absicht umleiten herausgefunden wird Arbeit, so lange, wie es von einem geklickt externe Quelle oder Link auf Seite. Wenn Sie die Adresse der Umleitungsseite manuell in die Adresszeile eingeben, schlägt die Umleitung/Öffnung der App mit dem Fehler fehl.

So funktioniert das Senden eines Links auf die Umleitungsseite in einer E-Mail oder SMS ganz gut, wenn der Benutzer auf den Link klickt. Manuelles Schreiben der Adresse in die Adressleiste schlägt fehl. window.location = chromeUrl; sollte funktionieren gut.

1

nur, wenn Sie die URL der Weiterleitungsseite manuell in die Adressleiste eingeben. Das Problem ist hier auf dem Chrom-Problem-Tracker.

die Antwort mit der „Abhilfe“, aus der Ausgabe eingefügt:

OK, ich habe, dass die window.location Absicht AS LONG arbeitet Umleitung über herausgefunden, wie es von einer externen Quelle geklickt wird oder Link auf der Seite. Wenn Sie die Adresse der Umleitungsseite manuell in die Adressleiste eingeben, schlägt die Umleitung/Öffnung der App mit diesem Fehler fehl.

Das Senden eines Links zur Umleitungsseite in einer E-Mail oder SMS funktioniert also einwandfrei, wenn der Benutzer auf den Link klickt. Das manuelle Eingeben der Adresse in die Adressleiste schlägt fehl. window.location = chromeUrl; sollte gut funktionieren.

Verwandte Themen