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
.
- ¿Cómo usar una actividad de lanzador diferente en un sabor de producto?
- Android: deshabilitar para instalar la aplicación en tablets
- Android: convertir XML estándar a formato XML binario de Android (AXML)
- Android CATEGORY HOME en 4.1.2
- Cómo deshabilitar la combinación de manifiesto en Android Studio
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:
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.
- Cómo resolver No se puede encontrar la actividad explícita en firebase AuthUi?
- Configuración del manifiesto SDK de Android Dropbox
- Android: icono de la aplicación para depurar y liberar el modo
- la fusión de manifiesto de android falló, servicios de juego de gms / firebase
- Escribir en la tarjeta SD
- Ni el usuario ni el proceso actual tienen android.permission.ACCESS_COARSE_LOCATION
- Android + gradle: diferentes metadatos manifiestos por sabor
- ¿No puede escuchar el estado del administrador de wi-fi de android?
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.
- Saber si la aplicación recibió la notificación desde el lado del servidor
- Android: "TextView no admite selección de texto. Modo de acción cancelado "