基於SpringBoot搭建極光推送 Android 和 IOS 消息的簡單Demo

簡要介紹

    極光推送(JPush)是一個端到端的推送服務,使得服務器端消息能夠及時地推送到終端用戶手機上,讓開發者積極地保持與用戶的連接,從而提高用戶活躍度、提高應用的留存率。

概念1:消息 和 通知

  1. 通知:發送後會在系統通知欄收到展現,同時響鈴或振動提醒用戶。 
  2. 消息:以透傳的形式傳遞給客戶端,無顯示,發送後不會在系統通知欄展現,第三方應用後需要開發者寫代碼才能看到。

概念2:alias 和 tag

  1. alias:別名,用於單發消息,點對點方式
  2. tag:標籤,相當於羣發

搭建場景

1,註冊極光賬號,官網https://www.jiguang.cn/accounts/register登錄後進到極光推送功能

2,創建一個應用

 3,創建應用後,獲取到AppKey和Master Secret,後面會用到這兩個

後臺代碼推送其實也就是推送給極光的消息推送服務器,再由服務器推送給設備,這就是需要key和密鑰的原因了

 

4,設置極光推送設置,這裏這配置android,ios好像還需要配置證書什麼的

5,配置Android推送:這裏需要注意,需要下載的是apk包,下載zip包的話需要自己打成apk包

6,手機安裝上面的官方apk包

7,運行上面那個軟件,大概長這樣,點擊第一個按鈕,初始化一下

備註:停止恢復推送功能: 當點擊停止推送 "stopPush" 按鈕時, 推送手機端就不會再接收推送內容, 當點擊恢復推送時, 會將期間積攢的所有推送內容一次性推送到手機中

至此,已經搭建好場景了

 

集成到springboot

1,springboot項目pom引入依賴

        <!-- 極光推送 begin -->
        <dependency>
            <groupId>cn.jpush.api</groupId>
            <artifactId>jpush-client</artifactId>
            <version>3.3.10</version>
        </dependency>
        <dependency>
            <groupId>cn.jpush.api</groupId>
            <artifactId>jiguang-common</artifactId>
            <version>1.1.4</version>
        </dependency>
        <!-- 極光推送 end -->

2,創建JPushUtil類,該類中給出了使用與Android和ios的方法,以及兩者都適用的方法。

根據實際需要自行封裝一些方法方便調用,將創建的AppKey和Master Secret替換一下,或者寫到yml裏

官方:https://github.com/jpush/jpush-api-java-client

/**
 * 極光推送工具類
 * Created by DUYU on 2019/1/17.
 */
public class JPushUtil {
 
    // 設置好賬號的app_key和masterSecret是必須的
    private static String APP_KEY = "fcc67*************ba80d76";
    private static String MASTER_SECRET = "a4c45*************cc0";
 
 
    // 極光推送>>Android
    //Map<String, String> parm是我自己傳過來的參數,可以自定義參數
    public static void jpushAndroid(Map<String, String> parm) {
 
        // 創建JPushClient(極光推送的實例)
        JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY);
        // 推送的關鍵,構造一個payload
        PushPayload payload = PushPayload.newBuilder()
                .setPlatform(Platform.android()) // 指定android平臺的用戶
                .setAudience(Audience.all()) // 你項目中的所有用戶
//                .setAudience(Audience.alias(parm.get("alias"))) // 設置別名發送,單發,點對點方式
                //.setAudience(Audience.tag("tag1")) // 設置按標籤發送,相當於羣發
//                .setAudience(Audience.registrationId(parm.get("id"))) // registrationId指定用戶
 
                .setNotification(Notification.android(parm.get("msg"), parm.get("title"), parm)) // 發送內容
                .setOptions(Options.newBuilder().setApnsProduction(true).setTimeToLive(7200).build())
                // apnProduction指定開發環境 true爲生產模式 false 爲測試模式 (android不區分模式,ios區分模式) 不用設置也沒關係
                // TimeToLive 兩個小時的緩存時間  
                .setMessage(Message.content(parm.get("msg"))) // 自定義信息
                .build();
 
        try {
            PushResult pu = jpushClient.sendPush(payload);
            System.out.println(pu.toString());
        } catch (APIConnectionException e) {
            e.printStackTrace();
        } catch (APIRequestException e) {
            e.printStackTrace();
        }
    }
 
    // 極光推送>>ios
    // Map<String, String> parm是我自己傳過來的參數,可以自定義參數
    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.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 pu = jpushClient.sendPush(payload);
            System.out.println(pu.toString());
        } catch (APIConnectionException e) {
            e.printStackTrace();
        } catch (APIRequestException e) {
            e.printStackTrace();
        }
    }
 
 
 
    // 極光推送>>All所有平臺
    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 pu = jpushClient.sendPush(payload);
            System.out.println(pu.toString());
        } catch (APIConnectionException e) {
            e.printStackTrace();
        } catch (APIRequestException e) {
            e.printStackTrace();
        }
    }
}

3,測試

public class Test {
    public static void main(String[] args) {
        // 設置推送參數
        // 這裏可以自定義推送參數了
        Map<String, String> parm = new HashMap<String, String>();
        // 設置提示信息,內容是文章標題
        parm.put("msg","你知道對我最重要的東西是什麼嗎?是這句話的第一個字");
        parm.put("title","某電商類APP");
        parm.put("alias","alias");
        JPushUtil.jpushAndroid(parm);
    }
}

4,查看極光平臺

5,手機端 

 

簡析

    當採用的是標籤或者別名進行推送,需要在在手機APP端(後端也行)進行標籤和別名設置,一般是在用戶登錄之後就設置好,這樣只要用戶登錄,它的綁定別名或者標籤就可以保存到極光服務器,而我們推送時,指定這個別名或者標籤,就能將信息推送到對應用戶的手機上。

  其實我們發起推送請求,只是將信息發送到了極光服務器之上,這個信息有一個保存時限,默認一天,只要用戶使用手機APP登錄系統,極光服務器就會將信息自動推送到對應別名或者標籤的手機上,由此可見,信息並非由我們後臺直接推送到手機,而是通過極光服務器這個中轉站,而這正式極光的工作。

注意:這裏告知一個技巧:

  1. 在別名設置的時候:其實直接將用戶ID設置爲別名即可,既方便,又安全,不用再去想辦法生成一個唯一的串來進行標識,甚至需要在後臺數據庫中用戶表中新增字段。
  2. 在標籤設置的時候:一般是將一類用戶設置爲一個標籤,然後實現給某類用戶羣發

 

官方文檔

極光官方文檔:https://docs.jiguang.cn/jpush/server/push/rest_api_v3_push/#platform

極光 JPush Java SDK:https://github.com/jpush/jpush-api-java-client

 


參考來源於:

https://blog.csdn.net/vbirdbest/article/details/88971977#commentBox

https://blog.csdn.net/duyusean/article/details/86581475

https://blog.csdn.net/jay_1989/article/details/82771886

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章