1. 程式人生 > >JAVA SDK 極光推送後臺DEMO

JAVA SDK 極光推送後臺DEMO

pom導依賴

 <properties>
        <comLog.version>1.1.1</comLog.version>
    </properties>

   <dependencies>
       <dependency>
            <groupId>cn.jpush.api</groupId>
            <artifactId>jpush-client</artifactId>
            <version
>
3.2.7</version> </dependency> <dependency> <groupId>cn.jpush.api</groupId> <artifactId>jiguang-common</artifactId> <version>1.0.1</version> </dependency> <dependency> <groupId
>
io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.6.Final</version> <scope>compile</scope> </dependency> <dependency> <groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId> <version>2.3</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.7</version> </dependency> <!-- For log4j --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.7</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>${comLog.version}</version> </dependency> </dependencies>

編寫工具類,比較健全的,一般要用的都寫了

package com.lyt.jpush.api;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

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.PushPayload.Builder;
import cn.jpush.api.push.model.audience.Audience;
import cn.jpush.api.push.model.audience.AudienceTarget;
import cn.jpush.api.push.model.notification.AndroidNotification;
import cn.jpush.api.push.model.notification.IosNotification;
import cn.jpush.api.push.model.notification.Notification;


    /**
     * 
     * @ClassName: MessagePushUtil
     * @Description: (訊息推送工具類)
     * @date 2015年12月22日 下午2:36:45
     *
     */
    public class MsgPushUtils{
    protected static Logger LOG = LoggerFactory.getLogger(MsgPushUtils.class);
//  private static final String MASTER_SECRET = "XXXXXX";
//  private static final String APP_KEY = "XXXXX";
    private static final String MASTER_SECRET = "XXXXXX";
    private static final String APP_KEY = "XXXXXXX";
    private static PushPayload pushPayload ;
//  private static Builder builder; 
//  static {
//  Builder builder = PushPayload.newBuilder();
//  pushPayload = builder
//  .setNotification(Notification.alert(""))
//  .setAudience(Audience.all())
//  .setPlatform(Platform.all())
//  .setOptions(Options.newBuilder().setTimeToLive(0L).build())
//  .build();
//  }
    public static final String BEEN_CONCERNED_ALERT = "";

    public static final String SOUND = "";

    public static final int BADGE = 1;
    /**
     * @throws APIRequestException 
     * @throws APIConnectionException 
    * 
    * @Title: pushMessage 
    * @Description: (推送訊息) 
    * @param @param json
    * @param @return    設定檔案 
    * @return HttpResponse    返回型別 
    * @throws
    */
    public static PushResult sendPush(PushPayload payload) throws APIConnectionException, APIRequestException{
    JPushClient jPushClient = new JPushClient(MASTER_SECRET, APP_KEY);
    return jPushClient.sendPush(payload);
    }

    /**
    * @Title: sendPushTryCatch 
    * @Description: try catch 推送
    * @param @param payload
    * @param @param logger
    * @param @return    設定檔案 
    * @return String    返回型別 
    * @throws 
    */
    public static void sendPushTryCatch(PushPayload payload, Logger logger){
    JPushClient jPushClient = new JPushClient(MASTER_SECRET, APP_KEY);
    try {
    PushResult pushResult = jPushClient.sendPush(payload);
    logger.info("返回結果" + pushResult);
    } catch (APIConnectionException e) {
    logger.error("連線錯誤,稍後嘗試" + e);
    } catch (APIRequestException e) {
    logger.error("極光推送內部錯誤", e);
    logger.info("網路請求狀態" + e.getStatus());
    logger.info("錯誤狀態碼" + e.getErrorCode());
    logger.info("錯誤資訊" + e.getErrorMessage());
    logger.info("資訊ID" + e.getMsgId());
    logger.info("極光推送錯誤資訊:" + e.getErrorMessage());
    }
    }

    /**
    * 
    * @Title: buildPushObjectAllAllAlert 
    * @Description: (快捷地構建推送物件:所有平臺,所有裝置,內容為 alert 的通知) 
    * @param @param alert
    * @param @return    設定檔案 
    * @return PushPayload    返回型別 
    * @throws
    */
    @SuppressWarnings("static-access")
    public static PushPayload buildPushObjectAllAllAlert(String alert) {
       return pushPayload.alertAll(alert);
    }

    /** 
    * @Title: buildPushObjectAliasAlert 
    * @Description: (所有平臺,推送目標是別名為 alias,通知內容為 alert) 
    * @param @param alert
    * @param @param alias
    * @param @return    設定檔案 
    * @return PushPayload    返回型別 
    * @throws 
    */
    public static PushPayload buildPushObjectAliasAlert(String days,String alert, String... alias) {
    Builder builder = PushPayload.newBuilder();
    return builder
    .setPlatform(Platform.android_ios())
    .setAudience(Audience.alias(alias))
    .setNotification(Notification.newBuilder()
    .setAlert(alert)
    .addPlatformNotification(
    AndroidNotification.newBuilder()
    .addExtra("sign", "5")
    .build())
    .addPlatformNotification(IosNotification.newBuilder()
    .addExtra("sign", "5")
    .build())
    .build())
    .setOptions(Options.newBuilder()
            .setApnsProduction(false)
            .setTimeToLive(Long.valueOf(Integer.valueOf(days)*86400))
            .build())
    .build();
    }
    /**
    * 
    * @Title: buildPushObjectIos 
    * @Description: (iOS推送 badge  sound) 
    * @param @param alias
    * @param @param alert
    * @param @param badge
    * @param @return    設定檔案 
    * @return PushPayload    返回型別 
    * @throws
    */
    public static PushPayload buildPushObjectIosAndroid(String days,Map<String, String> params,
        String[] alias, String alert, int badge, String sound, String msgContent) {
           Builder builder = PushPayload.newBuilder();
           return builder
                   .setPlatform(Platform.android_ios())
                   .setAudience(Audience.alias(alias))
                   .setNotification(Notification.newBuilder()
                   .addPlatformNotification(IosNotification.newBuilder()
                   .setAlert(alert)
                   .setBadge(badge)
                   .addExtras(params)
                   .setSound(sound)
                   .build())
                   .addPlatformNotification(AndroidNotification.newBuilder()
                   .setAlert(alert)
                   .addExtras(params)
                   .build())
                   .build())
                   .setMessage(Message.newBuilder()
                   .setMsgContent(msgContent)
                   .build())
                   .setOptions(Options.newBuilder()
                            .setApnsProduction(false)
                            .setTimeToLive(Long.valueOf(Integer.valueOf(days)*86400))
                            .build())
                   .build();
       }

        /** 
        * @Title: buildPushObjectAllAliasAlert 
        * @Description: (所有平臺,推送目標是別名為 alias,通知標題為 title,通知內容為 alert) 
        * @param @param params
        * @param @param alias
        * @param @return    設定檔案 
        * @return PushPayload    返回型別 
        * @throws 
        */
    public static PushPayload buildPushObjectAllAliasAlert(String days,Map<String, String> params, String alert, String title,String... alias) {
        Builder builder = PushPayload.newBuilder();
        return builder
                    .setPlatform(Platform.android_ios()) 
                    .setAudience(Audience.alias(alias))  
                    .setNotification(Notification.newBuilder()  
                            .setAlert(alert)
                            .addPlatformNotification(AndroidNotification.newBuilder()  
                                    .setTitle(title)
                                    .addExtras(params)
                                    .build())  
                            .addPlatformNotification(IosNotification.newBuilder()
                            .addExtras(params)
                                    .build())  
                            .build())  
                    .setOptions(Options.newBuilder()
                            .setApnsProduction(false)
                            .setTimeToLive(Long.valueOf(Integer.valueOf(days)*86400))
                            .build())
                    .build();  
        }


        /** 
        * @Title: buildPushObjectAndroidTagAlertWithTitle 
        * @Description: (平臺是 Android,目標是 tag 為 tag 的裝置,內容是 Android 通知 alert,並且標題為 title) 
        * @param @param tag
        * @param @param alert
        * @param @param title
        * @param @return    設定檔案 
        * @return PushPayload    返回型別 
        * @throws 
        */
    public static PushPayload buildPushObjectAndroidTagAlertWithTitle(String days,String tag, String alert, String title) {
            Builder builder = PushPayload.newBuilder();
            return builder
                    .setPlatform(Platform.android())
                    .setAudience(Audience.tag(tag))
                    .setNotification(Notification.android(alert, title, null))
                    .setOptions(Options.newBuilder()
                            .setApnsProduction(false)
                            .setTimeToLive(Long.valueOf(Integer.valueOf(days)*86400))
                            .build())
                    .build();
        }

        /** 
        * @Title: buildPushObjectIosTagAndAlertWithExtrasAndMessage 
        * @Description: (
        * 構建推送物件:平臺是 iOS,推送目標是 tag, tagAll 的交集,
        * 推送內容同時包括通知與訊息 - 通知資訊是 alert,角標數字為 number,
        * 訊息內容是 msgContent。
        * 通知是 APNs 推送通道的,訊息是 JPush 應用內訊息通道的。
        * APNs 的推送環境是“開發”(如果不顯式設定的話,Library 會預設指定為開發)
        * true 表示推送生產環境,true 表示要推送開發環境 
        *  )
        * @param @param tag
        * @param @param tagAll
        * @param @param number
        * @param @param alert
        * @param @param msgContent
        * @param @return    設定檔案 
        * @return PushPayload    返回型別 
        * @throws 
        */
        public static PushPayload buildPushObjectIosTagAndAlertWithExtrasAndMessage(String days,
        String tag, String tagAll, int number, String alert, String msgContent) {
            Builder builder = PushPayload.newBuilder();
            return builder
            .setPlatform(Platform.ios())
                    .setAudience(Audience.tag_and(tag, tagAll))
                    .setNotification(Notification.newBuilder()
                            .addPlatformNotification(IosNotification.newBuilder()
                                    .setAlert(alert)
                                    .setBadge(number)
                                    .build())
                            .build())
                     .setMessage(Message.content(msgContent))
                     .setOptions(Options.newBuilder()
                             .setApnsProduction(false)
                             .setTimeToLive(Long.valueOf(Integer.valueOf(days)*86400))
                             .build())
                     .build();
        }

        /** 
         * 構建推送物件:平臺是 Andorid 與 iOS,
        * 推送目標是 (tag1 與 tag2 的並集),
        * 推送內容是 - 內容為 msgContent 的訊息
        * @Title: buildPushObjectIosAudienceMoreMessageWithExtras 
        * @param @param tag1
        * @param @param tag2
        * @param @param msgContent
        * @param @return    設定檔案 
        * @return PushPayload    返回型別 
        * @throws 
        */
        public static PushPayload buildPushObjectIosAudienceMoreMessageWithExtras(String days,
        String tag1, String tag2, String msgContent) {
            Builder builder = PushPayload.newBuilder();
            return builder
                    .setPlatform(Platform.android_ios())
                    .setAudience(Audience.newBuilder()
                            .addAudienceTarget(AudienceTarget.tag(tag1, tag2))
                            .build())
                    .setMessage(Message.newBuilder()
                            .setMsgContent(msgContent)
                            .build())
                    .setOptions(Options.newBuilder()
                            .setApnsProduction(false)
                            .setTimeToLive(Long.valueOf(Integer.valueOf(days)*86400))
                            .build())
                    .build();
        }
        /** 
        * @Title: sendAndroidMessageWithAliasAndExtras 
        * @Description: 使用者自定義訊息型別,以及傳遞附屬資訊,傳送給安卓和IOS特定使用者 
        * @param @param extras
        * @param @param title
        * @param @param msgContent
        * @param @param alias
        * @param @return
        * @param @throws APIConnectionException
        * @param @throws APIRequestException    設定檔案 
        * @return PushPayload    返回型別 
        * @throws 
        */
        public static PushPayload sendAndroidAndIosMessageWithAliasAndExtras(String days,Map<String, String>extras,String title, String msgContent, String... alias) 
                throws APIConnectionException, APIRequestException {
                  Builder builder = PushPayload.newBuilder();
                    return builder
                            .setPlatform(Platform.android_ios())
                            .setAudience(Audience.alias(alias))
                            .setMessage(Message.newBuilder()
                                    .setTitle(title)
                                    .setMsgContent(msgContent)
                                    .addExtras(extras)
                                    .build())
                            .setOptions(Options.newBuilder()
                                    .setApnsProduction(false)
                                    .setTimeToLive(Long.valueOf(Integer.valueOf(days)*86400))
                                    .build())
                            .build();
        }

        /** 
        * @Title: sendAndroidMessageWithAlias 
        * @Description: 使用者自定義訊息型別,無附加屬性資訊,傳送給安卓和IOS特定使用者 
        * @param @param title
        * @param @param msgContent
        * @param @param alias
        * @param @return
        * @param @throws APIConnectionException
        * @param @throws APIRequestException    設定檔案 
        * @return PushPayload    返回型別 
        * @throws 
        */
        public static PushPayload sendAndroidAndIosMessageWithAlias(String days,Map<String,String> extras,String title, String msgContent, String... alias) 
                throws APIConnectionException, APIRequestException {
                 Builder builder = PushPayload.newBuilder();
                    return builder
                            .setPlatform(Platform.android_ios())
                            .setAudience(Audience.alias(alias))
                            .setMessage(Message.newBuilder()
                                    .setTitle(title)
                                    .setMsgContent(msgContent)
                                    .addExtras(extras)
                                    .build())
                            .setOptions(Options.newBuilder()
                                    .setApnsProduction(false)
                                    .setTimeToLive(Long.valueOf(Integer.valueOf(days)*86400))
                                    .build())
                            .build();
        }

        /** 
        * @Title: sendAndroidAndIosMessageAndNotification 
        * @Description: 推送訊息和通知,傳送給所有安卓和IOS使用者 
        * @param @param title
        * @param @param alert
        * @param @return    設定檔案 
        * @return PushPayload    返回型別 
        * @throws 
        */
        public static PushPayload sendAndroidAndIosMessageAndNotification(String days,String content,String alert){
            Builder builder = PushPayload.newBuilder();
            return builder
                    .setPlatform(Platform.android_ios())
                    .setNotification(Notification.newBuilder()  
                                    .setAlert(alert)
                                    .build()) 
                    .setMessage(Message.newBuilder()
                                    .setTitle("")
                                    .setMsgContent(content)
                                    .build())
                    .setOptions(Options.newBuilder()
                            .setApnsProduction(false)
                            .setTimeToLive(Long.valueOf(Integer.valueOf(days)*86400))
                            .build())
                    .build();
        }

//      public static void main(String[] args) {
//          try {
//              sendPush(sendAndroidAndIosMessageWithAlias("1", null,"超神了哦", "123456"));
//          } catch (APIConnectionException e) {
//              LOG.error("Connection error. Should retry later. ", e);
//          } catch (APIRequestException e) {
//              LOG.error("Error response from JPush server. Should review and fix it. ", e);
//              LOG.info("HTTP Status: " + e.getStatus());
//              LOG.info("Error Code: " + e.getErrorCode());
//              LOG.info("Error Message: " + e.getErrorMessage());
//          }
//          
//      }
}

與專案整合及運用,本人習慣把它整成一個工具類然後打成JAR包放入需要他的專案中

<dependency>
             <groupId>com.lyt</groupId>
             <artifactId>lytJPush</artifactId>
             <version>0.0.1</version>
        </dependency>
//極光推送自定義訊息
        String title = postInfoService.getPostById(postReview.getPostId()).getTitle();
        if(postReview.getParentId()!=null){
            String pUserId = postReviewDao.select(postReview.getParentId()).getUserId().toString();
            String userName = Base64Util.getFromBase64(userService.getUserInfo(postReview.getUserId()).getNickName());
            String[] alias = {pUserId};
            Map<String,String> parms = new HashMap<>(); 
            parms.put("userId", postReview.getUserId()+"");
            parms.put("postId", postReview.getPostId()+"");
            parms.put("userName", userName);
            parms.put("title", title+"");
            parms.put("type","5");
            try { 
                PushPayload data = MsgPushUtils.sendAndroidAndIosMessageWithAliasAndExtras("10",parms,PushConstant.getModelReviewReply(title), "回覆了您的評論", alias);
                MsgPushUtils.sendPush(data);
            } catch (APIConnectionException e) {
                log.error("Connection error. Should retry later. ", e);
            } catch (APIRequestException e) {
                log.error("Error response from JPush server. Should review and fix it. ", e);
                log.info("HTTP Status: " + e.getStatus());
                log.info("Error Code: " + e.getErrorCode());
                log.info("Error Message: " + e.getErrorMessage());
            }
        }

注意:setApnsProduction(false)

IOS開發者模式的話這個不關閉是搜不到訊息的,IOS對應的值 該為YES
至於安卓則沒有這方面的限制

還有很多設定提示背景音樂啊什麼的這個沒深入研究也就沒弄。

相關推薦

JAVA SDK 極光後臺DEMO

pom導依賴 <properties> <comLog.version>1.1.1</comLog.version> </properties> <dependenci

極光 java 服務端api demo(不使用官方的sdk

極光推送  java 服務端推送api  demo(不使用官方的sdk)1 極光推送的核心類如下:import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import org.asse

java 實現極光

pom檔案需要新增 <dependency>    <groupId>cn.jpush.api</groupId>   <artifactId>jpush-client</artifactId>

Java呼叫極光訊息

在專案開發過程中用到了定時給移動端推送訊息的功能,經過測試發現可以正常使用,程式碼如下 public class JPushManager { // 日誌 private static final Logger log = Logger.getLogger(JPush

極光>>java SDK服務端整合後臺專案

PS:如果你是第一次用推送,那就直接按照我的步驟來,再去看官方文件,這樣,更容易能理解操作流程.還有——-請耐心看 極光文件(java SDK)請參考 步驟一: 上註冊一個賬號 其次,註冊完後登入,選擇極光開發者服務 進去之後,建立

Java後臺伺服器實現極光的兩種實現方式

Java後臺實現極光推送有兩種方式,一種是使用極光推送官方提供的推送請求API:https://api.jpush.cn/v3/push,另一種則是使用官方提供的第三方Java SDK,這裡先進行第一種方式推送的實現程式碼:第一種推送方式:極光官方提供的推送請求APIimpo

Java後臺伺服器實現極光

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import cn.jiguang.common.ClientConfig; import cn.jiguang.common.resp.APIConnect

極光---安卓Demo

ges 網絡 同名 roi sta 復制 ava tro return 對於一個一直幹.net的程序媛來說。冷不丁的讓小編幹安卓,那種感覺就好似小狗狗咬小刺猬一樣,不知道從哪兒開始下手,對於小編來說。既是挑戰更是機遇,由於知識都是相通的。再者來說,在小編的

關於極光Jpush的demo

安卓 lips 介紹 gis 表示 request ice 通知欄 efault 關於極光推送Jpush   推送是手機app必不可少的一樣功能,這次由於公司項目需要研究了一下。由於推送一般寫於服務端,所以對於不會Android的javaweb程序員要寫出一個完整的demo

AndroidStudio離線打包MUI集成JPush極光並在java後端管理

覆蓋 如果 dep record tco mat resource 靜態 pkg 1.AndroidStudio離線打包MUI   如何離線打包請參看上篇隨筆《AndroidStudio離線打包MUI》 2.集成極光推送   官方文檔:https://docs.jig

Android開發之第三方JPush極光知識點詳解 學會整合第三方SDK

下面是一些知識點介紹,後期將會帶領大家進行程式碼實戰: 一、Android實現推送方式解決方案: 1、推送方式基礎知識:    在移動網際網路時代以前的手機,如果有事情發生需要通知使用者,則會有一個視窗彈出,將告訴使用者正在發生什麼事情。可能是未接電話

如何使用極光java服務端向鐳射伺服器進行

第一種:使用官方的sdk直接使用 /** * <pre>專案名稱:bsa-admin-api * 檔名稱:Test.java * 包名:com.bsa.api.jiguang * 建立日期:2018年12月10日下午2:30:19 * Copyright (c

java+maven整合極光服務

       最近有不少想寫想記的東西,可惜最近公司太忙,還有就是我比較懶,一到家裡就不行動了。行了,今天主要是整合極光服務的及時通訊功能,直接記下來好了 我的JAVA專案主要是需要整合極光的推送訊息給android的方,所以可能我只會介紹怎麼給極光推送。

ThinkPHP框架整合極光DEMO

     極光推送(JPush)是獨立的第三方雲推送平臺,致力於為全球移動應用開發者提供專業、高效的移動訊息推送服務。     本篇博文講述如何在將極光推送DEMO整合到ThinkPHP框架中,我使用的是極光推送PHP_DEMO_V3.4.3版本:     1、將極光

極光廣播&指定使用者(Java)

1. 首先先去極光推送註冊一個賬號https://www.jiguang.cn/ 還有一些亂七八糟的自己去看官網,有兩個東西特別的重要  1) AppKey  2) Master Secret 2. 每個人的都不同,注意哦 3. 下面上乾貨 新建一個工具類,我是

Android 使用極光整合、出現問題和後臺保活

今天接入極光推送學習一下,就發現的問題一起探討 主要包含了註冊、接入、sdk版本獲取失敗、後臺保活介紹 接入的時候還是按照官方接入流程,主要就是一下三步 註冊 註冊極光推送賬號 建立應用(記錄自己的appkey) 根據平臺設定推送設定,主要是設定一個包名(這個包名一定要和自

java伺服器端呼叫JPush極光api通知訊息

呼叫JPush推送的api,官網上已經有很詳細的說明了,我只是寫了一個小的demo測試下了! 在極光推送的官網註冊帳號,獲得應用標識(AppKey) , API MasterSecret , apk應用,將apk安裝在手機上並執行, 後臺測試程式碼: package com.zensoftware.

Swift使用極光JPush的Demo

JPushDemo github專案地址 需要匯入JPush框架,可以使用cocoapod匯入,也可以手動匯入 環境配置 配置環境可以參考極光推送的官方文件: 使用說明 待環境配置好了之後,就可以進入極光推送開始推送訊息了 推送

極光JPush java服務端程式碼

public void sendNotificationWirhAlias_Android(String title,String notification,String alias){ try { PushPayload payload = PushPayload

Java-極光

本文寫的是極光推送JAVA後臺程式碼,小弟第一次接觸推送,特此謹記,以備其他同道中人和自己日後之需 首先,POM檔案,以下是極光需要的所有jar包,千萬要記得極光需要slf4j的jar包,必須引入slf4j <dependency>