¿Cómo implementar Enlaces de aplicaciones de Android con dominios comodín?
Android tiene una guía sobre cómo implementar enlaces de aplicaciones. Es decir, si mi aplicación declara que maneja ciertos enlaces web, y trato de abrir este enlace en cualquier otra aplicación, el sistema intercepta esto y lleva al usuario directamente a mi aplicación, en lugar del navegador, para que pueda mostrar la información relevante Contenido directamente en mi aplicación. Muy útil.
Lo que me falta en la guía es dos cosas:
- Cómo capturar la aplicación de desinstalación en el dispositivo y dejar que el servidor sepa esto (iOS / Android)
- Configuración de accesorios inalámbricos alternativa en la plataforma android?
- IOS / Android: diseño de aplicaciones, todo-nativo o PhoneGap?
- ¿Qué versiones de Android e iOS es Adobe AIR 3.0 captive runtime compatible con?
- ¿Cómo puedo mostrar pdf en html (respuesta / solución de navegación cruzada)
-
Cómo implementar enlaces de aplicaciones con dominios comodín. Me gustaría que mi aplicación manejara enlaces a * .example.com, es decir, todos los enlaces a
subdomains
de example.com (test.example.com, something.example.com etc); -
Cómo implementar enlaces de aplicaciones sólo a rutas específicas de mi sitio. Por ejemplo, quiero interceptar test.example.com/something, pero no test.example.com/other. El primero debe venir a mi aplicación, el otro a mi navegador;
La guía correspondiente de iOS muestra que iOS maneja ambos escenarios (aunque la parte comodín no estaba clara de los documentos y tuve que aclarar con Apple Support que necesita colocar el archivo de asociación en el dominio raíz, no un subdominio).
¿Pueden los Enlaces de Aplicaciones de Android manejar dominios comodín y sólo un subconjunto de rutas?
- ¿Existe un método aceptable de plataforma cruzada para mostrar un teclado numérico en formularios web estándar en un dispositivo basado en táctil?
- ¿Qué es más seguro: navegador externo o ChromeTab para autorización?
- ¿Existe una biblioteca de código abierto de OCR o sdk (gratuita) para Android e iOS?
- Libgdx o playn?
- Detectar la máxima resolución de vídeo compatible con un dispositivo móvil en un sitio web que responda
- Cómo establecer la visibilidad GONE como android en IOS?
- ¿Existe una solución equivalente, como iOS's localNotification en la plataforma Android?
- Notificaciones push de VOIP en android
- Desafortunadamente, parece que Android no puede manejar dominios comodín .
Si observa la guía de API para la etiqueta de datos ( https://developer.android.com/guide/topics/manifest/data-element.html ), puede ver que mencionan que el comodín está disponible para pathPattern y mimeType, pero No para el anfitrión.
La cosa es que, como explicó CommonsWare en otro post sobre el tema ( https://stackoverflow.com/a/34068591/4160079 ),
Los dominios se comprueban en el momento de la instalación y no hay ningún medio para agregar nuevos dominios, excepto por el envío de una nueva edición de la aplicación con un nuevo manifiesto.
Así que tendrás que listar manualmente todos los subdominios disponibles, y actualizar la aplicación cada vez que se lance un nuevo subdominio.
Así es como declara varios subdominios:
<activity android:name="MainActivity"> <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="http" /> <data android:host="subdomain1.example.com" /> <data android:host="subdomain2.example.com" /> <data android:host="subdomain3.example.com" /> </intent-filter> </activity>
- Sí, sólo puede manejar un subconjunto de rutas
Es la misma idea, basta con listar las rutas que desee usando el atributo path (de nuevo, vea la guía de API de etiqueta de datos arriba).
Si utiliza cadenas de consulta o parámetros de ruta, prefiera usar pathPrefix .
Si es necesario, puede utilizar comodines aquí, eligiendo pathPattern en su lugar.
La parte de ruta de un URI que debe comenzar con un /. El atributo path especifica una ruta completa que coincide con la ruta completa en un objeto Intent. El atributo pathPrefix especifica una ruta parcial que coincide sólo con la parte inicial de la ruta del objeto Intent. El atributo pathPattern especifica una ruta de acceso completa que coincide con la ruta completa del objeto Intent, pero puede contener los comodines siguientes: Un asterisco (' ') coincide con una secuencia de 0 a muchas ocurrencias del carácter inmediatamente anterior. Un período seguido de un asterisco (". ") Coincide con cualquier secuencia de 0 a muchos caracteres.
He aquí algunos ejemplos:
<activity android:name="MainActivity"> <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="http" /> <data android:host="subdomain1.example.com" /> <data android:host="subdomain2.example.com" /> <data android:host="subdomain3.example.com" /> <data android:path="/path1" /> <!-- matches /path1 only --> <data android:pathPrefix="/test" /> <!-- matches /path2, /path2/something or also /path2?key=value etc... --> <data android:pathPattern="/wild.*" /> <!-- matches /wild, /wild3, /wilderness etc... --> </intent-filter> </activity>
Android no puede manejar el dominio comodín como tal (como por su documentación de hoy), pero, esto responderá a su consulta sobre la inclusión y exclusión de ciertas / rutas .
Para implementar vínculos profundos para URL como-
http://example.com/gizmos?1234, http://example.com/gizmos/1234, http://example.com/gizmos/toys/1234, etc.
Su XML debe verse algo así:
<activity android:name="com.example.android.GizmosActivity" android:label="@string/title_gizmos" > <intent-filter android:label="@string/filter_title_viewgizmos"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- Accepts URIs that begin with "example://gizmos” --> <data android:scheme="example" android:host="gizmos" /> </intent-filter> <intent-filter android:label="@string/filter_title_viewgizmos"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- Accepts URIs that begin with "http://example.com/gizmos” --> <data android:scheme="http" android:host="example.com" android:pathPrefix="/gizmos" /> </intent-filter> </activity>
Ahora, considerando que fue capaz de lograr esto, aquí es cómo restringir el acceso a partes del contenido de su aplicación,
<?xml version="1.0" encoding="utf-8"?> <search-engine xmlns:android="http://schemas.android.com/apk/res/android"> <noindex uri="http://example.com/gizmos/hidden_uri"/> <noindex uriPrefix="http://example.com/gizmos/hidden_prefix"/> <noindex uri="gizmos://hidden_path"/> <noindex uriPrefix="gizmos://hidden_prefix"/> </search-engine>
Y el Manifiesto parte-
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.android.Gizmos"> <application> <activity android:name="com.example.android.GizmosActivity" android:label="@string/title_gizmos" > <intent-filter android:label="@string/filter_title_viewgizmos"> <action android:name="android.intent.action.VIEW"/> ... </activity> <meta-data android:name="search-engine" android:resource="@xml/noindex"/> </application> <uses-permission android:name="android.permission.INTERNET"/> </manifest>
Para más detalles y explicación de este ejemplo, puede echar un vistazo a:
Android Deep Linking
Espero que ayude, codificación feliz
- Android- Thread.join () hace que la aplicación se bloquee
- Qt para android: cambia el icono de la aplicación