J'essaie d'obtenir une application Ionic à apparaître dans la liste "Partager" lorsqu'un utilisateur clique sur le bouton de partage par exemple pour une image.
Pour autant que je comprends, je dois ajouter quelque chose comme
<intent-filter>
<action Android:name="Android.intent.action.SEND" />
<category Android:name="Android.intent.category.DEFAULT" />
<data Android:mimeType="image/*" />
</intent-filter>
à la AndroidManifest.xml
. Que je peux faire en utilisant le plugin cordova-custom-config , je pense.
Je devrais alors gérer cette intention d'une manière ou d'une autre et c'est là que cela devient difficile pour moi. On dirait que le seul plugin cordova qui est actuellement maintenu à des fins d'intention est celui-ci . J'ai essayé de l'utiliser comme ceci:
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));
}
);
}
Mais de cette façon, j'obtiens une erreur indiquant que window.plugins n'est pas défini. Je ne sais pas vraiment comment j'intégrerais cela avec Ionic .
De plus, cela ne fonctionne que pour Android, j'aimerais que cela fonctionne aussi pour iOS. This SO = question est lié et mentionne un moyen de le faire pour iOS, mais il a environ 4 ans (les parties iOS liées 5 ans) et le webintent du projet spécifié pour Android dans la réponse n'existe même plus.
Ce serait génial si quelqu'un pouvait m'aider ici.
Également lié:
window.plugins
, Android.window.plugins
, Android.Mettre à jour
Toutes les réponses se concentrent sur Android uniquement, j'espérais vraiment que quelqu'un pourrait me diriger dans la bonne direction pour iOS car j'en aurais encore plus besoin. ..
Prime
Après mûre réflexion, j'ai décidé de donner la prime à @Ghandi. Bien que personne ne puisse donner une réponse complète, il était le seul à essayer de répondre à toute la question - y compris la partie iOS. Je ne m'attendais pas à une solution de code complète, juste un pointeur dans la bonne direction pour les deux Android et iOS et c'est ce dont il est le plus proche de toutes les réponses. Je sais que c'est une question très large et Je voudrais remercier tous ceux qui ont pris le temps de répondre et/ou de commenter cette question.
Android
Comme je l'ai déjà décrit dans ma question ci-dessus, vous devez ajouter ces lignes au AndroidManifest.xml
. Android fera alors apparaître votre application dans la liste de partage. Les données que votre application recevra, vous devrez les gérer via un soi-disant Intention . Pour ce faire, vous peut utiliser Ionic Native - Web Intent . À partir du 9.5.2017, cela ne fonctionnerait pas encore car le plugin Ionic Native utilise n'existe plus. J'ai cependant créé un problème sur Github où l'on m'a dit que la prochaine version de Ionic Native (je pense 3.7.0), qui devrait sortir dans les deux prochaines semaines, devrait résoudre ce problème en utilisant le plugin déjà mentionné dans ma question ci-dessus. Cela résout le problème d'avoir à jouer un peu autour du cadre Ionic vous-même et simplement pouvoir utiliser Ionic Native.
iOS
Dans iOS, cela semble un peu plus délicat et il en existe moins sur le Web. Il vaut mieux suivre le lien que @Ghandi fournit dans sa réponse ci-dessous.
Après une analyse détaillée, voici ce que je pourrais conclure:
Dans Android, vous pouvez simplement ajouter votre application dans la liste de partage en utilisant cordova-plugin-intent comme décrit ici . Vous pouvez également y parvenir en ajoutant un filtre d'intention dans l'activité comme décrit ici
Dans iOS, c'est un peu délicat car il n'y a pas de plugins simples ou de solution prête à l'emploi disponibles pour y parvenir. Mais le meilleur lien possible que je pourrais obtenir concernant l'ajout d'application dans le menu de partage iOS est se répertoriant dans le menu de partage Le lien comprend Apple documentation pour ce faire et aussi quelques ajustements) dans Info.plist pour y parvenir.
C'est la meilleure réponse possible à laquelle je pouvais penser. J'espère que ça aide. À votre santé.
essayer
window.intentShim.registerBroadcastReceiver
ou appeler la fonction à l'intérieur
document.addEventListener('deviceready', function(){
registerBroadcastReceiver() },
false);
Pour exécuter le plugin https://github.com/darryncampbell/darryncampbell-cordova-plugin-intent , essayez:
Installez le plugin avec --save
pour vous assurer que le plugin est ajouté à votre config.xml
ionic plugin add https://github.com/darryncampbell/darryncampbell-cordova-plugin-intent --save
Étant donné que ce plugin n'est pas importé dans ionic-native
, vous devez identifier l'objet global. Cela sera déclaré dans le dossier du plugin -> plugin.xml . Ici, l'objet est intentShim
.
<js-module name="IntentShim" src="www/IntentShim.js">
<clobbers target="intentShim" />
</js-module>
Dans votre code, déclarez l'objet global comme:
declare var intentShim:any;
Et dans votre fonction,
private registerBroadcastReceiver(){
intentShim.registerBroadcastReceiver({
filterActions: [
'com.darryncampbell.cordova.plugin.broadcastIntent.ACTION'
]
},
function(intent) {
// Broadcast received
console.log('Received Intent: ' + JSON.stringify(intent.extras));
}
);
}
Vous pouvez envoyer ou recevoir des données via le plugin webIntent fourni par ionic.
Ionic:
Ionic CLI : 5.0.2 (C:\Windows\System32\node_modules\ionic)
Ionic Framework : ionic-angular 3.9.5
@ionic/app-scripts : 3.2.2
Cordova:
Cordova CLI : 9.0.0 ([email protected])
Cordova Platforms : Android 8.0.0
Cordova Plugins : cordova-plugin-ionic-keyboard 2.1.3, cordova-plugin-ionic-webview 4.1.0, (and 5 other plugins)
Utility:
cordova-res : not installed
native-run : 0.2.5
System:
Android SDK Tools : 26.1.1 (D:\Android\Sdk)
NodeJS : v12.4.0 (D:\node.exe)
npm : 6.9.0
OS : Windows 8.1
Commande pour installer le plugin:
ionic cordova plugin add com-darryncampbell-cordova-plugin-intent
npm install --save @ionic-native/web-intent@4
Code Pour recevoir des données: (Ajouter "Web-Intent" dans le fournisseur)
import { WebIntent } from '@ionic-native/web-intent';
clickMe() {
console.log('clicked')
this.webIntent.getIntent().then((data) => {
console.log('Success', data);
},
err => {
console.log('Error', err);
});
}