uniapp打包app,对接华为厂商,实现unipush离线消息推送

今天终于可以抽出点时间,来记录一下这几天心塞的心情。上周公司派过来一个活,说是使用uniapp制作一个app,同时要实现在线消息推送和离线消息推送,啥话没说就揽了下来。不过说实在的,从来没有开发过app,好歹会点vue。可想而知,接下来的几天总是穿梭于百度搜索、vue官方、uniapp、dcloud等官网,各种资料搜索……最后功能算是做完了,但心情不是很好,踩了好多坑,今天主要记录一下离线消息推送吧,供小伙伴们参考。

项目背景

使用uniapp打包app,与华为厂商对接离线消息推送,本次打包用到的证书主要是在dcloud平台自动生成的,几分钟就可以创建好,如果想要创建自己的Android证书的小伙伴,可以参考一下uniapp官方提供的方法,或者使用Android studio也可以创建证书。

一、dcloud平台应用配置

1、添加应用

这个比较简单,直接贴个图吧。
在这里插入图片描述
2、创建证书
点击我的应用中的应用名称,进入配置应用基本信息,创建Android云端证书等,我的已经创建好。
在这里插入图片描述

二、华为开放平台配置

1、创建华为开发者账号
发布华为app必需得注册一个开发者账号,这个很简单。
2、创建项目
先创建一个项目,顺便开通一些分析之类的权限什么的。
在这里插入图片描述
开通需要的权限,默认都是勾选的。
在这里插入图片描述
在这里插入图片描述
至此,项目就创还能好了。
3、创建应用
进入项目中,点击添加应用即可进入下面的页面。应用包名需要和dcloud中配置的包名同步。
在这里插入图片描述
应用添加成功后,就是下图展示的样子。但是缺少一个sha256证书指纹。
在这里插入图片描述

4、添加SHA256证书指纹【必填】
在这里插入图片描述
我直接在dcloud云端创建的证书,点击证书详情,从里面找到sha256码复制粘贴到下图处即可。
在这里插入图片描述
5、开通推送服务
切换到api管理中开通推送服务。
在这里插入图片描述
6、增长栏目中开通推送服务
点击左侧增长栏目中的推送服务,开通推送服务。后期要创建推送通知和测试离线消息使用。
在这里插入图片描述
7、配置
下方勾选的选项都需要开通。
在这里插入图片描述

三、dcloud平台厂商推送配置

华为端添加证书指纹后需要下载agconnect-services.json文件,将该文件中json数据粘贴到dcloud厂商配置中,见下图。
在这里插入图片描述
在这里插入图片描述

四、Hbuilderx打包并运行

1、下载证书
在dcloud的应用中下载云端证书,要打包用到。
在这里插入图片描述

2、打包自定义基座
打包时必需选择使用自有证书,将上一步下载的证书放在本地指定位置,将路径填写到证书文件处,证书别名和证书私钥密码可以从证书详情中找到。
在这里插入图片描述
至此,所有的配置就完成了。
3、运行到自定义基座
需要通过usb将手机和电脑连通。
注意:
手机必需为华为真机;
pc电脑和华为手机都需要安装华为手机助手连通;
华为手机开启usb调试模式;

五、获取device token

华为端发送消息都是通过token进行推送,此刻需要获取到接收离线消息的设备token。打开dos系统输入下图命令即可捕捉到app的相关信息,其中就有token值。
在这里插入图片描述
注意:先打开dos系统输入上图命令回车运行,再启动运行到手机端的app才能跑出app信息。

六、华为端测试离线消息

1、添加推送通知并测试
拿到device token后进入推送通知中可以测试发送离线消息,如果在上述中可以正常拿到token值,那此处测试发送消息是可以正常接收到的。
在这里插入图片描述
我的测试到此是可以正常接收离线消息的。

七、申请子分类权益

本来以为到上述步骤已经调通了,但还是有个最后小坑。由于华为后台的升级,将推送的消息分为了俩类,即服务与通讯类和营销类。我们开通的账号默认发送的是营销类消息,是有频次限制的。所以我后来将推送通知提交后,后来收不到消息了。这个时候需要申请自分类权益,因为该分类是不限制推送频次的,所以没办法,只能继续搞。
申请自分类权益有条件,小伙伴们需要注意一下。俩种方法:其一、将你的华为应用发布上架才能申请;其二、如果是公司内部的app不准备上线的,可以写个申请发给官方也可以,权益开通后也可以申请。
具体的申请方法我就不写了,将官方地址放出来,大家认认真真的看看就明白了。
自分类权益申请官方地址
自分类申请下来后还需要最后适配一步。

写到最后

从开始发布到最后,历时近三天吧。整体的体验是,写代码不难,大部分时间都花在了研究官方平台上面。中间也咨询了个推官方技术和华为官方技术,感谢吧。
感谢路过的小伙伴们,能百忙中抽出时间阅读本文章,希望能帮助到大家,少踩坑。
如果有写的不正确的地方,也希望大家能积极指正。
点赞、关注加收藏,一键三连行动起来。

  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是华为离线推送参数配置示例: ```java String appId = "yourAppId"; // 应用ID String appSecret = "yourAppSecret"; // 应用秘钥 String tokenUrl = "https://login.cloud.huawei.com/oauth2/v2/token"; // 获取认证Token的URL String apiUrl = "https://api.push.hicloud.com/pushsend.do"; // Push消息下发API String accessToken = null; // 认证Token // 获取认证Token try { HttpClient client = HttpClientBuilder.create().build(); HttpPost post = new HttpPost(tokenUrl); post.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8"); List<NameValuePair> params = new ArrayList<>(); params.add(new BasicNameValuePair("grant_type", "client_credentials")); params.add(new BasicNameValuePair("client_id", appId)); params.add(new BasicNameValuePair("client_secret", appSecret)); post.setEntity(new UrlEncodedFormEntity(params)); HttpResponse response = client.execute(post); String result = EntityUtils.toString(response.getEntity(), "utf-8"); JSONObject jsonObject = new JSONObject(result); accessToken = jsonObject.getString("access_token"); } catch (Exception e) { e.printStackTrace(); } // 发送Push消息 try { HttpClient client = HttpClientBuilder.create().build(); HttpPost post = new HttpPost(apiUrl); post.setHeader("Content-Type", "application/json;charset=utf-8"); post.setHeader("Authorization", "Bearer " + accessToken); JSONObject json = new JSONObject(); json.put("validate_only", false); // 是否只验证消息 json.put("message_type", "notify"); // 消息类型:notify-通知,message-透传消息 json.put("android", new JSONObject().put("hps", new JSONObject().put("msg", new JSONObject() .put("type", 3) // 消息类型:1-透传异步消息,3-通知栏消息 .put("body", new JSONObject() .put("title", "Push Title") // 通知栏消息标题 .put("content", "Push Content") // 通知栏消息正文 .put("badge", 1) // 角标 .put("sound", "default") // 声音 .put("click_action", new JSONObject().put("type", 1) // 点击通知后的行为:1-打开APP首页,2-打开自定义页面,3-打开URL .put("intent", "#Intent;compo=com.rvr/.Activity;S.W=U;end")) .put("extras", new JSONObject() .put("key1", "value1") // 自定义参数 .put("key2", "value2") .put("key3", "value3"))))))); json.put("token_list", new JSONArray().put("yourDeviceToken")); post.setEntity(new StringEntity(json.toString(), "utf-8")); HttpResponse response = client.execute(post); String result = EntityUtils.toString(response.getEntity(), "utf-8"); System.out.println(result); } catch (Exception e) { e.printStackTrace(); } ``` 其中,需要替换的参数有: - `yourAppId`:应用ID - `yourAppSecret`:应用秘钥 - `yourDeviceToken`:设备Token,可通过华为推送服务的SDK获取 另外,需要注意的是,华为推送服务的API与参数可能会有变更,以上代码仅供参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

互联网工匠_草木生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值