| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- // Copyright (c) 2023 Tencent. All rights reserved.
- #ifndef SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_OFFLINE_PUSH_MANAGER_H_
- #define SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_OFFLINE_PUSH_MANAGER_H_
- #include "TIMCloudDef.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- // 模块简介
- // * -离线推送接口,用于支持离线推送功能
- //
- // 模块参数说明
- // * -API 的参数采用 json 字符串格式,请使用文件中预先定义的 JsonKey 进行参数传递和解析
- // * -如果参数中包含非英文字符,请使用 UTF-8 编码
- //
- // 模块回调说明
- // 1. 回调的类型:
- // * -调用 API 时传入的 TIMCommCallback 回调,用于异步返回 API 的调用结果
- // * -调用 TIMSetXXXCallback 设置的全局回调,用于接收后台推送的通知
- // 2. 回调触发的线程:
- // * -对于 Windows 平台,当在主线程中调用 @ref TIMInit 接口时,SDK 会将所有回调抛到主线程,请确保主线程已创建消息循环;否则,回调将在 SDK 内部的逻辑线程触发
- // * -对于 Android 平台,当调用 @ref TIMInit 接口的线程支持消息循环时,SDK 会将所有回调抛到该线程;否则,回调将在 SDK 内部的逻辑线程触发
- // * -对于 iOS 和 MAC 平台,SDK 默认将所有回调抛到主线程
- // * -对于 Linux 平台,暂不支持将回调抛到主线程,回调将在 SDK 内部的逻辑线程触发
- /////////////////////////////////////////////////////////////////////////////////
- //
- // 一. 离线推送相关配置选项定义
- //
- /////////////////////////////////////////////////////////////////////////////////
- // 1.1 离线推送注册的 token 类型
- enum TIMOfflinePushTokenType {
- // 默认厂商 token, 例如 APNS/小米 push/Huawei push 等
- TIMOfflinePushTokenType_Default = 0,
- // TPNS
- TIMOfflinePushTokenType_TPNS = 1,
- // VoIP push
- TIMOfflinePushTokenType_VOIP = 2,
- };
- // 1.2 iOS 离线推送的类型
- enum TIMIOSOfflinePushType {
- // 普通的 APNs 推送
- TIMIOSOfflinePushType_APNS = 0,
- // VoIP 推送
- TIMIOSOfflinePushType_VOIP = 1,
- };
- // 1.3 Android 离线推送模式
- enum TIMAndroidOfflinePushNotifyMode {
- // 普通通知栏消息模式,离线消息下发后,点击通知栏消息直接启动应用,不会给应用进行回调
- kTIMAndroidOfflinePushNotifyMode_Normal,
- // 自定义消息模式,离线消息下发后,点击通知栏消息会给应用进行回调
- kTIMAndroidOfflinePushNotifyMode_Custom,
- };
- // 1.4 推送规则
- enum TIMOfflinePushFlag {
- // 按照默认规则进行推送
- kTIMOfflinePushFlag_Default,
- // 不进行推送
- kTIMOfflinePushFlag_NoPush,
- };
- /////////////////////////////////////////////////////////////////////////////////
- //
- // 二. 离线推送相关 API
- //
- /////////////////////////////////////////////////////////////////////////////////
- /**
- * 2.1 设置离线推送配置信息(iOS 和 Android 平台专用)
- *
- * @param json_token 离线推送配置 Json 字符串, Json Key 请参考 @ref OfflinePushToken。注意 kTIMOfflinePushTokenToken 字段要填写为设备 Token 的 hex 字符串(即 base16 编码)。
- * @param cb 成功与否的回调。回调函数定义请参考 @ref TIMCommCallback
- * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
- * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
- *
- * @note
- * - 接口成功设置后会开启离线推送功能,如果您需要自定义推送的格式信息,请参考 @ref TIMMsgSendMessage 接口。
- * - 如果您想关闭离线推送,请把 json_token 设置为 NULL。
- *
- * __示例__
- * @code{.cpp}
- * Json::Value json_parameters;
- * json_parameters[kTIMOfflinePushTokenToken] = "token base16 string";
- * json_parameters[kTIMOfflinePushTokenBusinessID] = 1234578;
- * json_parameters[kTIMOfflinePushTokenType] = 0;
- * TIMMsgSetOfflinePushToken(json_parameters.toStyledString().c_str(),
- * [](int32_t code, const char* desc, const char* json_params, const void* user_data) {
- * }, nullptr);
- * @endcode
- */
- TIM_API int TIMMsgSetOfflinePushToken(const char *json_token, TIMCommCallback cb, const void* user_data);
- /**
- * 2.2 APP 检测到应用退后台时可以调用此接口,可以用作桌面应用角标的初始化未读数量(iOS 和 Android 平台专用)
- *
- * @param unread_count 未读数量
- * @param cb 成功与否的回调。回调函数定义请参考 @ref TIMCommCallback
- * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
- * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
- *
- * @note
- * - 从 6.1 版本开始,如果配置了离线推送,会收到厂商或 TPNS 的离线推送通道下发的通知栏消息。
- */
- TIM_API int TIMMsgDoBackground(uint32_t unread_count, TIMCommCallback cb, const void* user_data);
- /**
- * 2.3 APP 检测到应用进前台时可以调用此接口(iOS 和 Android 平台专用)
- *
- * @param cb 成功与否的回调。回调函数定义请参考 @ref TIMCommCallback
- * @param user_data 用户自定义数据,ImSDK只负责传回给回调函数cb,不做任何处理
- * @return int 返回TIM_SUCC表示接口调用成功(接口只有返回TIM_SUCC,回调cb才会被调用),其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
- *
- * @note
- * - 从 6.1 版本开始,调用 TIMMsgDoForeground,会停止离线推送。但如果应用被 kill,仍然可以正常接收离线推送。
- */
- TIM_API int TIMMsgDoForeground(TIMCommCallback cb, const void* user_data);
- /////////////////////////////////////////////////////////////////////////////////
- //
- // 三. 离线推送 API 参数相关的 Json Key 定义
- //
- /////////////////////////////////////////////////////////////////////////////////
- //------------------------------------------------------------------------------
- // 3.1 OfflinePushToken(设置离线推送配置信息)
- // string, 只写(选填), 注册应用到厂商平台的 token。注意:填写为设备 Token 的 hex 字符串(即 base16 编码)。
- static const char* kTIMOfflinePushTokenToken = "offline_push_token_token";
- // uint32, 只写(选填), IM 控制台证书 ID
- static const char* kTIMOfflinePushTokenBusinessID = "offline_push_token_business_id";
- // uint @ref TIMOfflinePushTokenType, 只写(选填), 厂商 token 类型。默认为 TIMOfflinePushTokenType_Default。其中 TIMOfflinePushTokenType_TPNS 为待废弃状态,如果您之前通过 TPNS 接入离线推送,并且在 TPNS 控制台配置推送信息,可以继续按照该方式接入推送功能。如果您从未接入 TPNS,从未在 TPNS 控制台配置推送信息,IM 将不在支持 TPNS 方式接入离线推送功能, 推荐参照 [官网](https://cloud.tencent.com/document/product/269/74284) 接入
- static const char* kTIMOfflinePushTokenType = "offline_push_token_type";
-
- //------------------------------------------------------------------------------
- // 3.2 IOSOfflinePushConfigSoundConfig(iOS 离线推送声音设置选项)
- // string, 选项, 接收时不会播放声音
- static const char* kIOSOfflinePushNoSound = "push.no_sound";
- // string, 选项, 接收时播放系统声音
- static const char* kIOSOfflinePushDefaultSound = "default";
- //------------------------------------------------------------------------------
- // 3.3 IOSOfflinePushConfig(消息在 iOS 系统上的离线推送配置)
- // string, 读写, 通知标题
- static const char* kTIMIOSOfflinePushConfigTitle = "ios_offline_push_config_title";
- // string, 读写, 离线推送声音设置(仅对 iOS 生效),可设置的选项请参考 @ref IOSOfflinePushConfigSoundConfig。当 iOSSound = kIOSOfflinePushNoSound,表示接收时不会播放声音;当 iOSSound = kIOSOfflinePushDefaultSound,表示接收时播放系统声音;如果要自定义 iOSSound,需要先把语音文件链接进 Xcode 工程,然后把语音文件名(带后缀)设置给 iOSSound。
- static const char* kTIMIOSOfflinePushConfigSound = "ios_offline_push_config_sound";
- // bool, 读写, 是否忽略badge计数。若为true,在iOS接收端,这条消息不会使App的应用图标未读计数增加
- static const char* kTIMIOSOfflinePushConfigIgnoreBadge = "ios_offline_push_config_ignore_badge";
- // uint @ref TIMIOSOfflinePushType, 读写,iOS 离线推送的类型(仅对 iOS 生效),默认值是 TIMIOSOfflinePushType_APNS
- static const char* kTIMIOSOfflinePushConfigPushType = "ios_offline_push_config_push_type";
- // string, 读写, 设置 APNs 离线推送的通知图片 url, 借助 iOS 10 Service Extension 特性,可以下载并展示在弹窗上. url 使用的协议必须是 HTTPS 协议,取值样例:https://example.com/image.png
- // @note
- // 限制说明:
- // - 图片:支持 JPEG、GIF、PNG,大小不超过 10 MB
- // 使用说明:
- // - 需要在 IM 控制台打开 mutable-content 属性,支持 iOS 10 Service Extension 特性
- // - 获取 iOSImage 资源的 key 值是 "image"
- static const char* kTIMIOSOfflinePushConfigImage = "ios_offline_push_config_image";
- /// string, 读写, iOS 离线推送的通知级别 (iOS 15 及以上支持)
- /// 使用说明:
- /// "passive",不会发出声音、振动或横幅提示,只会静默地出现在通知中心。适用于不紧急的信息,例如应用内的社交活动更新或推荐内容。
- /// "active", 会发出声音或振动,并显示横幅提示。适用于一般的重要通知,例如消息提醒、日历事件等。(默认类型)
- /// "time-sensitive",会发出声音或振动,并显示横幅提示,这种级别的通知会打扰用户,即使用户启用了“专注模式”(Focus Mode)。适用于需要用户立即关注的紧急通知,例如安全警报、重要的时间提醒等。打开需要在苹果开发者平台和 xcode 项目中增加相应的配置。
- /// "critical", 会发出声音或振动,并显示横幅提示。这种级别的通知会打扰用户,即使设备处于静音模式。适用于极其重要的紧急通知,例如公共安全警报、严重的健康警告等。打开需要向 Apple 特殊申请。
- static const char* kTIMIOSOfflinePushConfigInterruptionLevel = "ios_offline_push_config_interruption_level";
- /// bool, 读写, 设置 iOS 后台透传消息, 设置打开后,离线接收会唤起应用并透传消息内容 ext
- static const char* kTIMIOSOfflinePushConfigEnableBackgroundNotification = "ios_offline_push_config_enable_background_notification";
- //------------------------------------------------------------------------------
- // 3.4 AndroidOfflinePushConfig(消息在 Android 系统上的离线推送配置)
- // @note ChannelID 的说明:
- // - Android 8.0系统以上通知栏消息增加了 channelID 的设置,目前 oppo 要求必须填写,否则在 8.0 及以上的 OPPO 手机上会收不到离线推送消息。
- // - 后续可能会增加 xiaomi_channel_id_,huawei_channel_id 等。
- // string, 读写, 通知标题
- static const char* kTIMAndroidOfflinePushConfigTitle = "android_offline_push_config_title";
- // string, 读写, 离线推送声音设置(仅对 Android 生效)。只有华为和谷歌手机支持设置声音提示,小米手机设置声音提示,请您参照 [官网](https://dev.mi.com/console/doc/detail?pId=1278%23_3_0)。另外,谷歌手机 FCM 推送在 Android 8.0 及以上系统设置声音提示,必须调用 setAndroidFCMChannelID 设置好 channelID,才能生效。AndroidSound: Android 工程里 raw 目录中的铃声文件名,不需要后缀名。
- static const char* kTIMAndroidOfflinePushConfigSound = "android_offline_push_config_sound";
- // uint @ref TIMAndroidOfflinePushNotifyMode, 读写, 当前消息的通知模式
- static const char* kTIMAndroidOfflinePushConfigNotifyMode = "android_offline_push_config_notify_mode";
- // string, 读写, 离线推送设置 VIVO 推送消息类别,详见 [官网](https://dev.vivo.com.cn/documentCenter/doc/359)。
- static const char* kTIMAndroidOfflinePushConfigVIVOCategory = "android_offline_push_config_vivo_category";
- // string, 读写, 离线推送设置 OPPO 手机 8.0 系统及以上的渠道 ID(仅对 Android 生效)。
- static const char* kTIMAndroidOfflinePushConfigOPPOChannelID = "android_offline_push_config_oppo_channel_id";
- // string, 读写, 离线推送设置小米手机 8.0 系统及以上的渠道 ID(仅对 Android 生效)。
- static const char* kTIMAndroidOfflinePushConfigXiaoMiChannelID = "android_offline_push_config_xiaomi_channel_id";
- // string, 读写, 离线推送设置 FCM 通道手机 8.0 系统及以上的渠道 ID(仅对 Android 生效)。
- static const char* kTIMAndroidOfflinePushConfigFCMChannelID = "android_offline_push_config_fcm_channel_id";
- // string, 读写, 离线推送设置华为推送消息分类,详见 [官网]( https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/message-classification-0000001149358835)
- static const char* kTIMAndroidOfflinePushConfigHuaWeiCategory = "android_offline_push_config_huawei_category";
- // string, 读写, 离线推送设置 OPPO 推送消息分类,详见:https://open.oppomobile.com/new/developmentDoc/info?id=13189。 通讯与服务类型有:"IM","ACCOUNT"等;内容与营销类型有:"NEWS","CONTENT"等
- static const char* kTIMAndroidOfflinePushConfigOPPOCategory = "android_offline_push_config_oppo_category";
- // uint @ref TIMAndroidOfflinePushConfigOPPONotifyLevel, 读写, 离线推送设置 OPPO 推送通知栏消息提醒等级,详见:https://open.oppomobile.com/new/developmentDoc/info?id=13189。使用生效前,需要先设置 AndroidOPPOCategory 指定 category 为 IM 类消息。消息提醒等级有:1,通知栏;2,通知栏 + 锁屏 (默认);16,通知栏 + 锁屏 + 横幅 + 震动 + 铃声;
- static const char* kTIMAndroidOfflinePushConfigOPPONotifyLevel = "android_offline_push_config_oppo_notify_level";
- // uint @ref TIMAndroidOfflinePushConfigHonorImportance, 读写, 离线推送设置 Honor 推送消息分类,详见:https://developer.honor.com/cn/docs/11002/guides/notification-class, "NORMAL", 表示消息为服务通讯类;"LOW", 表示消息为资讯营销类
- static const char* kTIMAndroidOfflinePushConfigHonorImportance = "android_offline_push_config_honor_importance";
- // string, 读写, 设置华为设备离线推送的通知图片 url, url 使用的协议必须是 HTTPS 协议,取值样例:https://example.com/image.png
- // @note
- // string, 读写, 图片文件须小于 512KB,规格建议为 40dp x 40dp,弧角大小为 8dp。超出建议规格的图片会存在图片压缩或图片显示不全的情况。图片格式建议使用 JPG/JPEG/PNG。
- static const char* kTIMAndroidOfflinePushConfigHuaWeiImage = "android_offline_push_config_huawei_image";
- // string, 读写, 设置荣耀设备离线推送的通知图片 url, url 使用的协议必须是 HTTPS 协议,取值样例:https://example.com/image.png
- // @note
- // 图标文件大小须小于 100KB,图标建议规格大小:160px x 160px,弧角大小为 32px,超出规格大小的图标会存在图片压缩或显示不全的情况。
- static const char* kTIMAndroidOfflinePushConfigHonorImage = "android_offline_push_config_honor_image";
- // string, 读写, 设置 Google FCM 设备离线推送的通知图片 url,未展开消息时显示为大图标,展开消息后展示为大图片. url 使用的协议必须是 HTTPS 协议,取值样例:https://example.com/image.png
- // @note
- // 图标文件大小须小于 1 MB,超出规格大小的图标会存在图片压缩或显示不全的情况。
- static const char* kTIMAndroidOfflinePushConfigFCMImage = "android_offline_push_config_fcm_image";
- //------------------------------------------------------------------------------
- // 3.4 HarmonyOfflinePushConfig(消息在 Harmony 系统上推送配置)
- // string, 读写, 通知标题
- static const char* kTIMHarmonyOfflinePushConfigTitle = "harmony_offline_push_config_title";
- // string, 读写, 设置鸿蒙设备离线推送的通知图片,URL使用的协议必须是HTTPS协议,取值样例:https://example.com/image.png。
- // @note
- // 支持图片格式为png、jpg、jpeg、heif、gif、bmp,图片长*宽 < 25000像素。
- static const char* kTIMHarmonyOfflinePushConfigImage = "harmony_offline_push_config_image";
- // string, 读写, 设置鸿蒙设备离线推送通知消息类别,详见:https://developer.huawei.com/consumer/cn/doc/HMSCore-Guides/message-classification-0000001149358835
- static const char* kTIMHarmonyOfflinePushConfigCategory = "harmony_offline_push_config_category";
- // uint32, 读写,离线推送忽略 badge 计数(仅对 Harmony 生效),
- // 如果设置为 YES,在 Harmony 接收端,这条消息不会使 APP 的应用图标未读计数增加。
- static const char* kTIMHarmonyOfflinePushConfigIgnoreBadge = "harmony_offline_push_config_ignore_badge";
- //------------------------------------------------------------------------------
- // 3.5 OfflinePushConfig(消息离线推送配置)
- // string, 读写, 当前消息在对方收到离线推送时候展示标题
- static const char* kTIMOfflinePushConfigTitle = "offline_push_config_title";
- // string, 读写, 当前消息在对方收到离线推送时候展示内容
- static const char* kTIMOfflinePushConfigDesc = "offline_push_config_desc";
- // string, 读写, 当前消息离线推送时的扩展字段
- static const char* kTIMOfflinePushConfigExt = "offline_push_config_ext";
- // uint @ref TIMOfflinePushFlag, 读写, 当前消息是否允许推送,默认允许推送 kTIMOfflinePushFlag_Default
- static const char* kTIMOfflinePushConfigFlag = "offline_push_config_flag";
- // object @ref IOSOfflinePushConfig, 读写, iOS离线推送配置
- static const char* kTIMOfflinePushConfigIOSConfig = "offline_push_config_ios_config";
- // object @ref AndroidOfflinePushConfig, 读写, Android离线推送配置
- static const char* kTIMOfflinePushConfigAndroidConfig = "offline_push_config_android_config";
- // object @ref HarmonyOfflinePushConfig, 读写, Harmony离线推送配置
- static const char* kTIMOfflinePushConfigHarmonyConfig = "offline_push_config_harmony_config";
- /////////////////////////////////////////////////////////////////////////////////
- //
- // 四. 废弃字段
- //
- /////////////////////////////////////////////////////////////////////////////////
- //------------------------------------------------------------------------------
- // 4.1 AndroidOfflinePushConfig(消息在 Android 系统上的离线推送配置, 已废弃的部分)
- // uint32, 读写,离线推送设置 VIVO 推送消息分类 (待废弃字段,VIVO 推送服务于 2023 年 4 月 3 日优化消息分类规则,推荐使用 kTIMAndroidOfflinePushConfigVIVOCategory 设置消息类别) ,VIVO 手机离线推送消息分类,0:运营消息,1:系统消息。默认取值为 1 。
- static const char* kTIMAndroidOfflinePushConfigVIVOClassification = "android_offline_push_config_vivo_classification";
-
- #ifdef __cplusplus
- }
- #endif // __cplusplus
- #endif // SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_OFFLINE_PUSH_MANAGER_H_
|