tencent cloud

实时音视频

动态与公告
产品动态
产品近期公告
关于 TRTC Live 正式上线的公告
关于TRTC Conference 正式版上线的公告
Conference 商业化版本即将推出
关于多人音视频 Conference 开启内测公告
关于音视频通话 Call 正式版上线的公告
关于腾讯云音视频终端 SDK 播放升级及新增授权校验的公告
关于 TRTC 应用订阅套餐服务上线的相关说明
产品简介
产品概述
基本概念
产品功能
产品优势
应用场景
性能数据
购买指南
计费概述
免费时长说明
月订阅
现收现付
TRTC 逾期与暂停政策
常见问题解答
退款说明
新手指引
Demo 体验
视频通话 SDK
组件介绍
开通服务
跑通 Demo
快速接入
离线唤醒
会话聊天
云端录制
AI 降噪
界面定制
Chat 集成通话能力
更多特性
无 UI 集成
服务端 API
客户端 API
解决方案
错误码表
发布日志
常见问题
视频会议 SDK
组件介绍(TUIRoomKit)
开通服务(TUIRoomKit)
跑通 Demo(TUIRoomKit)
快速接入(TUIRoomKit)
屏幕共享(TUIRoomKit)
预定会议(TUIRoomKit)
会中呼叫(TUIRoomKit)
界面定制(TUIRoomKit)
虚拟背景(TUIRoomKit)
会议控制(TUIRoomKit)
云端录制(TUIRoomKit)
AI 降噪(TUIRoomKit)
会中聊天(TUIRoomKit)
机器人推流(TUIRoomKit)
更多特性(TUIRoomKit)
客户端 API(TUIRoomKit)
服务端 API(TUIRoomKit)
常见问题(TUIRoomKit)
错误码 (TUIRoomKit)
SDK更新日志(TUIRoomKit)
直播与语聊 SDK
Live 视频直播计费说明
组件介绍
开通服务(TUILiveKit)
跑通 Demo
无 UI 集成
UI 自定义
直播监播
视频直播
语聊房
高级功能
客户端 API
服务端 API
错误码
发布日志
常见问题
RTC Engine
开通服务
SDK 下载
API-Example
接入指引
API-参考手册
高级功能
AI 集成
概述
MCP 配置
Skills 配置
集成指南
常见问题
RTC RESTFUL API
History
Introduction
API Category
Room Management APIs
Stream mixing and relay APIs
On-cloud recording APIs
Data Monitoring APIs
Pull stream Relay Related interface
Web Record APIs
AI Service APIs
Cloud Slicing APIs
Cloud Moderation APIs
Making API Requests
Call Quality Monitoring APIs
Usage Statistics APIs
Data Types
Appendix
Error Codes
控制台指南
应用管理
套餐包管理
用量统计
监控仪表盘
开发辅助
解决方案
实时合唱
常见问题
迁移指南
计费相关
功能相关
UserSig 相关
应对防火墙限制相关
缩减安装包体积相关
Andriod 与 iOS 相关
Web 端相关
Flutter 相关
Electron 相关
TRTCCalling Web 相关
音视频质量相关
其他问题
旧版文档
RTC RoomEngine SDK(旧)
集成 TUIRoom (Web)
集成 TUIRoom (Android)
集成 TUIRoom (iOS)
集成 TUIRoom (Flutter)
集成 TUIRoom (Electron)
TUIRoom API 查询
实现云端录制与回放(旧)
监控仪表盘计费(旧)
协议与策略
安全合规认证
安全白皮书
信息安全说明
服务等级协议
苹果隐私策略:PrivacyInfo.xcprivacy
TRTC 政策
隐私协议
数据处理和安全协议
词汇表

会中呼叫提醒(Android&iOS)

PDF
聚焦模式
字号
最后更新时间: 2025-04-01 18:09:04
当您收到一条会中消息后,TUIRoomKit 组件会向您推送会中呼叫提醒消息。本文档将指引您接入 TIMPush 推送插件,以开启会中呼叫提醒功能。

功能介绍

在进行离线推送功能的集成前,请确保已按照官方文档完成 厂商配置,以确保 TUIRoomKit 的离线推送功能正常运行。
TUIRoomKit 接入 TIMPush 推送插件后收到会中呼叫提醒消息的效果如下:
应用在后台时或离线时
锁屏时







功能接入

Android
iOS
1. 请参见推送插件 TIMPush 快速接入文档,完成除步骤6以外的所有步骤(TUIRoomKit 组件内部已经进行会中呼叫的离线消息推送,所以步骤6不需要单独配置)。
2. (可选) 若您想实现点击通知立即拉起被邀请页面,可参考以下代码,注册回调时机建议放在应用 Application 的 onCreate() 函数中:
TUICore.registerEvent(TUIConstants.TIMPush.EVENT_NOTIFY, TUIConstants.TIMPush.EVENT_NOTIFY_NOTIFICATION, new ITUINotification() {
@Override
public void onNotifyEvent(String key, String subKey, Map<String, Object> param) {
if (TUIConstants.TIMPush.EVENT_NOTIFY.equals(key) && TUIConstants.TIMPush.EVENT_NOTIFY_NOTIFICATION.equals(subKey) && param != null) {
String extString = (String) param.get(TUIConstants.TIMPush.NOTIFICATION_EXT_KEY);
try {
JSONObject roomObject = new JSONObject(extString);
String notificationType = roomObject.getString("NotificationType");
if ("conference_invitation".equals(notificationType)) {
login(new TUICallback() {
@Override
public void onSuccess() {
}

@Override
public void onError(int errorCode, String errorMessage) {

}
});
}
} catch (Exception e) {
}
}
}
});

private void login(TUICallback callback) {
int sdkAppId = 您的sdkappid;
String userId = "您的userId";
String userSig = "您的userSig";
TUILogin.login(this.getApplicationContext(), sdkAppId, userId, userSig, new TUICallback() {
@Override
public void onSuccess() {
if (callback != null) {
callback.onSuccess();
}
}

@Override
public void onError(int errorCode, String errorMessage) {
if (callback != null) {
callback.onError(errorCode, errorMessage);
}
}
});
}

1. 集成 TIMPush 组件
pod 'TIMPush', '8.1.6108'
2. 配置推送参数
完成 厂商配置 后,可以在 即时通信 IM 控制台 得到证书 ID。您需要在 AppDelegate 中,实现 offlinePushCertificateID 协议方法并返回证书 ID 。
Swift
OC
import TIMPush

extension AppDelegate: TIMPushDelegate {
func offlinePushCertificateID() -> Int32 {
return kAPNSBusiId
}
}
#import "TIMPush/TIMPushManager.h"

@interface AppDelegate () <TIMPushDelegate>

- (int)offlinePushCertificateID {
return kAPNSBusiId;
}
3. 点击离线推送后拉起被呼叫界面
在默认情况下,点击通知会跳转到 app。您可以参考以下代码实现点击通知立即拉起被呼叫界面,也可以查看 github 中的 SceneDelegate 和 AppDelegate 文件。
如果是冷启动,您需要在 SceneDelegate 中解析通知消息,得到推送消息的 extString。
Swift
OC
import UIKit

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene,
willConnectTo session: UISceneSession,
options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
window = UIWindow(windowScene: windowScene)
let loginVC = YourLoginViewController() // 您自己的登录页面
loginVC.extString = processOfflinePush(connectionOptions: connectionOptions)
let nav = UINavigationController(rootViewController: loginVC)
window?.rootViewController = nav
window?.makeKeyAndVisible()
}

private func processOfflinePush(connectionOptions: UIScene.ConnectionOptions) -> String? {
guard let pushNotification = connectionOptions.notificationResponse?.notification.request.content.userInfo else { return nil }
guard let extString = pushNotification["ext"] as? String else { return nil }
return extString
}
#import "SceneDelegate.h"
#import <UserNotifications/UserNotifications.h>
#import "TUIRoomKit/TUIRoomKit-Swift.h"
#import "TIMDefine.h"

@interface SceneDelegate ()
@end

@implementation SceneDelegate

- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
[self processOfflinePush:connectionOptions];
}

- (void)processOfflinePush: (UISceneConnectionOptions *)connectionOptions {
NSDictionary *pushNotification = connectionOptions.notificationResponse.notification.request.content.userInfo;
NSString *extString = pushNotification[@"ext"];
//将extString传给您自己的登录页面YourLoginViewController
}

@end
在您的登录页面完成 TUICore 的登录,并且判断是否需要跳转到被呼叫界面。
Swift
OC
import TUICore
import TUIRoomKit

//YourLoginViewController 是您自己的登录页面
class YourLoginViewController: UIViewController {
var extString: String?

override func viewDidLoad() {
super.viewDidLoad()
TUILogin.login(Int32(SDKAppID), userID: "yourUserName", userSig: "yourUserSig") { [weak self] in
guard let self = self else { return }
self.navigationController?.pushViewController(YourSelfViewController(), animated: false)
// YourSelfViewController是正常登录后应该显示的您自己的界面
guard let extString = self.extString else { return }
guard let notificationType = dict["NotificationType"] as? String else { return }
// 通过notificationType判断是否为会中呼叫提醒,由此判断是否再拉起被呼叫页面
if notificationType == "conference_invitation" {
InvitationObserverService.shared.show(extString: extString) // 调用此方法以拉起被呼叫界面
}
self.extString = nil
} fail: { (code, errorDes) in
print("code:\\(code), errorDes:\\(String(describing: errorDes))")
}
}
}
#import "YourLoginViewController.h"
#import "TUIRoomKit/TUIRoomKit-Swift.h"
#import "TUILogin.h"

@interface YourLoginViewController ()
@property (nonatomic, strong) NSString *extString;
@end

@implementation YourLoginViewController

- (void)viewDidLoad {
[super viewDidLoad];
[TUILogin login:yourSDKAPPID userID:@"youruserID" userSig:@"yourUserSig" succ:^{
//先显示您自己的界面
//如果extString有值,说明是从离线推送进来的,可以调用showInitationView拉起被呼叫界面
} fail:^(int code, NSString * _Nullable msg) {
}];
// Do any additional setup after loading the view.
}

- (void)showInitationView: (NSString *)extString {
[[InvitationObserverService shared] show:extString];
}
如果是从后台进入前台,需要在 AppDelegate文件中实现 onRemoteNotificationReceived 方法。
Swift
OC
import TUIRoomKit
import TIMPush

@main
class AppDelegate: UIResponder, UIApplicationDelegate, TIMPushDelegate {
var roomId: String?
func onRemoteNotificationReceived(_ notice: String?) -> Bool {
guard let notice = notice else { return false }
guard let dict = convertToDic(string: notice) else { return false }
guard let roomId = dict["RoomId"] as? String else { return false }
if V2TIMManager.sharedInstance().getLoginStatus() == .STATUS_LOGINED {
InvitationObserverService.shared.show(extString: extString) // 调用此方法以拉起被呼叫界面
}
return true
}
}
#import "AppDelegate.h"
#import "TIMPush/TIMPushManager.h"
#import "TUIRoomKit/TUIRoomKit-Swift.h"
#import "TIMDefine.h"

@interface AppDelegate ()<TIMPushDelegate>
@property (nonatomic, strong) NSString *roomId;
@end
@implementation AppDelegate

- (BOOL)onRemoteNotificationReceived:(NSString *)notice {
NSDictionary * dic = [self dictionaryFromString:notice];
NSString * roomId = dic[@"RoomId"];
if (!roomId) {
return false;
}
if ([V2TIMManager sharedInstance].getLoginStatus == V2TIM_STATUS_LOGINED ) {
[[InvitationObserverService shared] show:extString];
}
return true;
}

@end

常见问题

1. 若在集成过程中遇到问题,请务必先查阅 插件推送-常见问题 进行自助排查。
2. 条件说明:部分厂商要求必须上架应用市场才可以正常使用推送服务,详情参见下表:
厂商通道
是否需要上架
账号说明
小米
需要注册企业开发者账号
VIVO
需要注册企业开发者账号
OPPO
需要注册企业开发者账号
荣耀
需要注册企业开发者账号
华为
个人开发者账号即可
魅族
个人开发者账号即可

功能定制

如您需要自定义被呼叫页面的视图,请参考以下路径进行更改:
Android
iOS
// 文件位置:Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/component/

component
└──InvitationReceivedView.java
// 文件位置:iOS/TUIRoomKit/Source/View/ConferenceOptions/ConferenceInvitation

ConferenceInvitation
└── ConferenceInvitationViewController.swift // 被呼叫页面视图
说明:
您在接入或使用过程有任何疑问或者建议,欢迎联系:info_rtc@tencent.com。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈