1. 程式人生 > 實用技巧 >SpringBoot接入極光推送

SpringBoot接入極光推送

1.使用場景

目前APP中存在上下級關係,需求為下級登入時,上級可收到下級登入的通知。

根據需求,此專案使用別名推送。

2.引入極光推送依賴

        <!--極光推送-->
        <dependency>
            <groupId>cn.jpush.api</groupId>
            <artifactId>jpush-client</artifactId>
            <version>3.2.9</version>
        </
dependency> <dependency> <groupId>cn.jpush.api</groupId> <artifactId>jiguang-common</artifactId> <version>1.1.7</version> </dependency>

3.建立推送工具類

import cn.jpush.api.JPushClient;
import
cn.jpush.api.common.resp.APIConnectionException; import cn.jpush.api.common.resp.APIRequestException; import cn.jpush.api.push.PushResult; import cn.jpush.api.push.model.Message; import cn.jpush.api.push.model.Options; 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 java.util.Map; /** * create by 18865114296 * create on 2021/1/20 */ public class JpushUtils { // 設定app_key和masterSecret private static String APP_KEY = "..."; private static String MASTER_SECRET = "..."; /* * android端推送 * parm引數是Controller層傳來的引數,設定了通知的具體內容 * */ public static void jpushAndroid(Map<String, String> parm) throws APIConnectionException, APIRequestException { //建立JPushClient(極光推送的例項) JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY); //推送的關鍵,構造一個payload PushPayload payload = PushPayload.newBuilder() .setPlatform(Platform.android())//指定android平臺 // .setAudience(Audience.all())//通知全部 即廣播(免費版一天只有10次機會) .setAudience(Audience.alias(parm.get("alias")))//根據別名傳送 // .setAudience(Audience.tag(parm.get("tag")))//根據標籤傳送 // .setAudience(Audience.registrationId(parm.get("id")))//指定使用者傳送 .setOptions(Options.newBuilder().setApnsProduction(true).setTimeToLive(7200).build()) // apnProduction指定開發環境 true為生產模式 false 為測試模式 (android不區分模式,ios區分模式) 不用設定也沒關係 // TimeToLive 快取時間 .setNotification(Notification.android(parm.get("msg"), parm.get("title"), parm)) //傳送通知 .setMessage(Message.content(parm.get("msg")))//自定義資訊 和上一個二選一 當然也可以一起發 .build();//建立 PushResult pushResult = jpushClient.sendPush(payload); System.out.println(pushResult.toString()); } /* * ios端推送 * parm引數是Controller層傳來的引數,設定了通知的具體內容 * */ public static void jpushIOS(Map<String, String> parm) { //建立JPushClient JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY); PushPayload payload = PushPayload.newBuilder() .setPlatform(Platform.ios())//ios平臺 .setAudience(Audience.alias(parm.get("alias"))) // .setAudience(Audience.all())//所有使用者 //.setAudience(Audience.registrationId(parm.get("id")))//registrationId指定使用者 .setNotification(Notification.newBuilder() .addPlatformNotification(IosNotification.newBuilder() .setAlert(parm.get("msg")) .setBadge(+1) .setSound("happy")//這裡是設定提示音 .addExtras(parm) .build()) .build()) .setOptions(Options.newBuilder().setApnsProduction(false).build()) .setMessage(Message.newBuilder().setMsgContent(parm.get("msg")).addExtras(parm).build())//自定義資訊 .build(); try { PushResult pushResult = jpushClient.sendPush(payload); System.out.println(pushResult.toString()); } catch (cn.jpush.api.common.resp.APIConnectionException e) { e.printStackTrace(); } catch (cn.jpush.api.common.resp.APIRequestException e) { e.printStackTrace(); } } /* * android於ios端同時推送 * parm引數是Controller層傳來的引數,設定了通知的具體內容 * */ public static void jpushAll(Map<String, String> parm) { //建立JPushClient JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY); //建立option PushPayload payload = PushPayload.newBuilder() .setPlatform(Platform.all()) //所有平臺的使用者 .setAudience(Audience.registrationId(parm.get("id")))//registrationId指定使用者 .setNotification(Notification.newBuilder() .addPlatformNotification(IosNotification.newBuilder() //傳送ios .setAlert(parm.get("msg")) //訊息體 .setBadge(+1) .setSound("happy") //ios提示音 .addExtras(parm) //附加引數 .build()) .addPlatformNotification(AndroidNotification.newBuilder() //傳送android .addExtras(parm) //附加引數 .setAlert(parm.get("msg")) //訊息體 .build()) .build()) .setOptions(Options.newBuilder().setApnsProduction(true).build())//指定開發環境 true為生產模式 false 為測試模式 (android不區分模式,ios區分模式) .setMessage(Message.newBuilder().setMsgContent(parm.get("msg")).addExtras(parm).build())//自定義資訊 .build(); try { PushResult pushResult = jpushClient.sendPush(payload); System.out.println(pushResult.toString()); }catch (Exception e){ e.printStackTrace(); } }
  
//設定別名
public static void setAlias(String deviceTagAlias, String alias) {
HashSet<String> tagsToAdd = new HashSet<>();
HashSet<String> tagsToRemove = new HashSet<>();
try {
System.out.println(jpushClient.updateDeviceTagAlias(deviceTagAlias, alias, tagsToAdd, tagsToRemove));
} catch (cn.jpush.api.common.resp.APIConnectionException e) {
e.printStackTrace();
} catch (cn.jpush.api.common.resp.APIRequestException e) {
e.printStackTrace();
}
}

//刪除別名
public static void delAlias(String username) {
try {
jpushClient.deleteAlias(username, null);
} catch (cn.jpush.api.common.resp.APIConnectionException e) {
e.printStackTrace();
} catch (cn.jpush.api.common.resp.APIRequestException e) {
e.printStackTrace();
}
}

}