【问题标题】:How to get push notification click event with Flutter Huawei Push Kit plugin?如何使用 Flutter Huawei Push Kit 插件获取推送通知点击事件?
【发布时间】:2020-08-17 13:15:20
【问题描述】:

我正在将 Huawei Push Kit (https://pub.dev/packages/huawei_push) 集成到 Flutter 应用程序中,一切正常,除了当点击收到的推送通知消息以对其进行操作时我无法获取事件。

这可以通过这个插件实现还是我需要用原生Android代码编写这部分?

【问题讨论】:

    标签: flutter huawei-mobile-services huawei-developers


    【解决方案1】:

    目前,您可以使用另一个侦听自定义意图的插件来实现此目的。 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. 在您的 initState() 中调用 uni links 方法,该方法将侦听自定义意图。我从 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 on Flutter using Huawei Push Kit’s Custom Intents 文章accompanying github repository包含代码。

    【讨论】:

    • 谢谢,我是这样实现的,但这实际上是一种解决方法。我希望有更直接的方法可以在单击时获取推送通知消息的内容,或者在应用程序处于前台时立即获取推送通知消息的内容,就像使用 firebase_messaging 一样。但是好的,这个解决方案已经足够好了:)
    • 是的,目前Flutter的深度链接可以通过使用华为Push Kit Plugin和uni_links包来实现。
    【解决方案2】:

    我还研究了他们的颤振插件,但没有任何方法。我想你将不得不编写特定于平台的代码,为此你可以参考他们的带有 PushKit 的演示原生 android 项目。

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

    【讨论】:

      猜你喜欢
      • 2021-11-27
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多