Uni-app 离线推送

大约 5 分钟

Uni-app 离线推送

环信 uni-app 原生推送插件集成了第三方离线消息推送服务, 为开发者提供低延时、高送达、高并发、不侵犯用户个人数据的离线消息推送服务。当客户端断开连接或应用进程被关闭等原因导致用户离线时,即时通讯 IM 会通过第三方消息推送服务向该离线用户的设备推送消息通知。

目前支持的手机厂商推送服务包括:华为、荣耀、小米、OPPO、vivo ,魅族和 APNs。

前提条件

  1. 已开启环信即时通讯服务,详见 开启和配置即时通讯服务
  2. 了解环信即时通讯 IM 的使用限制,详见 使用限制
  3. 你已在 环信即时通讯控制台open in new window即时通讯 > 功能配置 > 功能配置总览页面激活推送高级功能。高级功能激活后,你可以设置推送通知方式、免打扰模式和自定义推送模板。如需关闭推送高级功能必须联系商务,因为该操作会删除所有相关配置。
  4. 各推送使用的条件:
    • 小米推送:在小米设备上可用;
    • 华为推送:在华为设备上可用;
    • 魅族推送:在魅族设备上可用;
    • OPPO 推送:在 OPPO 设备上可用;
    • vivo 推送:在 vivo 设备上可用;
    • 荣耀 推送:在荣耀设备上可用;
    • APNS 推送:在苹果设备上可用。

插件内部会按照以上顺序检测设备的推送支持情况。如果未设置第三方推送或者不满足使用第三方推送的条件,环信 IM SDK 会通过一些保活手段尽可能的保持与环信服务器的长连接,以确保消息及时送达。

实现流程

步骤一 上传推送证书至环信即时通讯控制台

  1. 在第三方推送服务后台注册应用,获取应用信息,开启推送服务。

  2. 环信即时通讯云控制台open in new window配置获取到的应用信息,上传推送证书,实现第三方推送服务与环信即时通讯 IM 的通信。

提示

更多详情,参见 Android 离线推送APNs 离线推送

步骤二 配置 uni-app 应用支持推送插件

  1. 新建 uni-app 工程,并引入环信 uni-app 推送插件open in new window

在你的 uni-app 应用根目录下新建 nativeplugins 文件夹,然后将下载的插件放置于 nativeplugins 文件夹下。如下图所示:

img

提示

华为注册厂商推送服务时,包含 agconnect-services.json 文件。你需下载该文件,并将其放至你的 uni-app 应用根目录下的 nativeplugins/EMPushUniPlugin/android/assets 文件夹下。

  1. 配置 uni-app 项目支持推送。选择 App模块配置,勾选 Push(消息推送)

img

提示

不要勾选 uniPush 1.0 或者 uniPush 2.0

  1. 添加 EMPushUniPlugin 原生插件, 并配置需要推送的第三方厂商应用信息。

img

提示

请配置第三方厂商推送相关信息。

img

  1. 生成自定义基座。

自定义基座是 uni-app 应用运行的底层原生环境。当应用程序使用了原生层插件(如推送插件等),这些插件需要在原生环境中执行,这时就必须打包自定义基座。

提示

  • 制作自定义调试基座:

img

  • 配置 Android 基座打包信息:

img

  • 配置 iOS 基座打包信息:

img

步骤三 集成 EMPushUniPlugin 插件

提示

SDK 4.9.1 及以上版本支持 uni-app 推送。

  1. 安装并引入环信 uni-app SDK。
// 安装环信 SDK
npm install easemob-websdk 
// 在 App.vue 文件中引入 SDK
import websdk from "easemob-websdk/uniApp/Easemob-chat";
  1. 初始化 IM SDK 并集成推送插件。
// 初始化 IM SDK
const conn = websdk.connection({
  appKey: 'xxxxx', // 你的环信 app Key
  isFixedDeviceId: true // 推荐使用固定的设备 ID, SDK 会默认从本地缓存中获取设备ID
});

// #ifdef APP-PLUS
// 引入 EMPushUniPlugin 推送插件
const EMPushUniPlugin = uni.requireNativePlugin('EMPushUniPlugin');

// 配置推送插件
const pushOption = {
    // @ts-ignore
		emPush: EMPushUniPlugin,
    // 配置需要推送的证书名称
		config: {
			MICertificateName: 'xxxxxx', // 小米推送证书名称
			OPPOCertificateName: 'xxxxxx', // oppo 推送证书名称
			HMSCertificateName: 'xxxxxx', // 华为推送证书名称
			VIVOCertificateName: 'xxxxxx',// vivo 推送证书名称
			HONORCertificateName: 'xxxxxx',// 荣耀推送证书名称
			MEIZUCertificateName: 'xxxxxx', // 魅族推送证书名称
			APNsCertificateName: 'xxxxxx', // APNs推送证书名称
		}
}

// 调用 IM SDK 方法,注册推送插件
conn.usePlugin({
  pushOption,
  'push' // 为固定值
})
// #endif

// 如果退出 IM 登录、多设备互踢时, 需要解绑 device token, 可以调用该方法
const unbindPushToken = () => {
  conn.unbindPushToken()
}

// 在 uniapp onLaunch 事件中初始化推送插件
onLaunch(() => {
  // #ifdef APP-PLUS
	EMPushUniPlugin.initPushModule();
  // #endif
});

步骤四 测试离线推送

消息接收方登录 IM 账户后,SDK 会自动上传对应的推送证书, 杀死应用,收到离线消息,能够接收到推送消息。

常见问题

  1. 即时通讯 IM 在哪些情况不会发送离线推送通知?
  • 若应用在后台运行,则用户仍为在线状态,即时通讯 IM 不会向用户推送消息通知。

  • 应用在后台运行或手机锁屏等情况,若客户端未断开与服务器的连接,则即时通讯 IM 不会收到离线推送通知。

  1. 即时通讯 IM 是否支持多设备离线推送?

你可在环信即时通讯控制台open in new window证书管理页面配置多设备推送策略。该策略配置对所有推送通道生效:

  • 所有设备离线时,才发送推送消息;
  • 任一设备离线时,都发送推送消息。