配置离线推送

更新时间: 2025/11/12 10:28:52

离线推送是指当用户清理掉应用进程(被冻结、主动关闭)、网络不稳定等导致客户端 SDK 无法与云信服务器保持正常连接时,使用手机厂商系统级推送,将主叫用户的呼叫邀请信息推送给被叫用户。本文介绍通过呼叫组件配置离线推送的属性,包括推送标题、推送文案等。

前提条件

已在 IM SDK 实现离线推送

背景信息

  • 呼叫组件不提供推送功能,只支持配置推送消息,离线推送能力由 IM SDK 提供。离线推送的详细配置请参见实现离线推送配置消息的推送属性
  • pushConfigProvidernotificationConfigFetcher 的区别如下:
    • pushConfigProvider 是指在被叫的 App 进程结束时,通过系统推送将主叫用户的呼叫邀请信息推送给被叫用户。主叫用户通过该参数配置离线推送的内容。
    • notificationConfigFetcher 为应用在后台或应用进程存活时,控制展示的 notification,是被叫用户进行修改。

实现方法(V2)

呼叫组件 V2.0 及之后版本,在发起呼叫时,通过呼叫中的参数NECallParam.pushConfig参数,配置离线推送的属性。

示例代码如下:

// 离线推送配置
Map<String,Object> pushPayload = new HashMap<>();
String pushTitle = "离线推送标题";
String pushContent = "离线推送内容";
NECallPushConfig pushConfig = new NECallPushConfig(pushTitle, pushContent, pushPayload);
// 构建呼叫参数
CallParam param = new CallParam.Builder()
  .callType(NECallType.VIDEO)
  .calledAccId("calledAccId")
  // 传入离线推送配置
  .pushConfig(pushConfig)
  .build();
CallKitUI.startSingleCall(this, param);

实现方法 (V1)

呼叫组件 V1.8.2 及之前版本,通过初始化呼叫组件中的 pushConfigProvider 参数,配置离线推送的属性。

以下示例代码为 pushConfigProvider 的一个实例对象。

javanew PushConfigProvider() {
		@Override
		public SignallingPushConfig providePushConfig(InvitedInfo info) {
			return null;
		}
}

其中 SignallingPushConfig 有两个构造函数如下,若推送需要设置 pushPayload 通过 SignallingPushConfig#pushPayload 字段完成设置。

java/**
 * @param needPush    是否需要push
 * @param pushTitle   推送标题
 * @param pushContent 推送内容
 */
public SignallingPushConfig(boolean needPush, String pushTitle, String pushContent)/**
 * @param needPush    是否需要push
 * @param pushTitle   推送标题
 * @param pushContent 推送内容
 * @param pushPayload 推送扩展 ,不需要的话填null
 */
public SignallingPushConfig(boolean needPush, String pushTitle, String pushContent, Map<String, Object> pushPayload)

常见问题

为什么打开应用弹出的总是最新的呼叫邀请?

若用户设置了离线不推送,那么当用户在离线期间收到呼叫,用户将无法感知。若用户设置了离线推送,则会收到呼叫的推送通知。

当您收到通知之后,您可以:

  • 点击系统电话小窗进行接听。

    那么小窗只会显示最新一次的呼叫,点击接听也是接听最新一次呼叫。

  • 不点击推送通知,通过桌面图标打开 App。

  • 点击 Apns 推送通知打开 App。

    虽然都是打开 App,但是根据业务场景的不同,用户需要的实现效果不同。例如收到三个人三次呼叫,用户点击的是第二个人呼叫的通知栏通知。

    但是这里要说明的是,最终打开 App 之后,呼叫组件的逻辑是一样的,只会处理最新一次的呼叫,弹出最新一次呼叫的页面。(注意:如果正处于被叫中的状态,不会再次被叫,只存在呼叫一次取消呼叫或呼叫超时后再被呼叫。)

graph TD
    A[呼叫方1] --> D[被叫方离线]
    B[呼叫方2] --> D
    C[呼叫方3] --> D
    D --> E[被叫方上线]
    E --> F[始终弹出呼叫方3]

为什么收到推送打开应用后未弹出呼叫页面?

多端登录情况下,若只投递一次呼叫:

  • 如果各端都是登录状态,则都能收到呼叫。
  • 如果一端登录一端未登录,登录的一端收到了呼叫,其他端可以收到推送,但是再打开应用后就收不到呼叫邀请的回调了。
graph TD
    A[呼叫方] --> B[设备1在线]
    A --> C[设备2离线]
    B --> D[收到呼叫]
    C --> E[收到推送]
    E --> F[打开应用收不到呼叫]
此文档是否对你有帮助?
有帮助
去反馈
  • 前提条件
  • 背景信息
  • 实现方法(V2)
  • 实现方法 (V1)
  • 常见问题
  • 为什么打开应用弹出的总是最新的呼叫邀请?
  • 为什么收到推送打开应用后未弹出呼叫页面?