Как получить событие нажатия push-уведомления с помощью плагина Flutter Huawei Push Kit?

Я интегрирую Huawei Push Kit (https://pub.dev/packages/huawei_push) в приложение Flutter и все работает нормально, за исключением того, что я не могу получить событие, когда нажимается полученное сообщение push-уведомления, чтобы иметь возможность действовать.

Можно ли этого достичь с помощью этого плагина или мне нужно написать эту часть в собственном коде Android?


person C-Fox    schedule 17.08.2020    source источник


Ответы (2)


В настоящее время вы можете добиться этого с помощью другого плагина, который прослушивает пользовательские намерения. Пакет Uni_links от pub.dev прост в использовании. Вот краткое руководство по пакету uni_links:

  1. Добавьте uni_links в файл pubspec.yaml:
dependencies:
  flutter:
    sdk: flutter
  huawei_push: 4.0.4+300
  uni_links: 0.4.0
  1. Определите фильтр намерений в файле AndroidManifest.xml:
<application
  <!-- . . . Other Configurations . . . -->
    <activity/>
      <!-- . . . Other Configurations . . . -->
        <!-- Add the intent filter below.(inside the application and activity tags) -->
            <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="app"/>
            </intent-filter>
        </activity>
</application
  1. Вызовите методы uni-ссылок в вашем initState (), которые будут прослушивать пользовательские намерения. Пользовательское намерение уведомления, которое я отправил из консоли Push Kit, выглядит следующим образом:
app:///ContentPage?name=Push Kit&url=https://developer.huawei.com/consumer/en/hms/huawei-pushkit
// Get the initial intent that opens the app
Future<void> initInitialLinks() async {
  // Platform messages may fail, so we use a try/catch PlatformException.
  try {
    String initialLink = await getInitialLink();
    if (initialLink != null) {
      var uri = Uri.dataFromString(initialLink);
      String page = uri.path.split('://')[1];
      String serviceName = uri.queryParameters['name'];
      String serviceUrl = uri.queryParameters['url'];
      try {
        WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
          Navigator.of(context).pushNamed(
            page,
            arguments: ContentPageArguments(serviceName, serviceUrl),
          ); // Navigate to the page from the intent
        });
      } catch (e) {
        Push.showToast(e);
      }
    }
  } on PlatformException {
   print('Error: Platform Exception');
  }
}

// Get intents as a stream
Future<Null> initLinkStream() async {
  if (!mounted) return;
  _sub = getLinksStream().listen((String link) {
    var uri = Uri.dataFromString(link);
    String page = uri.path.split('://')[1];
    // Parse the string ...
    Navigator.of(context).pushNamed(page); // Navigate to a page from the intent
  }, onError: (err) {
    print("Error while listening for the link stream: " + err.toString());
  });
}

Для получения дополнительной информации посетите: Deep Linking на Flutter с использованием пользовательских намерений Huawei Push Kit сопровождающий репозиторий github статья включает коды.

person shirley    schedule 18.08.2020
comment
Спасибо, я так реализовал, но на самом деле это обходной путь. Я надеялся, что существует более прямой подход к получению содержимого сообщения push-уведомления при нажатии или сразу же, если приложение находится на переднем плане, как вы можете сделать с firebase_messaging. Но ладно, этого решения достаточно :) - person C-Fox; 19.08.2020
comment
Да, в настоящее время глубинные ссылки для Flutter могут быть достигнуты с помощью плагина Huawei Push Kit вместе с пакетом uni_links. - person shirley; 20.08.2020

Я также изучил их плагин флаттера и не нашел для этого никакого метода. Я думаю, вам придется написать код для конкретной платформы, и для этого вы можете обратиться к их демонстрационному проекту Android с PushKit.

https://github.com/HMS-Core/hms-push-clientdemo-android

person Anas Iqbal    schedule 18.08.2020