uniapp使用UniPush 服务端Java

最近需求往指定app用户发推送,app采用的是uniapp,后端采用Java,最初使用DCloud的开发者后台(https://dev.dcloud.net.cn/)发送很顺畅,但是调用api遇到很多坑,网上搜索一圈方案都不ok。折腾许久,完美兼容Android、ios。

前端直接参考https://ask.dcloud.net.cn/article/35622

准备:pom.xml文件

<dependency>
    <groupId>com.gexin.platform</groupId>
    <artifactId>gexin-rp-sdk-http</artifactId>
    <version>4.1.1.4</version>
</dependency>
 

 <repositories>
    <repository>
        <id>getui-nexus</id>
        <url>http://mvn.gt.getui.com/nexus/content/repositories/releases/</url>
    </repository>
 </repositories>
 

 

后端Java:

import com.gexin.rp.sdk.base.IPushResult;
import com.gexin.rp.sdk.base.impl.AppMessage;
import com.gexin.rp.sdk.base.impl.SingleMessage;
import com.gexin.rp.sdk.base.impl.Target;
import com.gexin.rp.sdk.base.notify.Notify;
import com.gexin.rp.sdk.base.payload.APNPayload;
import com.gexin.rp.sdk.base.uitls.AppConditions;
import com.gexin.rp.sdk.exceptions.RequestException;
import com.gexin.rp.sdk.http.Constants;
import com.gexin.rp.sdk.http.IGtPush;
import com.gexin.rp.sdk.template.AbstractTemplate;
import com.gexin.rp.sdk.template.LinkTemplate;
import com.gexin.rp.sdk.template.NotificationTemplate;
import com.gexin.rp.sdk.template.TransmissionTemplate;
import com.gexin.rp.sdk.template.style.AbstractNotifyStyle;
import com.gexin.rp.sdk.template.style.Style0;
import org.springframework.stereotype.Service;
public class UninAppNews {

//参照上方链接获取

private static String appId = "";
private static String appKey = "";
private static String masterSecret = "";

// 如果需要使用HTTPS,直接修改url即可
//private static String host = "https://api.getui.com/apiex.htm";
private static String host = "http://api.getui.com/apiex.htm";

private static String CID = "";//前端获取
//指定用户推送
public void sendNews() {

    // 设置后,根据别名推送,会返回每个cid的推送结果
    System.setProperty(Constants.GEXIN_PUSH_SINGLE_ALIAS_DETAIL, "true");
    IGtPush push = new IGtPush(host, appKey, masterSecret);
    NotificationTemplate template = getNotificationTemplate2();
    SingleMessage message = new SingleMessage();
    message.setOffline(true);
    // 离线有效时间,单位为毫秒
    message.setOfflineExpireTime(24 * 3600 * 1000);
    message.setData(template);
    // 可选,1为wifi,0为不限制网络环境。根据手机处于的网络情况,决定是否下发
    message.setPushNetWorkType(0);
    // 厂商通道下发策略
    message.setStrategyJson("{\"default\":4,\"ios\":4,\"st\":4}");
    Target target = new Target();
    target.setAppId(appId);
    target.setClientId(CID);
    //target.setAlias(Alias);
    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());
    } else {
        System.out.println("服务器响应异常");
    }
}

//通知模板

 public static NotificationTemplate getNotificationTemplate2() {
        NotificationTemplate template = new NotificationTemplate();
        // 设置APPID与APPKEY
        template.setAppId(appId);
        template.setAppkey(appKey);

        Style0 style = new Style0();
        // 设置通知栏标题与内容
        style.setTitle("咚咚咚咚咚");//Android消息标题
        style.setText("动咚1119");//Android消息内容
        // 配置通知栏图标
        style.setLogo("icon.png");
        // 配置通知栏网络图标
//        style.setLogoUrl("");
        // 设置通知是否响铃,震动,或者可清除
        style.setRing(true);
        style.setVibrate(true);
        style.setClearable(false);
//        style.setChannel("通知渠道id");
//        style.setChannelName("通知渠道名称");
        style.setChannelLevel(4); //设置通知渠道重要性
        template.setStyle(style);

        template.setTransmissionType(2);  // 透传消息设置,收到消息是否立即启动应用: 1为立即启动,2则广播等待客户端自启动
        template.setTransmissionContent("请输入您要透传的内容");

        template.setAPNInfo(getAPNPayload()); //详见【推送模板说明】iOS通知样式设置
        return template;
    }
    //ios样式模板
   private static APNPayload getAPNPayload() {
        APNPayload payload = new APNPayload();
        //在已有数字基础上加1显示,设置为-1时,在已有数字上减1显示,设置为数字时,显示指定数字
        payload.setAutoBadge("+1");
        payload.setContentAvailable(0);
        //ios 12.0 以上可以使用 Dictionary 类型的 sound
        payload.setSound("default");
        payload.setCategory("$由客户端定义");
        payload.addCustomMsg("由客户自定义消息key", "由客户自定义消息value");
        //简单模式APNPayload.SimpleMsg
//         payload.setAlertMsg(new APNPayload.SimpleAlertMsg("给你发消息了"));
         payload.setAlertMsg(getDictionaryAlertMsg());  //字典模式使用APNPayload.DictionaryAlertMsg
        return payload;
    }
//ios消息体
    private static APNPayload.DictionaryAlertMsg getDictionaryAlertMsg() {
        APNPayload.DictionaryAlertMsg alertMsg = new APNPayload.DictionaryAlertMsg();
        alertMsg.setBody("小何给你发消息了");//ios消息内容
        alertMsg.setActionLocKey("显示关闭和查看两个按钮的消息");
        alertMsg.setLocKey("loc-key1");
        alertMsg.addLocArg("loc-ary1");
//        alertMsg.setLaunchImage("调用已经在应用程序中绑定的图形文件名");
        // iOS8.2以上版本支持
        alertMsg.setTitle("通知标题");//ios消息标题
//        alertMsg.setTitleLocKey("自定义通知标题");
//        alertMsg.addTitleLocArg("自定义通知标题组");
        return alertMsg;
    }

}

 

 

不出意外复制即用。

官网文档http://docs.getui.com/getui/server/java/template/

在DCloud的开发者后台:https://dev.dcloud.net.cn/

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值