推送IM消息 - Uniapp推送

初始化GoEasy对象时允许通知栏提醒

APP在初始化GoEasy对象时,增加参数allowNotification:true即可,该参数仅在UniApp开发的APP下有效,如果在小程序和网页下启用,该参数会被自动忽略,不会报错。

开启通知栏推送后,如果APP收到的消息含有通知栏信息,将会按照如下规则触发:

  • APP在前台运行,APP内部能收到新消息,但不会收到通知栏提醒。
  • APP在后台运行或进程被杀掉,APP将会收到通知栏提醒,APP拉起后,APP内部也能收到新消息。
Vue.prototype.goeasy = GoEasy.getInstance({
    host:"hangzhou.goeasy.io",  //若是新加坡区域:singapore.goeasy.io
    appkey:"您的common key",
    modules:['im'],//根据需要,传入‘pubsub’或'im’,或数组方式同时传入
    allowNotification:true,  // true表示支持通知栏提醒,false则表示不需要通知栏提醒
});

建立连接

APP在接收和发送消息之前,必须要先连接GoEasy,一个app中需要,且只需要建立一个连接即可,在成功断开连接之前,不需要,也不能反复建立连接。

        //建立连接
    this.goeasy.connect({
        id:"001", //pubsub选填,im必填
        data: {"avatar":"/www/xxx.png","nickname":"Neo"}, //pubsub选填,im必填,用于上下线提醒和查询在线用户列表时,扩展更多的属性
        onSuccess: function () {  //连接成功
            console.log("GoEasy connect successfully.") //连接成功
        },
        onFailed: function (error) { //连接失败
            console.log("Failed to connect GoEasy, code:"+error.code+ ",error:"+error.content);
        },
        onProgress:function(attempts) { //连接或自动重连中
            console.log("GoEasy is connecting", attempts);    
        }
    });

IM客户端发送通知栏推送

如果希望APP在后台运行时,能够收到通知栏提醒,需要创建消息时指定notification的title和body,反之则不需要。

通知栏提醒,对发送端没有平台限制,不论是小程序、H5还是服务端均可以进行发送,但只有Uniapp开发的APP在手机端可以接收通知栏推送,其他平台收到消息后,仅触APP内部收到消息,notification会被自动忽略。

    var im = this.goeasy.im;    

    let textMessage = im.createTextMessage({
        text:'Hello, GoEasyIM',
        to : {
            type : GoEasy.IM_SCENE.PRIVATE, 
            id : 'user002',
            data: {"avatar":"/www/xxx.png","nickname":"Neo"} 
        },
        notification : { //APP在后台运行,或进程被杀掉,将会收到通知栏提醒
            title : '张无忌发来一段文字',
            body : 'Hello, GoEasyIM'
        }
    });

监听通知栏消息点击事件

用户点击通知栏消息,除了APP被自动拉起外,开发者还可以通过监听通知栏消息的点击事件,根据消息数据,执行相应的业务逻辑,比如跳转到不同的页面,或显示不同的内容。

为了避免在APP启动后未完成监听动作而导致APP无法响应点击操作,确保APP总是可以第一时间响应通知栏消息的点击事件,请务必在main.js GoEasy初始化后,立即监听onClickNotification事件。


    //初始化GoEasy对象为全局对象
    Vue.prototype.goeasy = GoEasy.getInstance({
        host:"hangzhou.goeasy.io",  //若是新加坡区域:singapore.goeasy.io
        appkey:"您的common key",
        modules:['im'],//根据需要,传入‘pubsub’或'im’,或数组方式同时传入
        allowNotification:true,  // true表示支持通知栏提醒,false则表示不需要通知栏提醒
    });

    //当用户点击通知栏消息触发,开发者可以根据消息数据,执行不同的业逻辑,比如跳转到不同的页面,或显示不同的内容
    goeasy.onClickNotification((message) => {
        //  message 
        // {
        //     "messageId": "8f0e27a0c7e111eab347b726da4416bd",
        //     "timestamp": 1594958217087,
        //     "type": "text",
        //     "senderId": "3bb179af-bcc5-4fe0-9dac-c05688484649",
        //     "senderData": {"avatar": "/www/xxx.png", "nickname": "Neo"},
        //     "toType: 'group',
        //     "groupId: 'group001',
        //     "groupData: {"avatar": "group - 1.png", "name": "区块链交流群"},
        // }
        console.log('Clicked notification message - ', message);
    });

测试第一条通知栏推送

再次强调

为了确保能收到通知栏提醒,必须在手机的系统设置里确认,该app的通知栏提醒为“允许”状态。

至此,我们可以开始推送我们的第一条通知栏提醒,测试步骤:

  • 将Uniapp应用安装到手机上
  • 在手机系统设置里确认,该app的通知栏提醒为“允许”状态
  • 将APP切换到后台运行
  • 运行Uniapp应用运行到浏览器,在浏览器里执行发送代码
  • 恭喜,手机端收到通知栏提醒!

服务端发送通知栏推送

参见IM Rest接口和服务端发送

集成厂商通道

为了确保APP在进程被杀掉后,仍然可以收到通知栏提醒,必须要配置厂商通道,详情请参阅GoEasy接入厂商通道教程。 GoEasy目前已集成以下厂商,其他厂商也在持续推进中:

  • 苹果iOS(APNs)
  • 小米
  • 华为
  • OPPO
  • VIVO
  • 魅族

results matching ""

    No results matching ""