开发者社区 问答 正文

应用研发平台EMAS中应用指定的页面有相关介绍的文档么?

应用研发平台EMAS中辅助弹窗配置后点击离线通知后Flutter应用中的aliyun_push插件的onNotificationOpened方法监听不到,onSysNoticeOpened回调方法中可以通过channl方法调用aliyun_push中的方法么?辅助弹窗点击后调起Flutter应用指定的页面有相关介绍的文档么?

展开
收起
十一0204 2023-12-12 22:40:55 75 分享 版权
阿里云 AI 助理回答

问题分析与解答

在应用研发平台 EMAS 中,辅助弹窗配置后点击离线通知时,Flutter 应用中的 aliyun_push 插件的 onNotificationOpened 方法无法监听到通知回调。同时,您询问是否可以通过 onSysNoticeOpened 回调方法中的 channel 调用 aliyun_push 插件的方法,以及是否有相关文档介绍如何通过辅助弹窗点击后调起 Flutter 应用指定页面。

以下是针对问题的详细解答:


1. onNotificationOpened 方法无法监听的原因

根据知识库资料,辅助弹窗的离线通知处理逻辑并不在 MessageReceiver/AliyunMessageIntentService 的回调中。这意味着,当设备处于离线状态且通过厂商通道推送通知时,点击通知后会触发辅助弹窗的回调方法(如 onSysNoticeOpened),而不会触发 onNotificationOpened 方法。

原因总结: - 辅助弹窗的离线通知处理逻辑独立于普通推送通道。 - 离线通知的点击事件由辅助弹窗的 onSysNoticeOpened 方法处理,而非 onNotificationOpened

因此,onNotificationOpened 方法无法监听到辅助弹窗的离线通知点击事件是正常现象。


2. 是否可以通过 onSysNoticeOpened 调用 aliyun_push 插件的方法

在辅助弹窗的 onSysNoticeOpened 回调方法中,确实可以通过 Flutter 的 MethodChannel 调用 aliyun_push 插件的方法。具体实现步骤如下:

实现步骤:

  1. 定义 MethodChannel: 在 Flutter 应用中,定义一个 MethodChannel,用于与原生代码通信。例如:

    static const MethodChannel _channel = MethodChannel('aliyun_push');
    
  2. 在原生代码中实现 MethodChannel: 在 Android 原生代码中,通过 onSysNoticeOpened 回调方法调用 Flutter 的 MethodChannel。例如:

    @Override
    protected void onSysNoticeOpened(String title, String content, Map<String, String> extraMap) {
       // 构造参数
       Map<String, Object> arguments = new HashMap<>();
       arguments.put("title", title);
       arguments.put("content", content);
       arguments.put("extraMap", extraMap);
    
       // 调用 Flutter 的 MethodChannel
       new MethodChannel(getFlutterEngine().getDartExecutor(), "aliyun_push").invokeMethod(
           "onNotificationOpened", arguments
       );
    }
    
  3. 在 Flutter 中监听 MethodChannel: 在 Flutter 应用中监听 MethodChannel 的调用,并处理通知数据。例如:

    _channel.setMethodCallHandler((call) async {
       if (call.method == "onNotificationOpened") {
           final title = call.arguments["title"];
           final content = call.arguments["content"];
           final extraMap = call.arguments["extraMap"];
    
           // 根据通知数据跳转到指定页面
           Navigator.push(
               context,
               MaterialPageRoute(builder: (context) => TargetPage(title: title, content: content)),
           );
       }
    });
    

结论: 通过上述方式,可以在 onSysNoticeOpened 回调方法中调用 aliyun_push 插件的方法,并将通知数据传递给 Flutter 应用。


3. 辅助弹窗点击后调起 Flutter 应用指定页面的相关文档

目前,EMAS 官方文档中并未直接提供关于辅助弹窗点击后调起 Flutter 应用指定页面的详细说明。但根据知识库资料,可以参考以下内容进行实现:

参考实现步骤:

  1. 配置辅助弹窗打开的 Activity: 在服务端推送请求中,设置 AndroidPopupActivity 参数为自定义的辅助弹窗中转 Activity。例如:

    pushRequest.setAndroidPopupActivity("com.alibaba.push.testdemo.SecondActivity");
    

  2. 在辅助弹窗中转 Activity 中处理跳转逻辑:onSysNoticeOpened 方法中,解析通知数据并根据额外参数跳转到指定页面。例如:

    @Override
    protected void onSysNoticeOpened(String title, String content, Map<String, String> extraMap) {
       // 获取路由信息
       String targetRoute = extraMap.get("route");
    
       // 根据路由信息跳转到指定页面
       Intent intent = new Intent(this, FlutterActivity.class);
       intent.putExtra("route", targetRoute);
       startActivity(intent);
       finish();
    }
    
  3. 在 Flutter 应用中处理路由跳转: 在 Flutter 应用的入口文件中,根据传递的路由信息跳转到指定页面。例如:

    void main() {
       runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
       @override
       Widget build(BuildContext context) {
           return MaterialApp(
               home: HomePage(),
               routes: {
                   "/targetPage": (context) => TargetPage(),
               },
           );
       }
    }
    

补充说明: 虽然官方文档未明确提及 Flutter 应用的辅助弹窗跳转实现,但通过上述方式可以实现类似功能。建议参考 EMAS 提供的 ReactNative 和 Flutter 插件集成文档,结合辅助弹窗的实现逻辑进行开发。


总结

  1. onNotificationOpened 方法无法监听辅助弹窗的离线通知点击事件,这是由于辅助弹窗的处理逻辑独立于普通推送通道。
  2. 可以通过 onSysNoticeOpened 回调方法中的 MethodChannel 调用 aliyun_push 插件的方法,将通知数据传递给 Flutter 应用。
  3. 官方文档中未直接提供辅助弹窗点击后调起 Flutter 应用指定页面的说明,但可以通过自定义辅助弹窗中转 Activity 和 Flutter 路由机制实现该功能。

希望以上解答能够帮助您解决问题!如有进一步疑问,请随时提问。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答