Сделать приложение "Ион" в списке "Поделиться" и получить данные

Я пытаюсь получить приложение Ionic, чтобы появиться в списке "Поделиться", когда пользователь нажимает кнопку "Поделиться", например, для изображения.

Пример совместного использования

Насколько я понимаю, мне нужно добавить что-то вроде

<intent-filter> 
   <action android:name="android.intent.action.SEND" />
   <category android:name="android.intent.category.DEFAULT" />
   <data android:mimeType="image/*" />
</intent-filter>

до AndroidManifest.xml. Что я могу сделать, используя плагин cordova-custom-config, я думаю.

Тогда мне пришлось бы как-то справиться с этим намерением, и именно поэтому мне становится сложно. Кажется, что единственный плагин cordova, который в настоящее время поддерживается для намерений, этот. Я попытался использовать его следующим образом:

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

Но таким образом я получаю сообщение об ошибке, что window.plugins undefined. Я действительно не знаю, как бы интегрировать это с Ionic.

Также это работает только для Android, мне бы тоже хотелось, чтобы это работа для iOS. Этот вопрос, относящийся к этому вопросу, связан и описывает способ сделать это для iOS, но ему около 4 лет (связанные части iOS 5 лет) и веб-сайт проекта, указанный для Android в ответе уже не существует.

Было бы здорово, если бы кто-то помог мне здесь.

Связано также:

Обновление

Все ответы сосредоточены только на Android, я действительно надеялся, что кто-то может указать мне в правильном направлении для iOS, поскольку мне это понадобится еще больше...

Окончательный вывод и награда

Bounty
После долгих размышлений я пришел к выводу, чтобы дать щедрость @Ганди. Хотя никто не мог дать полный ответ, он был единственным, кто пытался ответить на весь вопрос, включая часть iOS. Я не ожидал полного решения для кода, просто указателя в правильном направлении для Android и iOS и того, к чему он ближе всего подходит для всех ответов. Я знаю, что это очень широкий вопрос и Я хотел бы поблагодарить всех, кто нашел время, чтобы ответить и/или прокомментировать этот вопрос.

Для других, кто пытается выполнить одно и то же, вот что я заключил из всех моих исследований и ответов здесь

Android

Как уже описано выше, вы должны добавить эти строки в AndroidManifest.xml. Затем Android запустит ваше приложение в списке общего доступа. Данные, полученные вашим приложением, вам придется обрабатывать с помощью так называемого Intent. Для этого вы можете использовать Ionic Native - Web Intent. Начиная с 9.5.2017 это еще не сработало, поскольку использование плагина Ionic Native больше не существует. Однако я создал проблему в Github, где мне сказали, что следующая версия Ionic Native (я думаю, 3.7.0), которая должна быть выпущенный в течение следующих двух недель, должен исправить это, используя plugin, упомянутый выше в моем вопросе. Это решает вопрос о том, чтобы любить играть вокруг Ionic Framework самостоятельно и просто быть в состоянии использовать Ionic Native.

IOS

В iOS это выглядит немного сложнее, и его также можно найти в Интернете. Лучше всего вы следуете ссылке, которую @Ghandi дает в своем ответе ниже.

Ответ 1

После некоторого подробного анализа это то, что я мог заключить:

В Android вы можете просто добавить свое приложение в список общего доступа, используя намерение cordova-plugin, как описано здесь. Вы также можете достичь этого, добавив фильтр намерений в действие, как описано здесь

В iOS это немного сложно, поскольку для этого нет прямых плагинов или готового решения. Но лучшая возможная ссылка, которую я мог бы связать с добавлением приложения в меню общего доступа iOS, отображается в общем меню. В эту ссылку включена документация по яблокам для этого, а также некоторые настройки в Info.plist, чтобы добиться этого.

Это лучший ответ, о котором я мог подумать. Надеюсь, поможет. Приветствия.

Ответ 2

Для запуска плагина https://github.com/darryncampbell/darryncampbell-cordova-plugin-intent, попробуйте:

  • Установите плагин с --save, чтобы убедиться, что плагин добавлен в ваш config.xml

    ionic plugin add https://github.com/darryncampbell/darryncampbell-cordova-plugin-intent --save
    
  • Поскольку этот плагин не импортируется в ionic-native, вам нужно идентифицировать глобальный объект. Это будет объявлено в папке плагина → plugin.xml. Здесь объект intentShim.

       <js-module name="IntentShim" src="www/IntentShim.js">
          <clobbers target="intentShim" />
      </js-module>
    
  • В коде объявите глобальный объект как:

    declare var intentShim:any;
    

    И в вашей функции

    private registerBroadcastReceiver(){
      intentShim.registerBroadcastReceiver({
          filterActions: [
              'com.darryncampbell.cordova.plugin.broadcastIntent.ACTION'
              ]
          },
          function(intent) {
              //  Broadcast received
              console.log('Received Intent: ' + JSON.stringify(intent.extras));
          }
      );
    }
    

Ответ 3

попробуйте

window.intentShim.registerBroadcastReceiver

или функция вызова внутри

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

Ответ 4

Вы можете отправлять или получать данные через плагин webIntent, предоставленный 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

Команда для установки плагина:

ionic cordova plugin add com-darryncampbell-cordova-plugin-intent
npm install --save @ionic-native/[email protected]

Код Для получения данных: (Добавьте "Web-Intent" в провайдере)

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