2

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

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

4

2 回答 2

2

目前,您可以使用另一个侦听自定义意图的插件来实现此目的。来自 pub.dev 的Uni_links包易于使用。这是 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());
  });
}

更多信息,请访问:使用华为 Push Kit 的自定义 Intents 在 Flutter 上进行深度链接 本文随附的 github 存储库包含代码。

于 2020-08-18T11:56:06.637 回答
0

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

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

于 2020-08-18T11:07:24.643 回答