web-dev-qa-db-fra.com

Faire apparaître Ionic dans la liste "Partager" et recevoir des données

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.

Sharing example

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

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

Conclusion finale et prime

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.

Pour les autres qui essaient d'accomplir la même chose, voici ce que je conclus de toutes mes recherches et les réponses ici

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.

22
bergben

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

7
Gandhi

essayer

window.intentShim.registerBroadcastReceiver

ou appeler la fonction à l'intérieur

document.addEventListener('deviceready', function(){
    registerBroadcastReceiver() }, 
false);
2
Sharad Kale

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));
          }
      );
    }
    
2
Suraj Rao

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