App ios 消息推送

App ios 消息推送,第1张

官方文档:开发者中心

首先看文档得有appkey,masterkey,url!!!

分享一个小技巧

友盟自带测试工具,可以先用测试工具调通,然后去看友盟生成的数据,跟你自己组装的数据的差别在哪里!有些数据不传就是收不到的!!!但是它的文档里面没写,好了,祝你成功!

 

 

代码:

import org.apache.commons.codec.digest.DigestUtils;

   @Value("${appPush.url}")
    private String appPushUrl;

    @Value("${ios.appKey}")
    private String iosAppKey;

    @Value("${ios.masterKey}")
    private String iosMasterKey;

    @Value("${ios.url}")
    private String iosAppPushUrl;

    /**
     * 推送类型 -- 列播
     */
    public static final String PUSH_TYPE_LIST = "listcast";

    /**
     * 推送类型 -- 组播
     */
    public static final String PUSH_TYPE_GROUP = "groupcast";

 @Override
    public void sendMessage(Long userId, String title, String content) {
        StaffUserDeviceTokenPO po = staffUserDeviceTokenService.selectById(userId);
        if(ObjectUtil.isNull(po)){
            log.info("用户userId:{}未绑定设备token,推送失败", userId);
            return;
        }
        if (po.getDeviceToken().length()>44){
            sendIos(po.getDeviceToken(), title, content);//调用ios
        }else {
            sendList(po.getDeviceToken(), title, content);//调用android
        }
    }
 /**
     * 发送列播 ios  组装数据
     * @param deviceTokens 设备标识
     * @param title 标题
     * @param content 内容
     */
    public void sendIos(String deviceTokens, String title, String content){
        IosAlert alert=new IosAlert();
        alert.setTitle(title);
        alert.setBody(content);
        alert.setSubtitle(title);
        IosAps aps=new IosAps();
        aps.setAlert(alert);
        IosPayload payload = new IosPayload();
        payload.setAps(aps);
        IosPushQuery query = new IosPushQuery();
        query.setAppKey(iosAppKey);
        query.setType(PUSH_TYPE_LIST);
        query.setPayload(payload);
        String timestamp = Integer.toString((int)(System.currentTimeMillis() / 1000));
        query.setTimestamp(timestamp);
        query.setProductionMode("false");
        query.setDeviceTokens(deviceTokens);
        String postBody = JSONObject.toJSONString(query, SerializerFeature.WriteMapNullValue);
        System.out.println("postBody!!!!!!!!"+postBody);
        postSendIOS(postBody);//调用
    }
 /**
     * ios
     * @param postBody
     */
    public void postSendIOS(String postBody) {
        String sign = null;
        sign = DigestUtils.md5Hex(("POST" + iosAppPushUrl + postBody + iosMasterKey).getBytes(StandardCharsets.UTF_8));
        String url = iosAppPushUrl + "?sign=" + sign;
        log.info("start url:{} body:{}", url, postBody);
        System.out.println("start url:{} body:{}"+url+"!!!!!"+postBody);
        String result = HttpRequest.post(url)
                .header(Header.CONTENT_TYPE, "application/json")
                .body(postBody)
                .execute().body();
        log.info("result:{}", result);
    }

组播:

 /**
     * 发送组播 ios
     * @param appPushFilterQuery 组播条件
     * @param title 标题
     * @param content 内容
     */
    public void sendIosGroup(AppPushFilterQuery appPushFilterQuery, String title, String content){
        AppFilterWhere appFilterWhere=new AppFilterWhere();
        IosAlert alert=new IosAlert();
        alert.setTitle(title);
        alert.setBody(content);
        alert.setSubtitle(title);
        IosAps aps=new IosAps();
        aps.setAlert(alert);
        IosPayload payload = new IosPayload();
        payload.setAps(aps);
        IosPushQuery query = new IosPushQuery();
        query.setAppKey(iosAppKey);
        query.setType(PUSH_TYPE_GROUP);
        query.setPayload(payload);
        String timestamp = Integer.toString((int)(System.currentTimeMillis() / 1000));
        query.setTimestamp(timestamp);
        appFilterWhere.setWhere(appPushFilterQuery);
        query.setFilter(appFilterWhere);
        query.setProductionMode("false");
        String postBody = JSONObject.toJSONString(query, SerializerFeature.WriteMapNullValue);
        postSendIOS(postBody);
    }

组装数据的类:

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;

/**
 * @author chenhm
 * @date 2022/2/25 17:35
 */
@Data
public class IosAlert {
    @JSONField(name = "title")
    private String title;
    @JSONField(name = "subtitle")
    private String subtitle;
    @JSONField(name = "body")
    private String body;
}

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;

/**
 * @author chenhm
 * @date 2022/2/25 17:31
 */
@Data
public class IosAps {
    @JSONField(name = "alert")
    private IosAlert alert;
}

@Data
public class IosPayload {
    @JSONField(name = "aps")
    private IosAps aps;
}

@Data
public class IosPushQuery {
    @JSONField(name = "appKey")
    private String appKey;
    @JSONField(name = "timestamp")
    private String timestamp;
    @JSONField(name = "type")
    private String type;
    @JSONField(name = "device_tokens")
    private String deviceTokens;
    @JSONField(name = "payload")
    private IosPayload payload;

    @JSONField(name = "production_mode")
    private String productionMode;
    //@JSONField(name = "mipush")
    //private String miPush = "true";
    //@JSONField(name = "mi_activity")
    //private String miActivity = "com.hzx.azq_my.ui.activity.msg.MsgCenterActivity";
    @JSONField(name = "filter")
    private AppFilterWhere filter;
}

/**
 * @author chenhm
 * @date 2021/12/27 14:48
 */
@Data
public class AppFilterWhere {
    private AppPushFilterQuery where;
}

@Data
public class AppPushFilterQuery {

    @JSONField(name = "and")
    private List> and;
}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/993431.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-21
下一篇2022-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存