为了精准统计消息抵达率和接收富媒体消息,SDK 提供了 Service Extension 接口,可供客户端调用,从而可以监听消息的到达和接收富媒体消息,您可以按以下指引使用此功能。
说明:
- 主工程的 Bundle Id 和 Service 的 Bundle Id 必须不同,且 Service 的 Bundle Id 必须以主工程的 Bundle Id 为前缀(例如,主工程的 Bundle Id:com.tencent.tpns,Service 的 Bundle Id:com.tencent.tpns.service)。
- 若主工程 Target 最低支持版本小于10.0,扩展 Target 系统版本设置为10.0。
- 若主工程 Target 最低支持版本大于10.0,则扩展 Target 系统版本与主工程 Target 版本一致。
通过 Cocoapods 下载地址:
pod 'TPNS-iOS-Extension', '~> 版本' // 如果不指定版本,则默认为本地 pod TPNS-iOS-Extension 最新版本
使用说明:
Application Extension
的 Notification Service Extension
TARGET,例如 XXServiceExtension
。target ‘XXServiceExtension'do
platform:ios,'10.0'
pod 'TPNS-iOS-Extension' , '~> 版本' // 需要与主SDK(TPNS-iOS)版本保持一致
end
XGExtension.h
及 libXGExtension.a
文件。XGExtension.h
及 libXGExtension.a
文件添加至通知扩展 Target:集成后的目录结构如下:
首次安装 new_tpns_svc_ext
,请在终端执行下面的命令:
关联 移动推送 homebrew
仓库。
brew tap tpns/serviceExtension https://github.com/TencentCloud/homebrew-tpnsServiceExtension.git
安装 new_tpns_svc_ext
命令行。
brew install new_tpns_svc_ext
安装移动推送通知扩展插件。
new_tpns_svc_ext "AccessID" "AccessKey" "xxx.xcodeproj"
参数说明:
AccessID
AccessKey
.xcodeproj
的完整路径 new_tpns_svc_ext "1600013400" "IWRNAHX6XXK6" "/Users/yanbiaomu/Developer/tencent/demo2/SDKToolObjcDemo2/SDKToolObjcDemo2.xcodeproj"
说明:参数1、2的获取方式:请在 移动推送控制台>产品管理>选中您要配置推送能力的产品>配置管理中,粘贴复制
AccessID
和AccessKey
到命令行new_tpns_svc_ext
的参数1、2中。
new_tpns_svc_ext
命令,进行结果验证。new_tpns_svc_ext
命令之后,如果输出如下结果,即说明集成通知扩展插件成功。 TPNS service auto coding done!
New TPNSService Extension Success
new_tpns_svc_ext
版本当有新版本 SDK 通知扩展插件发布,可在终端执行如下命令进行升级:
brew update && brew reinstall new_tpns_svc_ext
说明:
- 您可以在 iOS 发布动态页 查看最新版本更新详情。
- 当前
homebrew
命令new_tpns_svc_ext
只支持集成通知扩展插件TPNSService
,暂不支持基础推送能力的集成。
/**
@brief TPNS处理富媒体通知和抵达到终端的消息,即消息回执
@param request 推送请求
@param accessID TPNS应用 accessId
@param accessKey TPNS应用 accessKey
@param handler 处理消息的回调,回调方法中处理关联的富媒体文件
*/
accessID:(uint32_t)accessID
accessKey:(nonnull NSString *)accessKey
contentHandler:(nullable <span class="hljs-keyword">void</span> (^)(NSArray<UNNotificationAttachment *> *_Nullable attachments, NSError *_Nullable <span class="hljs-keyword">error</span>))<span class="hljs-keyword">handler</span>;
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent *_Nonnull))contentHandler {
self.contentHandler = contentHandler;
self.bestAttemptContent = [request.content mutableCopy];
/// 非广州集群,请开启对应集群配置(广州集群无需使用)
// [XGExtension defaultManager].reportDomainName = @"tpns.hk.tencent.com"; /// 中国香港集群
// [XGExtension defaultManager].reportDomainName = @"tpns.sgp.tencent.com"; /// 新加坡集群
// [XGExtension defaultManager].reportDomainName = @"tpns.sh.tencent.com"; /// 上海集群
[[XGExtension defaultManager] handleNotificationRequest:request accessID:<your accessID> accessKey:<your accessKey
> contentHandler:^(NSArray<UNNotificationAttachment *> * _Nullable attachments, NSError * _Nullable error) {
self.bestAttemptContent.attachments = attachments;
self.contentHandler(self.bestAttemptContent); // 如果需要在弹出通知前增加业务逻辑,请在contentHandler调用之前处理。
}];
}
在您按以上流程完成接入后,可按如下步骤验证插件接入是否成功:
若设备收到推送,但无抵达数据,可按照以下步骤进行调试:
客户端抵达上报需要集成通知扩展服务插件。若集成后,还没有抵达数据上报,则需要排查主工程与抵达插件的 ACCESS ID 和 ACCESS KEY 是否一致。 且需要排查 Web 管理台或者 RestAPI 通知的内容中 mutable-content 字段是否为1。
只有主工程与抵达插件的 ACCESS ID 和 ACCESS KEY 一致, 且 Web 管理台或者 RestAPI 通知的内容中 mutable-content 字段为1,才会运行客户端抵达插件,从而有抵达数据上报。
本页内容是否解决了您的问题?