uni-app_消息推送_华为厂商_unipush离线消息推送

一、创建项目

  • 打开 Hbuilder 创建一个新项目

uni-app_消息推送_华为厂商_unipush离线消息推送

  • 登录 DCloud 开发者中心,新建一个应用(注意: 上面第一步在 Hbuilder 创建新项目时,如果已经登录了 HBuilder 账号,那么下面这一步可以省略,HBuilder 会自动帮你创建好这个应用)

uni-app_消息推送_华为厂商_unipush离线消息推送

  • 创建好应用应该之后,复制 Appid,打开 manifest.json,将 uni-app 应用标识(Appid) 替换成我们新创建应用的 Appid

uni-app_消息推送_华为厂商_unipush离线消息推送
uni-app_消息推送_华为厂商_unipush离线消息推送

二、生成签名证书

uni-app 安卓证书生成有两种方式,一种是去 DCloud 开发者中心生成证书(下面我们就采用这种方式),另一种是安装 jre 环境,生成证书(参考链接 : https://ask.dcloud.net.cn/article/35777

  • 点击应用名称,
    uni-app_消息推送_华为厂商_unipush离线消息推送
  • 切换至【Android云端证书】,创建证书(生成证书一般需要 1-5 分钟时间)

uni-app_消息推送_华为厂商_unipush离线消息推送

  • 证书生成之后,点击证书详情,复制 MD5、SHA1、SHA256 备用

uni-app_消息推送_华为厂商_unipush离线消息推送

  • 切换至【各平台信息】,点击新增

uni-app_消息推送_华为厂商_unipush离线消息推送

  • 将之前复制 MD5、SHA1、SHA256 填写进去,包名可以自己定义(eg: com.app.uniPush)

uni-app_消息推送_华为厂商_unipush离线消息推送
uni-app_消息推送_华为厂商_unipush离线消息推送

三、开通 unipush 推送服务

  • 在【unipush】-【1.0(老版本)】-【应用信息】,选中我们上面创建的应用,我们这里只测试 Android 平台,所以勾选去掉 IOS,最后点击开通应用;
    uni-app_消息推送_华为厂商_unipush离线消息推送

四、客户端集成

  • 打开项目, 点击 manifest.json,选择【App模块配置】,否选【Push(消息推送)】,uniPush 消息推送图标,大家可自行配置;

uni-app_消息推送_华为厂商_unipush离线消息推送

  • 获取 cid(ClientId:个推业务层中的对外用户标识,用于标识客户端身份,由第三方客户端获取并保存到第三方服务端,是个推 SDK 的唯一识别号,简称 CID)

  • 在应用安装后第一次运行时应该调用 5+ API 的 plus.push.getClientInfoAsync 方法获取客户端标识。

  • 如果获取的 cid 为空,说明客户端向推送服务器注册还未完成,可以使用 setTimeout 延时重试

plus.push.getClientInfoAsync((info) => {
  let cid = info["clientid"];
});

四、制作自定义调试基座

  • 打开项目, 点击 manifest.json,选择【App模块配置】,否选【Push(消息推送)】,uniPush 消息推送图标,大家可自行配置;

uni-app_消息推送_华为厂商_unipush离线消息推送

  • 【运行】-【运行到手机或模拟器】-【制作自定义调试基座】

uni-app_消息推送_华为厂商_unipush离线消息推送

  • 打包需要的信息,都可通过 Dcloud 获取,可参考下的图
    uni-app_消息推送_华为厂商_unipush离线消息推送
  • 【运行】-【运行到手机或模拟器】-【运行到Android App 基座】
    uni-app_消息推送_华为厂商_unipush离线消息推送

五、开发者中心后台Web页面推送(仅支持在线推送)

  • 登录 DCloud 开发者中心,左侧选择【Uni Push】,打开消息推送页面,这里我们直接用 cid 向设备发送消息
  • 需要打开真机,获取到真机上面的 cid(clientid)
  • 当前消息推送仅支持在线推送,当 CID 在线(即 app 在前台打开运行)

uni-app_消息推送_华为厂商_unipush离线消息推送

  • 点击预览,输入cid,点击测试即可
  • 注意:如果提示 cid 不存在或应用错误,CID不存在或不属于此应用,请仔细检查一下 Appid 是否正确,是否有自定义基座,如果之前有安装过相同的应用可以先卸载之前的,重新安装;

uni-app_消息推送_华为厂商_unipush离线消息推送

六、离线消息推送

  • 若需要支持主流 android 厂商客户端接收离线推送,需要完成 :android 多厂商配置,下面以华为应用为例
  • 配置好厂商参数后请一定要提交云打包,并且使用“自有证书”打签名包;将云打包后的安装包安装到手机上,再获取cid 进行离线厂商推送测试,不可使用基座方式获取的 cid 进行离线厂商推送测试

1、创建华为开发者账号

  • 打开 开发华为开发者联盟,注册华为开发者帐号,帐号注册完后,需要完成实名认证才能享受华为开放的各类能力和服务

uni-app_消息推送_华为厂商_unipush离线消息推送

2、开通推送服务

uni-app_消息推送_华为厂商_unipush离线消息推送

  • 确认开通后,还需要在【配置】开通精准推送服务

uni-app_消息推送_华为厂商_unipush离线消息推送

3、创建项目

uni-app_消息推送_华为厂商_unipush离线消息推送uni-app_消息推送_华为厂商_unipush离线消息推送

  • 是否开开通分享服务,可根据需求自行选择uni-app_消息推送_华为厂商_unipush离线消息推送

4、添加应用

  • 在左侧导航栏选择【项目设置】,点击添加应用,将应用添加到我们新创建的项目中

uni-app_消息推送_华为厂商_unipush离线消息推送

uni-app_消息推送_华为厂商_unipush离线消息推送

5、添加SHA256证书指纹

  • 打开 Dcloud,点击证书详情,从里面找到 SHA256 复制粘贴到下图处即可

uni-app_消息推送_华为厂商_unipush离线消息推送

uni-app_消息推送_华为厂商_unipush离线消息推送

6、开通推送服务

  • 切换到【API管理】,开通推送服务

uni-app_消息推送_华为厂商_unipush离线消息推送

7、Dcloud 平台厂商推送配置

  • 下载 agconnect-services.json 文件,将该文件中 json 数据粘贴到 Dcloud 厂商配置中,见下图。

uni-app_消息推送_华为厂商_unipush离线消息推送

uni-app_消息推送_华为厂商_unipush离线消息推送

8、安装 app 到真机

  • 【发行】-【原生App-云打包】详细流程参请考上面的【制作自定义调试基座】

9、华为离线消息测试

uni-app_消息推送_华为厂商_unipush离线消息推送

uni-app_消息推送_华为厂商_unipush离线消息推送

-【 Android 配置】 - 【通知类型】 - initende 内容

intent:#Intent;action=android.intent.action.oppopush;launchFlags=0x14000000;component=安卓包名/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end

  • 华为离线时,收不到消息推送,若厂商信息确认配置无误,那么注意以下两个地方
  1. 核对 Android 应用签名SHA256 是否填写正确

  2. 华为推送信息乱写的时候,是可能不被推送的,可以按照以下格式发送排查下:

    title:订单提醒
    body:您的外卖订单已接单,请耐心等候

10、获取 Device Token 发送消息

  • 华为端发送消息都是通过 token 进行推送,获取接收离线消息的设备 token
  • 打开 Dcloud,【unipush】-【消息推送】-【配置管理】-【故障排查】- 【状态查询】- 输入设备的 cid 即可查询到对应的 Device Token
    uni-app_消息推送_华为厂商_unipush离线消息推送
    uni-app_消息推送_华为厂商_unipush离线消息推送
<think>好的,我现在需要帮助用户解决在uni-app中不依赖UniPush实现消息推送(包括离线推送)的替代方案的问题。首先,我要理解用户的需求。用户希望绕过UniPush,使用其他方法来实现消息推送,特别是离线推送,这可能涉及到不同厂商推送服务以及跨平台的处理。 接下来,我应该回顾一下用户提供的引用内容。引用[1]提到UniPush需要登录DCloud后台,用户觉得麻烦,想要在自己的后台系统直接操作。引用[2]和[3]分别涉及华为和OPPO的离线推送配置,说明用户可能已经了解过厂商特定的方法,但想找到更通用的解决方案。 首先,我需要考虑uni-app的特点,它是一个跨平台框架,支持多个移动端平台,如Android和iOS。消息推送通常需要处理不同平台的推送机制,尤其是离线推送,因为应用在后台或关闭时,需要系统级的支持才能唤醒。 用户希望不依赖UniPush,所以可能的替代方案包括: 1. 使用各厂商推送服务直接集成,比如华为的HMSPush、小米的MiPush、OPPO的Push等。但这样可能需要为每个平台单独配置,增加了开发复杂度。 2. 使用第三方推送服务,如极光推送、个推、阿里云移动推送等。这些服务通常提供统一的API,简化多平台适配,但可能需要集成SDK,并处理各厂商离线通道。 3. 对于iOS,直接使用APNs(Apple Push Notification service),这是官方唯一的推送途径,必须集成。 接下来,我需要考虑如何将这些方案整合到uni-app中。由于uni-app基于Vue.js,并且可以编译到各平台,可能需要使用原生插件或Native.js来调用原生API。或者,寻找支持uni-app的第三方推送库。 另外,离线推送的关键在于各Android厂商推送服务,因为Google的FCM在国内不可用,所以必须对接厂商自己的推送SDK。这需要为每个厂商申请账号,配置应用信息,获取必要的密钥或ID,并在代码中初始化对应的SDK。 还需要处理消息到达后的处理逻辑,比如点击通知栏打开应用特定页面,递参数等。这涉及到Intent配置,如引用[3]中的OPPO推送的Intent格式,可能需要针对不同厂商进行适配。 此外,用户提到要在自己的后台系统推送消息,而不是通过DCloud的后台。因此,需要搭建一个后端服务,调用各推送服务的API发送消息。例如,使用Node.js服务器调用极光推送的API,或者直接调用华为、小米等厂商的HTTP接口。 可能遇到的挑战包括: - 不同厂商推送服务配置流程复杂,需要注册多个开发者账号,上应用信息,处理签名和包名等。 - 需要处理Android和iOS的差异,特别是iOS必须使用APNs,且需要处理证书和权限问题。 - 离线推送的可靠性,各厂商可能有不同的限制和配额,需要考虑消息送达率和稳定性。 - 需要维护多个推送渠道的代码,增加开发和测试的工作量。 可能的解决方案步骤: 1. 选择第三方推送服务(如极光推送)作为主要集成对象,因为它们通常已经集成了各厂商离线通道,减少开发工作量。 2. 在uni-app项目中集成第三方推送的SDK,可能需要使用原生插件,或者通过uni-app的Native.js调用原生方法。 3. 配置各厂商推送服务,如华为、小米、OPPO、vivo等,获取AppID和AppKey,配置到第三方推送平台。 4. 在uni-app中编写代码,初始化推送服务,获取设备标识(如Registration ID),并上到自己的服务器。 5. 搭建后端服务(如Node.js),接收需要推送消息,调用第三方推送服务的API发送通知。 6. 处理客户端收到的推送消息,解析参数并跳转到相应页面。 需要验证这些步骤的可行性,比如查看uni-app是否支持原生插件,或者是否有现成的第三方推送插件可用。例如,极光推送可能有uni-app的插件,或者需要自己封装原生模块。 另外,需要考虑离线推送的配置是否正确,比如华为推送需要上安装包(引用[2]),确保包名和签名一致,否则无法收到推送。对于iOS,需要生成APNs证书,并在推送服务中配置。 总结下来,替代UniPush的方案主要是利用第三方推送服务或直接集成各厂商SDK,配合后端服务发送消息。这需要处理多平台配置、SDK集成、后端开发等工作,但能够实现不依赖UniPush消息推送,包括离线推送。</think>在uni-app中实现不依赖UniPush消息推送(含离线推送),可通过以下方案实现: --- ### 一、主流替代方案 #### 1. **第三方推送服务集成** - **极光推送(JPush)** 支持Android/iOS多平台,集成厂商离线通道(华为、小米等)。需在uni-app中通过原生插件或Native.js调用SDK[^1]。 ```javascript // 示例:初始化极光推送 const jpush = uni.requireNativePlugin('jcore-plugin'); jpush.init(); ``` - **个推(Getui)** 提供uni-app插件,支持离线推送。需在各厂商开放平台注册应用并配置密钥[^2]。 #### 2. **直接对接厂商推送服务** - **华为HMSPush** 需在华为开发者后台配置包名、上APK,并集成HMS Core插件。 - **小米MiPush/OPPO Push等** 分别注册厂商开发者账号,配置推送权限后,通过原生模块调用推送接口。 #### 3. **iOS APNs推送** - 使用苹果开发者账号生成APNs证书,通过后端调用APNs接口发送推送--- ### 二、实现步骤(以极光推送为例) #### 1. **配置推送服务** - 注册极光开发者账号,创建应用并获取`AppKey`。 -华为、小米等厂商后台配置相同包名,启用离线推送。 #### 2. **uni-app端集成** - 安装极光推送原生插件: ```bash npm install jpush-weapp --save ``` - 初始化SDK并获取设备标识: ```javascript // App.vue中初始化 onLaunch() { const JPush = require('jpush-weapp'); JPush.init({ appKey: 'your_app_key' }); JPush.getRegistrationID(res => { console.log('设备标识:', res.registrationId); }); } ``` #### 3. **后端推送消息** - 使用Node.js调用极光API发送推送: ```javascript const axios = require('axios'); axios.post('https://api.jpush.cn/v3/push', { platform: 'all', audience: { registration_id: ['设备标识'] }, notification: { alert: '测试消息' } }, { headers: { Authorization: 'Basic ' + Buffer.from('appKey:masterSecret').toString('base64') } }); ``` #### 4. **处理厂商离线通道** - 华为需在`AndroidManifest.xml`添加配置: ```xml <meta-data android:name="com.huawei.hms.client.appid" android:value="appid=your_huawei_app_id" /> ``` --- ### 三、注意事项 1. **多厂商适配** Android需针对华为、小米、OPPO等分别配置,否则离线推送可能失效[^2][^3]。 2. **iOS证书** APNs需使用生产/开发环境证书,且与App Bundle ID匹配。 3. **推送格式兼容** 厂商通道对通知标题、内容长度有限制(如OPPO标题≤32字符)。 --- ### 相关问题 1. 如何解决Android厂商推送的包名冲突问题? 2. iOS APNs推送证书如何生成和配置? 3. 第三方推送服务如何保证消息的高到达率?
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值