最近需要使用到华为push,就研究了一下。但是上网搜索了,都说,华为push是一个大坑。我暂且不说遇到的坑,只是说,最基础的集成。我是用的IDE是Android Studio,这里只讲解有关于Android Studio的集成方式,Eclipse大神请绕步。

首先要注册一个账号,进入华为开发者联盟官网, 点击管理中心。

然后进入管理中心页面,我们在选择push服务

我们进入到了push页面,我们就可以做一些操作了。首先创建一个应用。

点击申请push服务,我们可以看到,创建应用时需要写一些信息。

按照自己的项目进行选择创建。需要注意的一点是,我们发现他需要的SHA256证书指纹可以有多个,是因为。你的项目有可能会有多个指纹证书,都可以写在上面。这个SHA256证书指纹不能填写DeBug模式下的指纹。需要的是release模式下的指纹证书。所以,我们需要先进行apk打包。这里我就不多讲述了。

获取SHA256指纹证书我说一下吧。

首先打开cmd命令窗口。找到我们的keystore文件。也就是jks文件,输入命令keytool -list -v -keystore 你的jks文件名.jks

如果输入成功按下回车,会让你输入密码,但是输入密码时是无状态的,就输入生成jks文件的密码就行。然后你就能得到你的SHA256证书指纹了。

完成以上才是完成了第一步,在平台创建应用。

下面再看华为文档。不得不说,如果一步一步按文档集成还是很靠谱的,就是有时候,你不知道它想表达些什么,可能我理解能力有限,嘿嘿。我们先下载文档提供的SDK。SDK入口随处可见,在你的PUSH页面,创建好的应用上方有几个选项,我们选择SDK下载。会发现,进入了消息推送服务文档中心。我们就根据文中心,一步一步的集成华为push。

先下载SDK,这里是新版SDK,由于旧版的不在维护,我们就不做集成讲解。

下载过后,你会得到一个HMSAgent_2.6.3.301文件夹,打开它

你会看到这么几个文件。点击运行GetHMSAgent_cn.bat程序,根据提示一步一步集成

首先输入包名,包名在你的AndroidManifest.xml文件中就能得到。appid是你在华为push服务平台上创建的应用的appid

cpid,我们可以不用填,那是在集成游戏和支付时,才会使用到的。

我们只需要集成push服务,其它的都选择0就可以,按任意键结束后,打开copysrc文件夹。一直往里点,我们会得到如下文件。

这就是我们所需要的PUSH服务SDK了。将其copy到我们的工程中去,由于位置不同,我们需要再我们的项目中,将这些文件中的导包路径修改一下,是个体力活。

修改完成,确认无报错的情况下,我们再看文档。

我们还需要在我们的IDE里面添加仓库路径,我使用的是Android Studio。Eclipse我暂时还没有使用。

在项目的gradle里面写上如上路径

在app.gradle里填写依赖

 dependencies {compile 'com.huawei.android.hms:push:{version}'         }        

说明:{version} 替换为实际的版本号,如:compile 'com.huawei.android.hms:push:2.6.3.301'

更多在往下看有接入准备、开发准备、开发指南。都有详细的集成开发说明。

我们是做Android的,所以进入客户端开发指南,服务端请移步服务端开发指南。

首先会进行一个功能说明,我们往下看,会看到一个新旧版本的SDK对比。我说过,它的旧版的SDK已不在维护,我就不多做讲解了。还能看到华为PUSH支持的国家和地区。因为它是华为提供的push服务,在其它品牌的手机上无法使用。它只支持emui4.1以上的版本。其它的它不支持。再往下看就是正文了。

注:以下均为华为push推送服务客户端开发指南文档资料。

第一步,初始化Agent。

1.1 调用init接口

在application的onCreate方法中初始化HMSAgent。如果没有自己的application类,请创建并在manifest文件中配置application节点的name属性。

示例代码如下:

public class MyApplication extends Application {@Overridepublic void onCreate() {        super.onCreate();HMSAgent.init(this);}
}   

1.2 调用connect接口

建议在应用启动时调用Connect。
示例代码如下:

HMSAgent.connect(this, new ConnectHandler() {@Overridepublic void onConnect(int rst) {showLog("HMS connect end:" + rst);}
});    

第二步 申请Push token

2.1 场景介绍

通过调用getToken接口向服务端请求应用的唯一标识——Device Token,Push服务端根据这个token发送推送消息。每个设备的上每个应用的Token都是唯一存在。您可以在自定义广播中的onToken方法接收返回的token字符串,并且将token上报到自己的应用服务器维护这些已申请的token列表,然后调用Push服务器的推送消息接口,根据token批量推送消息。

2.2受限说明

getToken接口只有在服务端开通了Push服务申请token才会返回成功。目前仅中国区和部分海外地区支持开通push服务

目前华为推送支持的地区有(支持的地区后期可能有所增加):
       中国大陆,泰国, 越南 ,中国香港 ,中国台湾 ,柬埔寨 斯里兰卡,印度,中国澳门,新加坡,马来西亚,澳大利亚,新西兰,菲律宾,印度尼西亚,孟加拉国。
        约旦,埃及,阿尔及利亚,马里,也门,乍得,塞内加尔,突尼斯,阿拉伯联合酋长国,阿曼,巴基斯坦,巴林,卡塔尔,科威特,沙特阿拉伯,伊拉克。
        墨西哥,委内瑞拉,哥伦比亚,厄瓜多尔,危地马拉,尼加拉瓜,萨尔瓦多,洪都拉斯,哥斯达黎加,巴拿马,多米尼加共和国,牙买加,波多黎各,阿根廷,玻利维亚,巴拉圭,秘鲁,乌拉圭,智利。
        南非,卢旺达,安哥拉,博茨瓦纳,布隆迪,津巴布韦,肯尼亚,马达加斯加,马拉维,毛里求斯,坦桑尼亚,乌干达,赞比亚,尼日利亚,加纳,喀麦隆,象牙海岸,刚果(金)。
        阿尔巴尼亚,奥地利,比利时,荷兰,葡萄牙,挪威,爱尔兰,意大利,法国,德国,西班牙,瑞典,英国,芬兰,希腊,冰岛,波兰,罗马尼亚,塞尔维亚,斯洛文尼亚,斯洛伐克,黑山,克罗地亚,保加利亚,列支敦士登,卢森堡,马耳他,科索沃,拉脱维亚,丹麦,爱沙尼亚,立陶宛,波斯尼亚和黑塞哥维那,匈牙利,马其顿,摩尔多瓦,捷克共和国,塞浦路斯。

注意:getToken接口在非中国区发货设备或非华为手机上首次调用时,会显示华为Push用户协议条款界面(如下图)。建议在Activity页面里再调用getToken接口。

中国区发货的华为设备不会显示该协议条款界面。

2.3 业务流程

2.4 开发步骤

申请token会触发启动Push服务,token申请成功后,结果会通过广播的方式返回token给应用。调用getToken方法发起请求,返回申请token的PendingResult对象,根据对象可以获取接口调用是否成功,但是不直接返回token 结果。

接口详细定义请参见getToken,申请token的示例代码如下:

/*** 获取token*/
private void getToken() {showLog("get token: begin");HMSAgent.Push.getToken(new GetTokenHandler() {@Overridepublic void onResult(int rtnCode, TokenResult tokenResult) {showLog("get token: end" + rtnCode);}});
}    

调用getToken接口后通过广播接收token值
       下面的示例代码实现如何处理onToken接口来获取push token。CP需要将token妥善的保存起来。如果CP自己实现了调用华为PUSH服务器端接口发送推送消息,那么可以推送消息到指定的Token用户。如果有涉及到在客户端和服务器之前传输Token,请确保Token的安全。

public class HUAWEIPushRevicer extends PushReceiver {@Overridepublic void onToken(Context context, String token, Bundle extras) {}
}   

3 注销 token

3.1 场景介绍

应用调用注销TOKEN接口成功之后,客户端就不会再接收到PUSH消息。

3.2 受限说明

建议APP集成时暂时不要依赖deleteToken接口;如果应用要实现注销TOKEN后不接收PUSH消息,需要自行上报失效TOKEN到应用自己的服务器,并且在推送消息时判断是失效TOKEN就不进行推送。

注意:该接口只在华为手机并且EMUI版本号不低于5.1的版本上才起作用,即只在EMUI5.1以及更高版本的华为手机上调用该接口后才不会收到PUSH消息。
在非华为手机上则必须满足HMS版本不低于2.5.0。

3.3 开发步骤

调用注销token接口,实现注销token的示例代码如下:

/*** 删除token | delete push token*/
private void deleteToken(){showLog("deleteToken:begin");HMSAgent.Push.deleteToken(token, new DeleteTokenHandler() {@Overridepublic void onResult(int rst) {showLog("deleteToken:end code=" + rst);}});
}

4 获取push连接状态

4.1 场景介绍

查看Push通道是否已连接,结果会通过自定义广播里的onPushState方法返回。

4.2 受限说明

此接口在之后的版本中会逐渐废弃,请业务谨慎使用。

4.3 开发步骤

4.3.1 调用查询Push连接状态接口

实现查询PUSH连接状态的示例代码如下:

 /*** 获取push状态 | Get Push State*/private void getPushStatus() {showLog("getPushState:begin");HMSAgent.Push.getPushState(new GetPushStateHandler() {@Overridepublic void onResult(int rst) {showLog("getPushState:end code=" + rst);}});}  

4.3.2 通过广播接收Push连接状态

下面的代码示例代码实现如何处理onPushState接口。
       当push处于连接状态的时候,才能正常接收push消息。

public class HuaweiPushRevicer extends PushReceiver {private static final String TAG = "HuaweiPushRevicer";public static final String ACTION_UPDATEUI = "action.updateUI";public static final String ACTION_TOKEN = "action.updateToken";private static List<IPushCallback> pushCallbacks = new ArrayList<IPushCallback>();private static final Object CALLBACK_LOCK = new Object();public interface IPushCallback {void onReceive(Intent intent);}public static void registerPushCallback(IPushCallback callback) {synchronized (CALLBACK_LOCK) {pushCallbacks.add(callback);}}public static void unRegisterPushCallback(IPushCallback callback) {synchronized (CALLBACK_LOCK) {pushCallbacks.remove(callback);}}@Overridepublic void onToken(Context context, String tokenIn, Bundle extras) {String belongId = extras.getString("belongId");Intent intent = new Intent();intent.setAction(ACTION_TOKEN);intent.putExtra(ACTION_TOKEN, tokenIn);callBack(intent);intent = new Intent();intent.setAction(ACTION_UPDATEUI);intent.putExtra("log", "belongId is:" + belongId + " Token is:" + tokenIn);callBack(intent);}@Overridepublic boolean onPushMsg(Context context, byte[] msg, Bundle bundle) {try {//CP可以自己解析消息内容,然后做相应的处理 | CP can parse message content on its own, and then do the appropriate processingString content = new String(msg, "UTF-8");Intent intent = new Intent();intent.setAction(ACTION_UPDATEUI);intent.putExtra("log", "Receive a push pass message with the message:" + content);callBack(intent);} catch (Exception e) {Intent intent = new Intent();intent.setAction(ACTION_UPDATEUI);intent.putExtra("log", "Receive push pass message, exception:" + e.getMessage());callBack(intent);}return false;}public void onEvent(Context context, Event event, Bundle extras) {Intent intent = new Intent();intent.setAction(ACTION_UPDATEUI);int notifyId = 0;if (Event.NOTIFICATION_OPENED.equals(event) || Event.NOTIFICATION_CLICK_BTN.equals(event)) {notifyId = extras.getInt(BOUND_KEY.pushNotifyId, 0);if (0 != notifyId) {NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);manager.cancel(notifyId);}}String message = extras.getString(BOUND_KEY.pushMsgKey);intent.putExtra("log", "Received event,notifyId:" + notifyId + " msg:" + message);callBack(intent);super.onEvent(context, event, extras);}@Overridepublic void onPushState(Context context, boolean pushState) {Intent intent = new Intent();intent.setAction(ACTION_UPDATEUI);intent.putExtra("log", "The Push connection status is:" + pushState);callBack(intent);}private static void callBack(Intent intent) {synchronized (CALLBACK_LOCK) {for (IPushCallback callback : pushCallbacks) {if (callback != null) {callback.onReceive(intent);}}}}}

集成如上,基本上就ok了。注意,你需要安装release类型的apk才行,因为你的keystore证书指纹是release类型的。

可以查看push连接状态,根据返回的结果码判断是否成功集成。查看错误通用码。返回0说明连接成功了,可以自己试着去平台发送一条信息试一下。token是你的广播的onToken方法返回的,需要稍等片刻才能看到,毕竟心急吃不了热豆腐嘛,嘿嘿。

简单集成华为PUSH相关推荐

  1. 超简单集成华为HMS Core MLKit 机器学习服务银行卡识别SDK,一键实现银行卡绑定

    前言 小编前面几期文章分别给大家介绍了使用HMS ML Kit SDK实现微笑抓拍.证件照DIY.拍照翻译的功能开发(链接见文章末尾),本次小编给大家带来的是使用HMS 机器学习服务(ML Kit)银 ...

  2. 超简单集成华为HMS Core MLKit通用卡证识别SDK,一键实现各种卡绑定

    标题前言 华为HMS MLKit提供的服务越来越多了,除常见的了银行卡识别的功能,大家可能还会疑问日常生活中的银行卡,会员卡可以识别吗,或者某一类证件号识别?也没有问题~但因为不同商家的卡号位置,版面 ...

  3. 超简单集成华为HMS Scankit扫码SDK实现扫一扫二维码

    前言 查看华为开发者联盟网站的机器学习服务业务介绍(https://developer.huawei.com/consumer/cn/doc/development/HMS-Guides/ml-int ...

  4. Android集成Huawei PUSH(一)——华为推送服务简介

    Android集成Huawei PUSH(一)--华为推送服务简介 一.华为推送服务简介 华为推送服务(Huawei PUSH)是华为为开发者提供的消息推送平台,创建了一条从云端到用户客户端的消息推送 ...

  5. Android项目中集成华为账号登录、支付

    最近项目中集成了华为账号登录与支付的功能,把踩过的坑和过程记录下来. 先看下支付效果图: 支付价格0.01请忽略,因为这是为了测试用的. 刚开始接到这个项目的时候我很奇怪,为什么要集成华为支付呢,原有 ...

  6. Android 推送集成华为,小米,友盟

    公司的 app 一直使用的是极光推送,最近反馈比较多的是推送消息收不到,看来需要找新的推送服务了,在国内目前手机品牌占有率比较多的是华为和小米,且这两家都有自己的推送服务,同时一个合作的友商说他们使用 ...

  7. Android - 集成华为推送

    Android ~ 集成华为推送 功能流程如下图所示: 开发流程 一.配置AppGallery Connect 1.注册成为开发者 注册 实名认证 2.创建应用 创建项目 在项目下添加应用 3.生成签 ...

  8. 【转载】超简单集成HMS ML Kit 人脸检测实现可爱2D贴纸

    文章目录 前言 场景 开发前准备 在项目级gradle里添加华为maven仓 在应用级的build.gradle里面加上SDK依赖 在AndroidManifest.xml文件里面申请相机.访问网络和 ...

  9. java集成华为推送

    集成华为推送 这类推送一般官方文档都比较详细,如果想要更加详细的了解建议查看官方文档. 官方文档地址:https://developer.huawei.com/consumer/cn/service/ ...

  10. 超简单集成HMS ML Kit二代身份证识别,一键实名认证

    前言 就在近期华为HMS ML Kit 发布了1.0.3.30版本,ML Kit在原有通用OCR功能的基础上,又新增了银行卡识别(BCR)和二代身份证识别(ICR).今天小编就给大家介绍一下其中的IC ...

最新文章

  1. Java实现用时间戳重命名上传的文件
  2. php赋值给jq,jquery怎么给div赋值
  3. idea连接sqlserver及数据库操作
  4. ubuntun 16.04环境安装Caffe过程
  5. 从零开始实现数据结构(一) 动态数组
  6. Maple:把计算结果保存出来
  7. POJ 2492 A Bug's Life (带权并查集 向量偏移)
  8. 新入行的包工头,一定做好下面几点
  9. Docker 基础技术之 Linux namespace 详解
  10. GRE tunnel ×××
  11. Java 阶乘(BigInteger)
  12. 重装系统找不到固态_安装Win10系统没有固态硬盘(双硬盘找不到固态硬盘)怎么解决?...
  13. IDEA导入Eclipse的快捷键KeyMap
  14. Android rom开发:recovery取消校验Vbmeta version和framework matrix
  15. 【量化选基】中证500指数增强比300增强好吗?
  16. ASIHTTPRequest类库的简单介绍
  17. 程序员成长之路(Day 12)
  18. 今日头条 ANR 优化实践系列分享 - 实例剖析集锦
  19. C51汇编语言寻址方式,80C51单片机指令系统的7种寻址方式
  20. 用Arduino读取HX711应变片专用模块

热门文章

  1. ddm模型公式_股利增长模型计算公式
  2. 机器学习(周志华)学习笔记(二)
  3. 基于vue的电商后台管理系统
  4. html 中 div 盒子上下垂直居中显示
  5. 大华NVR WEB界面把玩
  6. 将高分三号中的SAR图可视化处理
  7. 根据卡号查询银行卡信息
  8. 浅谈 MyBatis 缓存
  9. css 左右居中和上下垂直居中
  10. MFC学生信息管理系统