android 调用极光推送SDK设置Tag和Alias工具类——java Web调用极光推送web SDK 发送推送消息工具类

来源:互联网 发布:js 数组合计 编辑:程序博客网 时间:2024/05/17 22:25

写在开头:极光推送集成非常简单,现在项目中主要用来接收推送通知,短信通知,刷新界面,具体集成地址:

http://docs.jiguang.cn/jpush/client/Android/android_guide/


下面是关于调用的一些工具类;

1.Android jpushUtils:基于极光文档api 3.0.7 集成而来



源码:

** * 类名:JPushutils.class * 描述:使用别名 * Created by:刘帅 on 2017/8/24 0024. * -------------------------------------- * 修改内容: * 备注: * Modify by: */public class JPushutils extends JPushMessageReceiver {    public static final String PROJECTNAME = "PB";//极光推送别名    /**     * 设置极光推送app别名     * 用于给某特定用户推送消息。别名,可以近似地被认为,是用户帐号里的昵称 使用标签     * 覆盖逻辑,而不是增量逻辑。即新的调用会覆盖之前的设置。     * @param alias     */    public static void setAlias(Context conn, String alias) {        setJpushAlias(conn,0x1,Validate.isNullTodefault(alias,PROJECTNAME));    }    /**     * 删除极光推送app别名     */    public static void deleteAlias(Context conn) {        deleteJpushAlias(conn,0x2);    }    /**     * 获取极光推送app别名     */    public static void getAlias(Context conn ) {        getJpushAlias(conn,0x3);    }    /**     * 设置标签     * 用于给某一群人推送消息。标签类似于博客里为文章打上 tag ,即为某资源分类。     */    public static void setTags(Context conn,final String[] Tags) {        setJpushTags(conn,0x4,Tags);    }    /**     * 添加标签     */    public static void addTags(Context conn,final String[] Tags) {        addJpushTags(conn,0x5,Tags);    }    /**     * 删除标签     */    public static void deleteTags(Context conn,final String[] Tags) {        deleteJpushTags(conn,0x6,Tags);    }    /**     * 删除所有标签     */    public static void cleanTags(Context conn) {        cleanJpushTags(conn,0x7);    }    /**     * 获取所有标签     */    public static void getAllTags( Context conn) {        getAllJpushTags(conn,0x8);    }    private static void setJpushAlias( Context conn,int sequence,final String alias) {        JPushInterface.setAlias(conn,sequence,alias);    }    private static void deleteJpushAlias(Context conn,int sequence) {        JPushInterface.deleteAlias(conn, sequence);    }    private static void getJpushAlias(Context conn,int sequence) {        JPushInterface.getAlias(conn,sequence);    }    //设置标签    private static void setJpushTags(Context conn,int sequence,final String[] Tags){        Set<String> set = new HashSet<>();        for (int i = 0; i < Tags.length; i++) {            set.add(Tags[i]);        }        JPushInterface.setTags(conn,sequence,set);    }    private static void addJpushTags(Context conn,int sequence,final String[] Tags){        Set<String> set = new HashSet<>();        for (int i = 0; i < Tags.length; i++) {            set.add(Tags[i]);        }        JPushInterface.addTags(conn,sequence,set);    }    private static void deleteJpushTags(Context conn,int sequence,final String[] Tags){        Set<String> set = new HashSet<>();        for (int i = 0; i < Tags.length; i++) {            set.add(Tags[i]);        }        JPushInterface.deleteTags(conn,sequence,set);    }    private static void cleanJpushTags(Context conn,int sequence){        JPushInterface.cleanTags(conn,sequence);    }    private static void getAllJpushTags(Context conn,int sequence){        JPushInterface.getAllTags(conn,sequence);    }    @Override    public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) {        switch (jPushMessage.getSequence()){            case 0x1:                if(jPushMessage.getErrorCode()==0)                    KL.d("设置Alias成功");                else                    KL.d("设置Alias失败");                break;            case 0x2:                if(jPushMessage.getErrorCode()==0)                    KL.d("删除Alias成功");                else                    KL.d("删除Alias失败");                break;            case 0x3:                if(jPushMessage.getErrorCode()==0)                    KL.d("Alias为:"+jPushMessage.getAlias());                else                    KL.d("获取Alias失败");                break;        }        super.onAliasOperatorResult(context, jPushMessage);    }    @Override    public void onTagOperatorResult(Context context, JPushMessage jPushMessage) {        switch (jPushMessage.getSequence()){            case 0x4:                if(jPushMessage.getErrorCode()==0)                    KL.d("设置Tag成功");                else                    KL.d("设置Tag失败");                break;            case 0x5:                if(jPushMessage.getErrorCode()==0)                    KL.d("增加Tag成功");                else                    KL.d("增加Tag失败");                break;            case 0x6:                if(jPushMessage.getErrorCode()==0)                    KL.d("删除Tag成功");                else                    KL.d("删除Tag失败");                break;            case 0x7:                if(jPushMessage.getErrorCode()==0)                    KL.d("删除所有Tag成功");                else                    KL.d("删除所有Tag失败");                break;            case 0x8:                if(jPushMessage.getErrorCode()==0)                    KL.d("获取所有Tag成功,Tags:"+jPushMessage.getTags().toString());                else                    KL.d("获取所有Tag失败");                break;        }        super.onTagOperatorResult(context, jPushMessage);    }

注:因为工具类本身继承自极光推送的一个广播接收器,功能是用于获取Tag和Alias操作是否成功的消息回调。所以要在mainfests文件注册广播接收;

<receiver    android:name=".util.JPushutils"    android:enabled="true"    android:exported="false">    <intent-filter>        <action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />        <category android:name="com.house" />    </intent-filter></receiver>


2.java Web  :jPushUtils


/** * 极光推送服务端实现类 * author:刘帅 * controller 层调用 :  * 方法与说明: *  JPush.getInstance().sendPush(String alert); *  推送消息,如更新,紧急通知等。对象:所有人员,所有设备  *   *  JPush.getInstance().sendPush(String userID, String alert, String mklx); *  推送消息,如通知公告,待审批通知等。 对象:指定人员 注意:调用此方法,需要传入人员 userID,推送内容,模块名称。方便手机端进行模块区分,跳转页面 *   *  JPush.getInstance().sendPush(String userID, String json)  *  推送消息  如:当用户提交一条申请单,服务端处理后,向手机端推送一条消息,手机端借此刷新页面的待办数量。 对象:指定人员 注意:调用此方法,需传入人员 userID,json字符串。   *  json 格式: {"success":"true","items":[{"mklx":"1","dspsl":"3"},{"mklx":"2","dspsl":"3"}]} *   * @整理 by 刘帅 2017年8月10日  */public class JPush {   protected static final Logger LOG = LoggerFactory.getLogger(JPush.class);   private static JPush jpush;   public static JPush getInstance() {//    if (jpush == null)         return new JPush();//    return jpush;   }   /**    * 向全部人员推送    *     * @throws APIRequestException    */   public void sendPush(String alert) {      JPushClient jpushClient = new JPushClient(Params.masterSecret, Params.appKey, null, ClientConfig.getInstance());      // 生成推送的内容      PushPayload payload = buildPushObject_all_all_alert(alert);      try {         System.out.println(payload.toString());         PushResult result = jpushClient.sendPush(payload);         System.out.println(result + "................................");         LOG.info("Got result - " + result);      } 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.error("如果异常在此抛出,原因是:别名还没有在任何客户端SDK提交设置成功。也就是说,目标用户从未登陆过app,首次登录成功以后,就不会抛出此异常了");         LOG.info("HTTP Status: " + e.getStatus());         LOG.info("Error Code: " + e.getErrorCode());         LOG.info("Error Message: " + e.getErrorMessage());         LOG.info("Msg ID: " + e.getMsgId());      }   }         /**    * 向全部人员推送    * @param tags    *              标签名称    * @param alert    *              推送内容    * @param mklx    *           模块类型    */   public void sendPushByTagsone(String tags,String alert,String mklx) {      JPushClient jpushClient = new JPushClient(Params.masterSecret, Params.appKey, null, ClientConfig.getInstance());      // 生成推送的内容      PushPayload payload = buildPushObject_all_tags_alert(tags,alert,mklx);      try {         System.out.println(payload.toString());         PushResult result = jpushClient.sendPush(payload);         System.out.println(result + "................................");         if(200==result.getResponseCode())            System.out.println("推送成功");         else            System.out.println("推送失败");         LOG.info("Got result - " + result);      } 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.error("如果异常在此抛出,原因是:别名还没有在任何客户端SDK提交设置成功。也就是说,目标用户从未登陆过app,首次登录成功以后,就不会抛出此异常了");         LOG.info("HTTP Status: " + e.getStatus());         LOG.info("Error Code: " + e.getErrorCode());         LOG.info("Error Message: " + e.getErrorMessage());         LOG.info("Msg ID: " + e.getMsgId());      }   }   /**    * 构建推送对象:所有android_ios,所有人员,通知内容为 ALERT。附加字段为 mklx——"通知公告"    *     * @return    */   private PushPayload buildPushObject_all_tags_alert(String tag,String alert, String mklx) {      return PushPayload.newBuilder().setPlatform(Platform.android_ios())// 平台:android_ios            .setAudience(Audience.tag(tag))// 标签,这里如果是向指定用户推送事件,需要将用户的标签名称传入            .setNotification(Notification.newBuilder().setAlert(alert)                  .addPlatformNotification(AndroidNotification.newBuilder()                        // .setTitle(TITLE)//android 特有,设置app名称或标题的                        .addExtra("mklx", mklx).build())                  .addPlatformNotification(IosNotification.newBuilder()                        // .setBadge(5)//ios所特有的,用于显示有N条待办事件的                        .addExtra("mklx", mklx).build())                  .build())            .build();   }      /**    * 向指定人员推送    *     * @param userID    *            用户ID    * @param alert    *            推送内容    * @param mklx    *            模块名称    * @throws APIRequestException    */   public void sendPush(String userID, String alert, String mklx) {      JPushClient jpushClient = new JPushClient(Params.masterSecret, Params.appKey, null, ClientConfig.getInstance());      // 生成推送的内容      PushPayload payload = buildPushObject_all_alias_alert(userID, alert, mklx);      try {         System.out.println(payload.toString());         PushResult result = jpushClient.sendPush(payload);         System.out.println(result + "................................");         LOG.info("Got result - " + result);      } 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.error("如果异常在此抛出,原因是:别名还没有在任何客户端SDK提交设置成功。也就是说,目标用户从未登陆过app,首次登录成功以后,就不会抛出此异常了");         LOG.info("HTTP Status: " + e.getStatus());         LOG.info("Error Code: " + e.getErrorCode());         LOG.info("Error Message: " + e.getErrorMessage());         LOG.info("Msg ID: " + e.getMsgId());      }   }   /**    * 向指定用户推送,用于主界面刷新消息数量    *     * @param userID    *            用户ID    * @param json    *            推送内容    * @throws APIRequestException    */   public void sendPush(String userID, String json) {      JPushClient jpushClient = new JPushClient(Params.masterSecret, Params.appKey, null, ClientConfig.getInstance());      // 生成推送的内容      PushPayload payload = buildPushObject_messageWithExtras(userID, json);      try {         System.out.println(payload.toString());         PushResult result = jpushClient.sendPush(payload);         System.out.println(result + "................................");         LOG.info("Got result - " + result);      } 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.error("如果异常在此抛出,原因是:别名还没有在任何客户端SDK提交设置成功。也就是说,目标用户从未登陆过app,首次登录成功以后,就不会抛出此异常了");         LOG.info("HTTP Status: " + e.getStatus());         LOG.info("Error Code: " + e.getErrorCode());         LOG.info("Error Message: " + e.getErrorMessage());         LOG.info("Msg ID: " + e.getMsgId());      }   }   /**    * 构建推送对象:所有平台,所有设备,所有人,内容为 ALERT 的通知。    *     * @return    */   private PushPayload buildPushObject_all_all_alert(String alert) {      return PushPayload.alertAll(alert);// 基本通知   }   /**    * 构建推送对象:所有android_ios,推送目标是别名为 "usirID",通知内容为 ALERT。附加字段为 mklx——"通知公告"    *     * @return    */   private PushPayload buildPushObject_all_alias_alert(String userID, String alert, String mklx) {      return PushPayload.newBuilder().setPlatform(Platform.android_ios())// 平台:android_ios            .setAudience(Audience.alias(userID))// 别名,这里如果是向指定用户推送事件,需要将用户的UserID传入            .setNotification(Notification.newBuilder().setAlert(alert)                  .addPlatformNotification(AndroidNotification.newBuilder()                        // .setTitle(TITLE)//android 特有,设置app名称或标题的                        .addExtra("mklx", mklx).build())                  .addPlatformNotification(IosNotification.newBuilder()                        // .setBadge(5)//ios所特有的,用于显示有N条待办事件的                        .addExtra("mklx", mklx).build())                  .build())            .build();   }   /**    * 构建推送对象:所有android_ios,推送目标是别名为 "usirID",推送内容为json——"{key:1,key:2}"。    *     * @return    */   private PushPayload buildPushObject_messageWithExtras(String userID, String json) {      System.out.println("json====="+json);      return PushPayload.newBuilder().setPlatform(Platform.android_ios())            .setAudience(Audience.alias(userID))// 别名,这里如果是向指定用户推送事件,需要将用户的UserID传入            .setMessage(Message.newBuilder()                  .setMsgContent(json)                  .build())            .build();   }   public class Params {      // 极光推送,注册帐号显示的Key和masterSecret      private static final String appKey = "";      private static final String masterSecret = "";   }}


3.附上接收极光推送消息的广播接收器

/** * 类名:JPushReceiver.class * 描述:极光推送广播接收器 * Created by:刘帅 on 2017/2/9. * -------------------------------------- * 修改内容: * 备注: * Modify by: */public class JPushReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        Bundle bundle = intent.getExtras();        KL.d("[JPushReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle));        if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {            String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);            KL.d("[JPushReceiver] 接收Registration Id : " + regId);            //send the Registration Id to your server...        } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {            KL.d("[JPushReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE));        } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {            KL.d("[JPushReceiver] 接收到推送下来的通知");            int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);            KL.d("[JPushReceiver] 接收到推送下来的通知的ID: " + notifactionId);        } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {            KL.d("[JPushReceiver] 用户点击打开了通知");        } else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) {            KL.d("[JPushReceiver] 用户收到到RICH PUSH CALLBACK: " + bundle.getString(JPushInterface.EXTRA_EXTRA));            //在这里根据 JPushInterface.EXTRA_EXTRA 的内容处理代码,比如打开新的Activity, 打开一个网页等..        } else if(JPushInterface.ACTION_CONNECTION_CHANGE.equals(intent.getAction())) {            boolean connected = intent.getBooleanExtra(JPushInterface.EXTRA_CONNECTION_CHANGE, false);            KL.d("[JPushReceiver]" + intent.getAction() +" connected state change to "+connected);        } else {            KL.d("[JPushReceiver] Unhandled intent - " + intent.getAction());        }    }    // 打印所有的 intent extra 数据    private String printBundle(Bundle bundle) {        StringBuilder sb = new StringBuilder();        for (String key : bundle.keySet()) {            if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)) {                sb.append("\nkey:" + key + ", value:" + bundle.getInt(key));            }else if(key.equals(JPushInterface.EXTRA_CONNECTION_CHANGE)){                sb.append("\nkey:" + key + ", value:" + bundle.getBoolean(key));            } else if (key.equals(JPushInterface.EXTRA_EXTRA)) {                if (bundle.getString(JPushInterface.EXTRA_EXTRA).isEmpty()) {                    KL.d("This message has no Extra data");                    continue;                }            } else {                sb.append("\nkey:" + key + ", value:" + bundle.getString(key));            }        }        return sb.toString();    }}

注:mainfests注册:

<receiver    android:name=".util.JPushReceiver"    android:enabled="true"    android:exported="false">    <intent-filter>        <action android:name="cn.jpush.android.intent.REGISTRATION" />        <!-- Required  用户注册SDK的intent -->        <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />        <!-- Required  用户接收SDK消息的intent -->        <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />        <!-- Required  用户接收SDK通知栏信息的intent -->        <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />        <!-- Required  用户打开自定义通知栏的intent -->        <action android:name="cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK" />        <!-- Optional 用户接受Rich Push Javascript 回调函数的intent -->        <action android:name="cn.jpush.android.intent.CONNECTION" />        <!-- 接收网络变化 连接/断开 since 1.6.3 -->        <category android:name="com.house" />    </intent-filter></receiver>



阅读全文
0 0
原创粉丝点击