u_push_plugin

友盟推送Plugin

备注(插件当前处于开发阶段不开放使用,仅供测试)

Getting Started

Android端

注意 由于UmengNotifyClickActivity原因,gradle配置使用

api 'com.umeng.umsdk:push:6.1.0'

api 'com.umeng.umsdk:agoo-accs:3.3.8.8-open-fix2'

如导致依赖冲突 请在主项目gradle中进行依赖配置

首先声明自定义 Application

class RApplication :FlutterApplication(){
    override fun onCreate() {
        super.onCreate()
        //注册友盟推送
        PushManager.instance.initUPush(this,"YourKey","YourSecret")
        ///三方渠道注册 如果没有对应平台不实现对应方法就好
        OtherPlatformBuilder.Builder(this)
                       .initHuawei() //注册华为
                       .initMeiZu("", "") //注册魅族
                       .initOppo("", "") //注册oppo
                       .initVivo() //注册vivo
                       .initXiaoMi("", "") //注册小米
                       .build().register() //注册动作
    }
}

具体清单文件配置三方配置请查看官方文档

三方渠道接收消息用(不使用不实现就好)

class NotifyActivity : UmengNotifyClickActivity() {
    var message = ""
    override fun onMessage(p0: Intent?) {
        //接收到代码,然后做你想做的
        //由于FlutterActivity所以导致无法在main中进行接收,曲线救国,如果有更好的方法也希望您能提供哦
        //此处我是将activity设置为全透明,并在此处获取数据进行跳转
        //以下代码仅供参考
        val body = p0?.getStringExtra("body")
        var intent = Intent()
        val data = Gson().fromJson<PushData>(body,PushData::class.java)
        intent.putExtra("message",data.extra.message)
        intent.putExtra("type",data.extra.type)
        intent.setClass(this,MainActivity::class.java)
        startActivity(intent)
        finish()
    }
}



...



///如果是三方渠道冷启动时,还需要在MainActivity中实现数据整合,我是在onCreate中实现的
override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        intent.extras?.run {
            keySet().forEach {
                this[it]?.run {
                    MessageManager.instance.addColdStarData(it, this.toString());
                }
            }
            MessageManager.instance.buildMessageMap();
        }
    }

MainActivity中重写onNewIntent方法

    override fun onNewIntent(intent: Intent) {
            super.onNewIntent(intent)
            MessageManager.instance.setIntentJson(intent)
        }

flutter 端

开启友盟消息监听回调

    UPushPlugin.initMessageListener();

开启的登陆完成监听(由于登录注册是异步的,防止主动获取时无法获取到)

   UPushPlugin.initRegisterListener((value) {
         deviceToken = value.message;
         setState(() {});
       });

消息监听

   UPushPlugin.initMessageResultListener((value) {
         MessageData(value);
         setState(() {
           message = MessageData(value).message;
         });
       });

后台进入,冷启动主动获取数据

   UPushPlugin.getCacheMessage().then((value) {
         if(value.isNotEmpty){
           setState(() {
             message = MessageData(value).message;
           });
         }
       });

主动获取deviceToken

   deviceToken = await UPushPlugin.getDeviceToken();

回传信息数据转dart

   class MessageData extends BaseMessageData{
     String message;
     int type;
     MessageData(Map<dynamic, dynamic> mapData) : super(mapData);
   
     @override
     void createDataByMap(Map<dynamic, dynamic> mapData) {
       message = mapData["message"];
       type = int.parse(mapData["type"]) ;
     }
   }

关闭消息推送

    await UPushPlugin.closePush();
    //回参
    class ToggleData{
      bool success;
      String message;
    
      ToggleData(this.success, this.message);
    
      @override
      String toString() {
        return 'ToggleData{success: $success, message: $message}';
      }
    }

开启消息推送

    await UPushPlugin.openPush();
    //回参
    class ToggleData{
      bool success;
      String message;
    
      ToggleData(this.success, this.message);
    
      @override
      String toString() {
        return 'ToggleData{success: $success, message: $message}';
      }
    }

Libraries

data
u_push_plugin