时间比较紧,并未调试。

需求:后端可以针对指定账号或者列表进行通知栏信息推送,优先使用华为通道。点击通知栏消息打开指定activity

后端版本V3,android sdk 3.2.7

一.后端部分代码:

自定义XGPushMessage

public class XGPushMessage {private String title;private String content;private Android  android;public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public Android getAndroid() {return android;}public void setAndroid(Android action) {this.android = action;}
}

自定义一个Action类

public class Action {private int action_type=3;private String activity;private String intent;public int getAction_type() {return action_type;}public void setAction_type(int action_type) {this.action_type = action_type;}public String getActivity() {return activity;}public void setActivity(String activity) {this.activity = activity;}public String getIntent() {return intent;}public void setIntent(String intent) {this.intent = intent;}
}

自定义一个Android类:

public class Android {private Action action;public Action getAction() {return action;}public void setAction(Action action) {this.action = action;}
}

其中Action类是参照信鸽推送官网文档,自己根据实际业务情况自定义的一个bean

"android": {"n_id": 0,"builder_id": 0,"ring": 1,"ring_raw": "ring","vibrate": 1,"lights": 1,"clearable": 1,"icon_type": 0,"icon_res": "xg","style_id": 1,"small_icon": "xg","action": {"action_type": 1,// 动作类型,1,打开activity或app本身;2,打开浏览器;3,打开Intent"activity": "xxx","aty_attr": {// activity属性,只针对action_type=1的情况"if": 0, // Intent的Flag属性"pf": 0  // PendingIntent的Flag属性},"browser": {"url": "xxxx ", // 仅支持http、https"confirm": 1 // 是否需要用户确认},"intent": "xxx" //SDK版本需要大于等于3.2.3,然后在客户端的intent配置data标签,并设置scheme属性},"custom_content": {"key1": "value1","key2": "value2"}}

(幸好我没有用到activity属性,否则真不知道"if"属性在业务类里面该如何声明)

还封装了一个我的后端向信鸽推送提交的消息推送请求的业务Bean:

import java.util.List;public class PushParams {private String audience_type;private String platform;private String message_type;private XGPushMessage message;private List<String> account_list;public String getAudience_type() {return audience_type;}public void setAudience_type(String audience_type) {this.audience_type = audience_type;}public String getPlatform() {return platform;}public void setPlatform(String platform) {this.platform = platform;}public String getMessage_type() {return message_type;}public void setMessage_type(String message_type) {this.message_type = message_type;}public XGPushMessage getMessage() {return message;}public void setMessage(XGPushMessage message) {this.message = message;}public List<String> getAccount_list() {return account_list;}public void setAccount_list(List<String> account_list) {this.account_list = account_list;}
}

然后自己又简单的封装HttpClient工具,用于向信鸽提交请求:

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;import java.io.IOException;public class HttpAsyncClient<T> {public static <T1, T2> T2 postForObject(String url, T1 request,String authorization,Class<T2> responseType) throws Exception {T2 t = null;Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss").disableHtmlEscaping().create();String gStr = doSendData(request);HttpClient client = new DefaultHttpClient();HttpPost httpPost = new HttpPost(url);httpPost.setHeader("Content-type", "application/json; charset=UTF-8");httpPost.setHeader("authorization", "Basic "+authorization);StringEntity entity = new StringEntity(gStr, "UTF-8");httpPost.setEntity(entity);HttpResponse response = client.execute(httpPost);String result = EntityUtils.toString(response.getEntity(), "UTF-8");System.out.println("反回的字符串:" + result);t = gson.fromJson(result, responseType);return t;}}

注意httpclient的参数,

 String authorization

信鸽官网要求请求头包含一个校验内容。信鸽创建应用后会生成APP_ID和SECRET_KEY,请求头校验位就是这两个字段的Base64编码,见信鸽推送文档--RestApi概述----权鉴方式

将HttpClient和校验码生成封装一下并发送请求:

@Component
public class XGApi {@Value("${server.authcation}")private  String authcation;public  XGPushResponse push(PushParams params) throws Exception {byte[] bArr = authcation.getBytes("UTF-8");return HttpAsyncClient.postForObject(XGUrl.URL_PUSH, params, Base64Utils.encodeToString(bArr), XGPushResponse.class);}
}

具体提交推送请求的代码为:

        XGPushMessage xgPushMessage=new XGPushMessage();xgPushMessage.setTitle("标题");xgPushMessage.setContent(“测试消息的内容”);Android android = new Android();Action action = new Action();action.setActivity("com.app.TestActivity");action.setIntent("xgscheme://com.xg.push/notify_detail");android.setAction(action);xgPushMessage.setAndroid(android);PushParams pushParam = new PushParams ();pushParam.setAudience_type("account");pushParam.setAccount_list(account_list);pushParam.setMessage(xgPushMessage);pushParam.setPlatform("android");pushParam.setMessage_type("notify");try {XGPushResponse xgResponse = xgApi.push(pushParam);} catch (Exception e) {e.printStackTrace();}

后端推送api地址:

https://openapi.xg.qq.com/v3/push/app

后端过程完。

Action中的action_type是3(自定义点击通知后的动作).这部分有点模糊,官网说这个字段1代表打开activity,3代表自定义。我是把它设为3,然后同时传activity和intent两个字段值才能实现跳转。

二.android端集成sdk

按照官网说明来,build.gradle添加了信鸽和信鸽华为通道相关依赖

    compile 'com.tencent.xinge:xinge:3.2.7-Release'//jg包compile 'com.tencent.jg:jg:1.1'//wup包compile 'com.tencent.wup:wup:1.0.0.E-release'//mid包compile 'com.tencent.mid:mid:4.0.6-release'/* 华为 3.2.7-release版* 注意:若华为通道使用此版本,则信鸽sdk版本也需要同时使用v3.2.7-Release*/compile 'com.tencent.xinge:xghw:3.2.7-release'

然后启动页onCreate中要初始化

        // 出现  otherPushType = huawei otherPushToken = null 则取消下面一行注释
//        XGPushConfig.setHuaweiDebug(true);//打开第三方推送(为华为通道配置)XGPushConfig.enableOtherPush(getApplicationContext(), true);XGPushConfig.enableDebug(this,true);XGPushManager.registerPush(this, new XGIOperateCallback() {@Overridepublic void onSuccess(Object data, int flag) {//token在设备卸载重装的时候有可能会变Log.d("TPush", "注册成功,设备token为:" + data);xgToken=data+"";switchMainActivity();}@Overridepublic void onFail(Object data, int errCode, String msg) {Log.d("TPush", "注册失败,错误码:" + errCode + ",错误信息:" + msg);switchMainActivity();}});

android端完成

token时信鸽分配的还是android手机本地生成的至今不清楚。

java后台与android端集成信鸽推送和华为推送通道相关推荐

  1. java服务端集成信鸽推送

    java服务端集成信鸽推送 最近项目需要集成推送功能,突发奇想的选了信鸽推送(可能是最近一直在用阿里的东西),没想到这坑不是一般的多,而且关于详细的集成案例,度娘上真是没一个能入眼的.算了,别的不多说 ...

  2. 友盟统计封装android,react native 友盟统计 Android 端集成

    ios 端 可参考:https://www.jianshu.com/p/879d28ee74e6 趁热打铁吧,把刚才已经完成的友盟统计集成记录下 Android端集成: 分下面几部: 步骤 sdk的集 ...

  3. 电信物联网开放平台_NB-IoT业务对接 Java 后台、Android 前端已完成预研

    电信物联网开放平台_NB-IoT业务对接 Java 后台.Android 前端已完成预研 一.NB-IoT : 硬件设备 BC28模组 二.Java 后台: SSH集成电信物联SDK.极光推送SDK. ...

  4. Android端集成支付宝支付

    Android端集成支付宝支付 1.申请账号及配置变量 支付宝快速接入链接点击打开链接 支付宝扫码或者账号密码登录 下面是支付宝给出的接入介绍 第一步:创建应用并获取APPID 要在您的应用中接入支付 ...

  5. Android端集成大疆SDK(MSDK)

    Android端集成大疆MSDK 大疆无人机SDK集成项目 1. 无人机接入准备 2. 编译环境准备 3. 关键代码 4. 项目地址 大疆无人机SDK集成项目 本项目主要是集成大疆SDK,并通过大疆A ...

  6. (4.2.12)浅谈第三方推送[推送基础]:百度推送、小米推送、华为推送

    市面上目前做免费推送服务的有很多,友盟.极光.百度.小米.华为等,由于android机型的多样性,在使用单独的一种推送时,往往会造成一些机型无法获取(当然,内部原因可能很复杂). Android 第三 ...

  7. 微信app支付 java后台接Android

    抽时间整理一下之前项目中的微信app支付,以备以后需要,如果对你可以有点帮助是最好不过的: 直接上代码: public class WeChatAppConfig {/*** 预支付请求地址*/pub ...

  8. 踩坑!android端集成QQ第三方登录

    有时候在想,自己怎么能这么懒,几篇早就想写的博客,一直拖到一两个月后才着手开始写,说实话都有点忘记了,但还是记录一下吧,兴许以后用的到呢~ 回归正题,这次来记录一下我集成QQ三方登录的过程吧(Ps:a ...

  9. 在Java中获取Android端登陆的设备信息

    最近在项目中有个需求,需要获取Android设备的信息,例如:华为,Android10. 可以通过request.getHeader("User-Agent");中来解析出.但是实 ...

最新文章

  1. 创建Maven版Java工程
  2. RT-Thread助力同学们在嵌入式领域乘风破浪
  3. Property list types and their various representations
  4. 根据centos系统启动过程定位故障位置
  5. weblogic占用java_weblogic内存占用过大调优
  6. mysql delete limit用法_你习惯delete语句后带上limit吗
  7. java 的 CopyOnWriteArrayList类
  8. 为全局变量赋值_实例分析如何远离漫天飞舞的全局变量
  9. C#多线程之旅(2)——详解线程的开始和创建
  10. TFS下的源代码控制
  11. Linux Socket通信 C/S模型
  12. 数据库msqlserver的几种类型及解决MSSQLServer服务启动不了的问题
  13. android mvp框架基类,Android MVP架构项目搭建封装,基类封装
  14. clang命令编译c++程序时报错
  15. 回忆——我对方向的选择
  16. 埃斯顿工业机器人控制柜_埃斯顿estun伺服电机动力线MS3108B22-22S BDM-GA14
  17. SpringBoot整合EasyExcel实现Excel表格的导出功能
  18. 2019年任正非给全体华为员工的信
  19. 常用密码技术-对称加密
  20. Latex大括号及多行公式

热门文章

  1. MySQL 条件查询(多条件,模糊查询,范围查询,空值查询),分组查询,分组过滤
  2. 基金理财系列7 之债券和债券基金
  3. linux vim latex,vim使用latex(vimtex+vim-live-preview)
  4. 准备学python用什么电脑_准的解释|准的意思|汉典“准”字的基本解释
  5. 如何计算不同分辨率不同位数的图片所占磁盘空间的大小
  6. Packet Tracer - 配置快速 PVST+
  7. KIE Drools6.4.0.Final(Windows)的安装
  8. macbook加入路由_mac添加路由方法
  9. 魅族史上最漂亮的手机!炒到价也只看不卖,竟是李楠最后的杰作
  10. 雪花算法(snowflake)容器化部署支持动态增加节点