OAuth y esquema personalizado resultan en un "ERR_UNKNOWN_URL_SCHEME" en Chrome

He estado atrapado en esto durante horas ya que la cosa estaba trabajando antes, pero de repente se detuvo a comportarse como se esperaba. Realmente no sé cómo y por qué como he estado revisando cada línea de código en el proceso sin poder ver lo que está mal, así que les estoy pidiendo ayuda.

Bien. Así que tengo una actividad de LoginScreen con un botón que comienza un nuevo Intent.ACTION_VIEW en clic. Esto inicia el proceso OAUTH en el navegador con un ApiManager.OAUTH_CALLBACK_URI establecido en stjapp://oauthresponse .

Esta es mi parte de AndroidManifest.xml para esta actividad:

 <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> 

Cómo inicio el Intent.ACTION_VIEW en mi actividad:

 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); } }; 

Y aquí hay una captura de pantalla de lo que sucede en el navegador:

Introduzca aquí la descripción de la imagen

Allí, se supone que debo volver a mi actividad de la LoginScreen y manejar los parámetros de la consulta del code dentro del método de onNewIntent pero … sí, la cosa no trabaja como más espera.

Cualquier ayuda apreciada.

Parece que este es un error de cromo . La solución que utilizo es una página de destino de PHP para RedirectURI que abre la aplicación a través de JavaScript (que no se ve afectada por ese error):

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

Tuve el mismo error y lo resolví prefijando la url con http:// .

En la versión 40 de Chrome, este error ha resurgido, pero sólo si introduce manualmente la URL de la página de redirección en la barra de direcciones. El problema está en el rastreador de problemas de cromo aquí .

La respuesta con la "solución", pegado del problema:

OK, he descubierto que el redireccionamiento window.location a través de la intención funcionará, TAN LARGO como se hace clic desde una fuente externa o un enlace en la página. Si introduce manualmente la dirección de la página de redirección en la barra de direcciones, la redirección / apertura de la aplicación fallará con dicho error.

Por lo tanto, el envío de un enlace a la página de redirección en un correo electrónico o SMS funcionará bien cuando el usuario haga clic en el enlace. Escribir manualmente la dirección en la barra de direcciones fallará. window.location = chromeUrl; Debería funcionar bien.

Sólo si está introduciendo manualmente la URL de la página de redirección en la barra de direcciones. El problema está en el rastreador de problemas de cromo aquí.

La respuesta con la "solución", pegado del problema:

OK, he descubierto que el redireccionamiento window.location a través de la intención funcionará, TAN LARGO como se hace clic desde una fuente externa o un enlace en la página. Si introduce manualmente la dirección de la página de redirección en la barra de direcciones, la redirección / apertura de la aplicación fallará con dicho error.

Por lo tanto, el envío de un enlace a la página de redirección en un correo electrónico o SMS funcionará bien cuando el usuario haga clic en el enlace. Escribir manualmente la dirección en la barra de direcciones fallará. Window.location = chromeUrl; Debería funcionar bien.

  • Flujo de control de aplicaciones de Android?
  • ACCESS_COARSE_LOCATION se fusionó con play-services-base lib
  • ¿Qué es <permission-tree> en android manifest? ¿Cómo hacer uso de esto?
  • Google TV: Dispositivos Android compatibles 0 dispositivos
  • Extensión de archivos múltiples / filtros de intención de tipo mimetype con una actividad
  • Cómo obtener la dirección en Android (como el norte, oeste)
  • Detectar el android de mi aplicación: versionCode en tiempo de ejecución
  • ¿Cómo cambiar el nombre de una aplicación de Android?
  • Android HelloViews Spinner Tutorial R.id y R.array no se pueden resolver
  • AndroidMainfest - ¿debería tener un filtro de intención múltiples acciones?
  • Apagar o reiniciar un dispositivo Android a través de código / programa?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.