java使用別名發送極光推送

pom引用

		<!--極光推送-->
        <dependency>
            <groupId>cn.jpush.api</groupId>
            <artifactId>jpush-client</artifactId>
            <version>3.4.2</version>
        </dependency>
        <!--極光推送-->

工具類

package com.sxapp.message.utils;

import cn.jiguang.common.ClientConfig;
import cn.jiguang.common.resp.APIConnectionException;
import cn.jiguang.common.resp.APIRequestException;
import cn.jpush.api.JPushClient;
import cn.jpush.api.push.PushResult;
import cn.jpush.api.push.model.Platform;
import cn.jpush.api.push.model.PushPayload;
import cn.jpush.api.push.model.audience.Audience;
import cn.jpush.api.push.model.notification.AndroidNotification;
import cn.jpush.api.push.model.notification.IosNotification;
import cn.jpush.api.push.model.notification.Notification;
import com.alibaba.fastjson.JSON;
import com.sxapp.message.dto.JPushContent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Dirk
 * @Date 2019-10-28 10:31
 */
@Component
public class JPushClientUtil {

    private static final Logger log = LoggerFactory.getLogger(JPushClientUtil.class);

    @Value("${push.jg.app.key}")
    private String appKey;

    @Value("${push.jg.master.secret}")
    private String masterSecret;

    public void sendPushToAlias(List<String> alias, JPushContent jPushContent, String title) {
        ClientConfig clientConfig = ClientConfig.getInstance();
        JPushClient jPushClient = new JPushClient(masterSecret, appKey, null, clientConfig);
        try {
            PushResult pushResult = jPushClient.sendPush(PushPayload.newBuilder()
                    // 指定要推送的平臺
                    .setPlatform(Platform.android_ios())
                    // 指定推送的接收對象
                    .setAudience(Audience.alias(alias))
                    //jpush的通知,android的由jpush直接下發,iOS的由apns服務器下發,Winphone的由mpns下發
                    .setNotification(
                            Notification.newBuilder()
                                    .addPlatformNotification(
                                            AndroidNotification.newBuilder()
                                                    .setAlert(title)
                                                    //此字段爲透傳字段,不會顯示在通知欄。
                                                    .addExtra("extra", JSON.toJSONString(jPushContent))
                                                    .build()
                                    )
                                    .addPlatformNotification(
                                            IosNotification.newBuilder()
                                                    .setAlert(title)
                                                    .setSound("default")
                                                    .addExtra("extra", JSON.toJSONString(jPushContent))
                                                    .build()
                                    )
                                    .build()
                    )
                    .build());
            log.info("push result is [{}]", pushResult.toString());
        } catch (APIConnectionException | APIRequestException e) {
            log.error("push fail! [{}]", e.getMessage());
            e.printStackTrace();
        }
    }
}

異步線程處理

package com.sxapp.message.handler;

import com.sxapp.message.dto.JPushRequest;
import com.sxapp.message.utils.JPushClientUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;

/**
 * @author Dirk
 * @Date 2019-12-13 13:56
 */
public class JPushHandler implements Runnable {

    private static final Logger log = LoggerFactory.getLogger(JPushHandler.class);

    private JPushClientUtil jPushClientUtil;

    private JPushRequest jPushRequest;

    public JPushHandler(JPushClientUtil jPushClientUtil, JPushRequest jPushRequest) {
        this.jPushClientUtil = jPushClientUtil;
        this.jPushRequest = jPushRequest;
    }

    @Override
    public void run() {
        List<String> alias = jPushRequest.getAlias();
        int group = alias.size() / 1000;
        for (int i = 0; i <= group; i++) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            jPushClientUtil.sendPushToAlias(alias.subList(1000 * i, Math.min(1000 * (i + 1), alias.size())),
                    jPushRequest.getjPushContent(), jPushRequest.getTitle());
        }
    }
}

調用

	@Resource
    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
    @Resource
    private JPushClientUtil jPushClientUtil;

	public void jPushMessage(JPushRequest jPushRequest) {
        threadPoolTaskExecutor.execute(new JPushHandler(jPushClientUtil, jPushRequest));
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章