开发者社区> 问答> 正文

应用研发平台EMAS中Flutter中如何监听到离线通知的点击回调呢?

应用研发平台EMAS中Flutter中如何监听到离线通知的点击回调呢?辅助弹窗Activity中如何和Flutter中aliyun_push插件中的方法交互呢?

展开
收起
小易01 2023-12-12 22:40:55 66 0
1 条回答
写回答
取消 提交回答
  • 在应用研发平台EMAS中,使用Flutter监听离线通知的点击回调并和辅助弹窗Activity交互,可以按照以下步骤进行:

    1. 集成aliyun_push插件
      首先,确保已经在Flutter项目中正确集成了aliyun_push插件。可以通过pubspec.yaml文件添加依赖,并按照官方文档进行配置。

    2. 初始化推送服务
      在Flutter项目的初始化阶段,调用aliyun_push插件的初始化方法,并设置监听器。

    import 'package:aliyun_push/aliyun_push.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatefulWidget {
      
      _MyAppState createState() => _MyAppState();
    }
    
    class _MyAppState extends State<MyApp> {
      late AliyunPushPlugin _pushPlugin;
    
      
      void initState() {
        super.initState();
        _pushPlugin = AliyunPushPlugin();
        _initPush();
      }
    
      Future<void> _initPush() async {
        await _pushPlugin.init(
          onMessageReceived: (Map<String, dynamic> message) {
            // 处理接收到的消息
          },
          onNotificationClick: (Map<String, dynamic> message) {
            // 处理点击通知的事件
          },
          onTokenRefresh: (String token) {
            // 处理设备令牌刷新事件
          },
        );
      }
    
      // ...
    }
    
    1. 处理离线通知点击回调
      onNotificationClick回调中,你可以处理离线通知被点击的事件。这里可以根据message参数中的内容判断是否为离线通知,并执行相应的操作。

    2. 与辅助弹窗Activity交互
      若要与辅助弹窗Activity(通常是在Android原生代码中实现的)进行交互,你需要使用MethodChannel进行 Flutter 和原生代码之间的通信。

    首先,在原生Android代码中创建一个用于接收消息的MethodChannel:

    import io.flutter.embedding.engine.FlutterEngine;
    import io.flutter.plugin.common.MethodChannel;
    
    public class MainActivity extends AppCompatActivity {
        private static final String CHANNEL_NAME = "com.example.yourapp/notification_click";
    
        private MethodChannel methodChannel;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            FlutterEngine flutterEngine = FlutterFragmentActivity.findFlutterView(this).getFlutterEngine();
            methodChannel = new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL_NAME);
        }
    
        public void onNotificationClick(Context context, CPushMessage message) {
            // 调用Flutter的方法
            methodChannel.invokeMethod("onNotificationClick", message.toString());
        }
    }
    

    然后,在Flutter中创建一个对应的方法来接收来自原生代码的消息:

    import 'package:flutter/services.dart';
    
    class NotificationHelper {
      static const MethodChannel _channel =
          const MethodChannel('com.example.yourapp/notification_click');
    
      static Future<void> handleNotificationClick(String message) async {
        await _channel.invokeMethod('onNotificationClick', message);
      }
    }
    

    _MyAppState类的onNotificationClick回调中,调用NotificationHelper.handleNotificationClick方法并将点击的通知信息传递给原生代码:

    class _MyAppState extends State<MyApp> {
      // ...
    
      Future<void> _initPush() async {
        // ...
    
        await _pushPlugin.init(
          // ...
          onNotificationClick: (Map<String, dynamic> message) async {
            // 处理离线通知点击事件
            await NotificationHelper.handleNotificationClick(message.toString());
          },
        );
      }
    
      // ...
    }
    

    这样,当用户点击离线通知时,Flutter会通过MethodChannel将点击事件传递给原生的辅助弹窗Activity,然后在原生代码中根据需要显示辅助弹窗或其他操作

    2023-12-29 10:57:21
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
基于阿里巴巴以及合作伙伴的最佳实践,围绕大前端、云原生领域的相关技术热点(小程序、Serverless、应用中间件、低代码、DevOps)展开行业探讨,与开发者一起探寻云原生时代应用研发的新范式。
相关文档: 移动研发平台
问答排行榜
最热
最新

相关电子书

更多
基于flutter的产品应用实践 立即下载
《Flutter in action》 立即下载
闲鱼《Flutter 技术解析与实战》 立即下载