本文收到以下链接,的一部分启发:
http://cn.club.vmall.com/thread-12831573-1-1.html
一、思路:
首先映入眼帘的当然是注册“华为开发者联盟”,然后下载sdk,看文档,添加代码,在开发者联盟填写包名,
填写keystone的SHA2565码,后的appid填入app代码。编译,利用华为网站新建推送,测试推送
这是预想的整个流程, 实际情况在下载sdk的地方就把我搞晕了:
二、首先第一步下载sdk
我被坑了首先映入眼帘的是如下网址:
http://developer.huawei.com/consumer/cn/wiki/index.php?title=%E6%8E%A5%E5%85%A5%E8%AF%B4%E6%98%8E
打开,下载sdk,里面还有示例代码,很全面,然后发现给的示例代码是Eclipse的,用Android Studio 导入功能导入,开始测试
一点反应也没有,什么“获取token”没啥反应(包括在华为服务端填写包名字,越SHA256,生成appid,工程里没有填appid的地方就没有添加,包括包名字自己也改了)
放弃它
三、使用新版的推送库
网站显示有PUSH SDK 和 HMS SDK俩个sdk,说明地址如下:
http://developer.huawei.com/consumer/cn/service/hms/catalog/huaweipush.html?page=hmssdk_huaweipush_devguide
说 push sdk 不再维护
然后就是,按照说明集成新版sdk
http://developer.huawei.com/consumer/cn/service/hms/catalog/huaweipush.html?page=hmssdk_huaweipush_sdkdownload
使用Android Studio 集成,然后在manifest添加文件
http://developer.huawei.com/consumer/cn/service/hms/catalog/huaweipush.html?page=hmssdk_huaweipush_devprepare#3.2%20AndroidStudio%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83
添加java代码:
http://developer.huawei.com/consumer/cn/service/hms/catalog/huaweipush.html?page=hmssdk_huaweipush_devguide
四、添加推送服务
然后在管理中心,添加push服务,添加,包名(需要添加自己的包名,即没有被使用过的),添加自己的keystone的SHA256码,获取到appid添加到manifest里面
开始测试代码:运行,在以下函数获取到了错误代码:
public void onConnectionFailed(ConnectionResult arg0) {
Log.i(TAG, "HuaweiApiClient连接失败,错误码:" + arg0.getErrorCode());
得到的错误代码是1
官网上的错误代码列表部分内容如下:
错误代码:1 ConnectionResult.SERVICE_MISSING 设备上未安装华为移动服务 收到此错误码需要在onConnectionFailed回调中调用resolve处理,具体内容请参见开发指南。
错误代码:2 ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED 设备上安装的华为移动服务需要升级 收到此错误码需要在onConnectionFailed回调中调用resolve处理,具体内容请参见开发指南。
错误代码:6 ConnectionResult.BINDFAIL_RESOLUTION_REQUIRED aidl绑定失败 收到此错误码需要在onConnectionFailed回调中调用resolve处理,具体内容请参见开发指南。
按照提示,安装了“华为移动服务”(本人使用魅族手机)然后得到错误码2,
所以从华为商店下载了最新版本的“华为移动服务”(http://appstore.huawei.com/app/C10132067)
这回得到的错误码是6,没辙了(其实是因为“华为移动服务”没有后台启动权限,下面会讲到)
放弃回家(抱怨华为也不给个HMS SDK的示例代码)
五、找到HMS SDK示例Android Studio demo工程(解决问题的关键)
第二天早晨,打开华为开发者联盟,在里面游走,发现了以下地方(真是的:华为的sdk下载地址有俩个,一个是旧版本,一个新版本,不在一块):
HMS SDK示例Android Studio demo工程(看这篇博客来解决华为推送问题的,直接看在下面这个链接看官方提供的例子吧,如果和我一样,以前没有找到这个地址)
http://developer.huawei.com/consumer/cn/service/hms/catalog/huaweipush.html?page=hmssdk_huaweipush_sample_code_c
这个地址之前居然没有找到:里面有非常棒的例子,
根据提示:需要给“华为移动服务”开启后台启动等之类的权限,然后在魅族的”安全中心“把”华为移动服务“的后台管理权限选择到”允许后台允许“,
示例的代码就可以打开了。
注意:自己运行示例工程的时候需要对代码做一些更改:
1.更改应用的包名,因为要在“华为开发者联盟”里面添加push服务,里面需要填写包名,但是示例代码的包名是被注册过的,不能使用了提示“参数不合法”(又是误导),因此在示例工程里,把所有关于包名的地方都自己改一个名字。
然后在build.gradle里面修改signingConfigs,填入自己所使用的keystone,
2.按照文档说明,生成keystone的SHA256码,然后在“华为开发者联盟”的管理中心添加push服务,填入新的包名和SHA256值,
3.运行示例代码,可以正常获取到keystone和接受到推送
4.使用推送工具推送的时候需要填写,MEID,这个字段,在token可以获取(“关于手机”里面可以看到自己的MEID)