行者孙爷爷
行者孙爷爷
  • 发布:2020-11-06 17:00
  • 更新:2022-01-21 06:00
  • 阅读:1717

离线推送,第三方厂商推送

分类:uni-app

走了不少弯路,写出来分享给大家,希望更多的人不要像我这像浪费时间了
直接上代码吧,

//app.vue中执行该方法
export function bindMsgClick(){
//监听系统通知栏消息点击事件
plus.push.addEventListener('click', function(msg){
//处理点击消息的业务逻辑代码
//{title:"标题",content:"内容",payload:"自定义数据"}
console.log(msg)
uni.navigateTo({
url: '///?reflush=true'
})
}, false);
plus.push.addEventListener('receive', function(msg){
plus.push.createMessage(msg.content, message.payload, {
title: message.title
})
});
}

//登录成功之后绑定cid
export function updateCid(){
var pinf = plus.push.getClientInfo();
console.log('client',pinf.clientid)
request.post("/**/",{client:pinf.clientid}).then(res=>{
console.log(res.data)
});
}

后端代码如下,

//发消息给个人
public static String sendMsg(String clientId){
// 获取应用基本信息
IGtPush push = new IGtPush(host, appKey, masterSecret);
// 选择透传通知模板,个推离线只支持透传
TransmissionTemplate template = new TransmissionTemplate();
template.setAppId(appId);
template.setAppkey(appKey);

    JSONObject msg = new JSONObject();  
    msg.put("title","离线消息测试");  
    msg.put("content","---离线消息测试---");  

    String payload = msg.toString();  
    template.setTransmissionContent(payload);    // 设置透传内容  
    template.setTransmissionType(2);    // 2代表客户端收到消息后需要自行处理  

    // 配置第三方厂商推送  
    Notify notify = new Notify();  
    notify.setTitle(msg.getString("title"));  
    notify.setContent(msg.getString("content"));  
    notify.setType(GtReq.NotifyInfo.Type._intent);  
    // 设置intent 注意格式要正确(修改你的包名)  
    notify.setIntent("intent:#Intent;launchFlags=0x04000000;action=android.intent.action.oppopush;" +  
        "package=uni.包名.包名;" +  
        "component=uni.包名.包名/io.dcloud.PandoraEntry;S.UP-OL-SU=true;" +  
        "S.title=" + msg.getString("title") + ";" +  
        "S.content="+ msg.getString("content") + ";" +  
        "S.payload=" + payload + ";end");  
    notify.setPayload(payload);  
    template.set3rdNotifyInfo(notify);  

    List<String> appIds = new ArrayList<>();  
    appIds.add(appId);  
    SingleMessage message = new SingleMessage();  
    message.setData(template);  
    message.setOffline(true);  
    message.setOfflineExpireTime(8* 1000 * 3600);    // 离线有效时间 单位毫秒  
    message.setStrategyJson("{\"default\":4}");  
    Target target = new Target();  
    target.setAppId(appId);  
    target.setClientId(clientId);  
    IPushResult ret = null;  
    try {  
        ret = push.pushMessageToSingle(message, target);  
    } catch (RequestException e) {  
        e.printStackTrace();  
        ret = push.pushMessageToSingle(message, target, e.getRequestId());  
    }  
    if (ret != null) {  
        System.out.println(ret.getResponse().toString());  
        return ret.getResponse().toString();  
    } else {  
        System.out.println("服务器响应异常");  
        return "服务器响应异常";  
    }  
}  

在后台配置好自己申请的第三方厂商的key,就可以杀掉app进程,向app推送消息了
目前只在小米手机上测试通过了

1 关注 分享
汉鑫电子

要回复文章请先登录注册

chinahappybeer

chinahappybeer

苹果,华为, 小米 , OPPO,一加在线离线都成功了
VIVO,魅族没试过

OPPO 安装APP 默认未开启通知选项?你们是这样的吗?
2022-01-21 06:00
chinahappybeer

chinahappybeer

iQOO手机死活不行
2022-01-20 21:03
刘先生啊

刘先生啊

你好,方便加一下QQ吗,有个问题请教1603872054
2021-02-25 17:23
行者孙爷爷

行者孙爷爷 (作者)

华为的厂商推送,一定要在华为开发者后台,设置 256位hash签名,
使用命令进入到key.keystore的目录;

使用命令:keytool -list -v -keystore key.keystore(key.keystore 是你的签名文件的)
然后回车

提示输入密码: 输入你的证书的密码
输入密码时命令行不会显示任何内容,你只需要输入正确的密码即可,输入完后回车;

输入正确,回车后,就会看到:MD5,SHA1,SHA256的值。

华为开发者后台,登录 AppGallery Connect 网站 ,选择“我的项目”。
在项目列表中找到您的项目,在项目下的应用列表中选择需要开通服务的应用。
SHA256证书指纹 添加后,点对号保存,然后静等生效,我的十分钟左右,有的人说一天,,,
2020-11-09 14:00