Haz que la aplicación Ionic aparezca en la lista "Compartir" y reciba datos
Estoy tratando de obtener una aplicación de Ionic para aparecer en la lista "Compartir" cuando un usuario hace clic en el botón de compartir, por ejemplo, para una imagen.
- Lenguaje de programación universal para Android, iPhone y Windows Phone
- HTML 5 Entrada de archivos con iOS y Android
- Cifrado de cadena de Java
- ¿Cómo obtener información de memoria fiable en dispositivos móviles?
- Desarrollo nativo de Android / iOS frente a Marmalade SDK
Por lo que entiendo tengo que añadir algo como
<intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="image/*" /> </intent-filter>
En el AndroidManifest.xml
. Que puedo hacer con el plugin cordova-custom-config , creo.
Entonces tendría que manejar esa intención de alguna manera sin embargo y eso es donde consigue complicado para mí. Parece que el único cordova plugin que actualmente es maintaned para intentos es éste . He intentado usarlo así:
initializeApp() { this.platform.ready().then(() => { // Okay, so the platform is ready and our plugins are available. // Here you can do any higher level native things you might need. this.statusBar.styleDefault(); this.splashScreen.hide(); this.registerBroadcastReceiver(); }); } private registerBroadcastReceiver(){ window.plugins.intentShim.registerBroadcastReceiver({ filterActions: [ 'com.darryncampbell.cordova.plugin.broadcastIntent.ACTION' ] }, function(intent) { // Broadcast received console.log('Received Intent: ' + JSON.stringify(intent.extras)); } ); }
Pero de esta manera estoy recibiendo un error que window.plugins no está definido. Realmente no sé cómo integraría esto con Ionic .
También esto sólo funciona para Android, me gustaría tener ese trabajo para iOS también. Esta pregunta SO está relacionada y menciona una manera de hacerlo para iOS, pero es de 4 años (las partes vinculadas iOS 5 años) y el proyecto webintent especificado para Android en la respuesta ni siquiera existe más.
Sería genial si alguien pudiera ayudarme aquí.
También relacionado:
- Cordova recibe datos compartidos de otra aplicación – Usos desactualizados plugin,
window.plugins
, específicos de Android. - Enviar url a la aplicación androide iónica a través de webintents de otra aplicación – Usa complemento obsoleto,
window.plugins
, específicos de Android.
Actualizar
Todas las respuestas se centran en Android sólo, realmente esperaba que alguien me podría señalar en la dirección correcta para iOS como lo necesitaría allí aún más …
Conclusión final y recompensa
Generosidad
Después de una larga consideración he concluido para dar la generosidad a @ Ghandi. Aunque nadie pudo dar una respuesta completa, él era el único que intentaba contestar a toda la pregunta – incluyendo la parte del iOS. Yo no esperaba una solución de código completo, sólo un puntero en la dirección correcta para Android e iOS y eso es lo que él vino más cerca de todas las respuestas. Sé que esta es una pregunta muy amplia y me gustaría dar las gracias a todos los que se tomaron el tiempo para responder y / o comentar esta pregunta.
Para otros que están tratando de lograr lo mismo, aquí es lo que concluyo de toda mi investigación y las respuestas aquí
Androide
Como ya he descrito en mi pregunta anterior, tienes que añadir esas líneas a AndroidManifest.xml
. Android hará que tu aplicación aparezca en la lista de recursos compartidos. Los datos que recibe tu aplicación tendrás que manejar a través de un llamado Intent . Para ello, puede utilizar Ionic Native – Web Intent . A partir de 9.5.2017 esto no funcionaría todavía como el Plugin Ionic Native está usando ya no existe. Sin embargo, he creado un problema en Github donde me han dicho que la próxima versión de Ionic Native (creo que 3.7.0), que debe ser lanzado en las próximas dos semanas, debe arreglar esto mediante el complemento mencionado en mi pregunta anterior ya. Esto resuelve el problema de tener que jugar un poco en el marco Ionic usted mismo y simplemente ser capaz de utilizar Ionic Native.
IOS
En iOS parece ser un poco más complicado y también hay menos que encontrar en la web. Lo mejor es seguir el enlace que @Ghandi ofrece en su respuesta a continuación.
- Escucha tocar y arrastrar el valor y la función en consecuencia
- ¿Cómo regresar al mercado cuando no se maneja el esquema de URL personalizada de Android?
- ¿La plataforma web de Famo.us apoya el teléfono?
- Mover la aplicación web existente en una aplicación de teléfono nativa mediante un contenedor de navegador
- Cajón de navegación en React-Native
- Diferencia de OpenGL ES para iOS y Android
- ¿Qué dispositivos admiten la lectura de velocidad de geolocalización en sus navegadores?
- ¿Es posible recibir eventos de inclinación en JavaScript en Webkit móvil para teléfonos iOS o Android?
Después de un análisis detallado, esto es lo que podría concluir:
En Android, sólo puede obtener su aplicación agregada en la lista de recursos utilizando cordova-plugin-intention como se describe aquí . También puede lograr esto agregando filtros de intenciones en la actividad como se describe aquí
En iOS, esto es un poco complicado ya que no hay complementos directos ni soluciones readymade disponibles para lograr esto. Pero el mejor enlace posible que podría obtener relacionados con la adición de la aplicación en el menú de iOS compartir se está enumerando en el menú compartido El vínculo incluye la documentación de Apple para hacer esto y también algunos ajustes en Info.plist para lograr esto.
Esta es la mejor respuesta posible que pude pensar. Espero eso ayude. Aclamaciones.
Para ejecutar el complemento https://github.com/darryncampbell/darryncampbell-cordova-plugin-intent , prueba:
-
Instale el complemento con
--save
para asegurarse de que el complemento se agrega a su config.xmlionic plugin add https://github.com/darryncampbell/darryncampbell-cordova-plugin-intent --save
-
Dado que este complemento no se importa en
ionic-native
, es necesario identificar el objeto global. Esto se declarará en la carpeta plugin-> plugin.xml . Aquí el objeto esintentShim
.<js-module name="IntentShim" src="www/IntentShim.js"> <clobbers target="intentShim" /> </js-module>
-
En su código declare el objeto global como:
declare var intentShim:any;
Y en su función,
private registerBroadcastReceiver(){ intentShim.registerBroadcastReceiver({ filterActions: [ 'com.darryncampbell.cordova.plugin.broadcastIntent.ACTION' ] }, function(intent) { // Broadcast received console.log('Received Intent: ' + JSON.stringify(intent.extras)); } ); }
tratar
window.intentShim.registerBroadcastReceiver
O función de llamada dentro
document.addEventListener('deviceready', function(){ registerBroadcastReceiver() }, false);
- Acuerdo de distribución de desarrolladores de Google Play. Dónde ver y de acuerdo
- RequestLayout () incorrectamente llamado por android.widget.RelativeLayout android