在Xcode的origanizer->device选择你的设置,然后在console.app(控制台.app)里查看日志,会输出如下:client:a38dbe81c7bbfb93824*****2d5fec4f
;或者在客户端CID回调中获取如下:
/// [ GTSDK回调 ] SDK启动成功返回cid
- (void)GeTuiSdkDidRegisterClient:(NSString *)clientId {
NSLog(@"[ TestDemo ] [GTSdk RegisterClient]:%@", clientId);
}
sdk>=2.5.2.0版本,是需要使用个推注册远程通知权限,个推内部自动获取devicetoken并上报,开发者若想拿到devicetoken仍可以通过苹果原生回调api去获得。
- (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
需要注意的是devicetoken从苹果那边获取到后是有空格区分的,需要把空格去掉。
当CID在线(即app在前台打开运行)时,消息通过个推通道下发到客户端,具体到服务端Rest-V2代码中,即push_message中的 transmission 内容传递给客户端。
当CID离线(即app在后台、锁屏、app杀死状态)时,消息将通过个推侧请求对应厂商侧的服务端,具体到服务端Rest-V2代码中,即push_channel中的iOS中的内容请求给苹果的服务端,由苹果进行推送。
注意:在默认的推送策略下,iOS若先走了苹果离线通道,在消息有效期内,app打开在前台时,push_message中的 transmission 内容还将通过个推通道传递给客户端,此时可通过客户端 GeTuiSdkDidReceiveSlience 回调中的参数 offLine 的值来判断是否经过APNs通道,详情请查看iOSAPI接口说明
个推后台界面
接口推送
注意:确认推送的CID与测试手机关系是否匹配;测试方式:在个推后台【消息推送】-【配置管理】-【故障排查】-【 检测CID的状态及信息】中输入cid,然后多次关闭和打开app,检测每次app状态变化时,cid状态是否也会变化;若发现不对应,重新获取下客户端cid,以新的cid去进行推送测试。
在【消息推送】-【配置管理】-【故障排查】-【 检测CID的状态及信息:】中输入CID查询,看是否会返回苹果devicetoken。
若返回了具体苹果devicetoken,请按以下说明排查,若还未解决,提供CID和任务ID给个推技术支持
新版服务端设置苹果离线消息体代码中通过payload参数去设置,参照添加APNs自定义参数,当客户端收到APNs通知栏提醒并点击会触发客户端 GeTuiSdkDidReceiveNotification方法,获取payload参数数据,获取到之后您可以自己解析处理跳转。( 老版本服务端参照java的代码payload.addCustomMsg("由客户自定义消息key", "由客户自定义消息value"); )
{
"ios":{
"type":"notify",
"payload":"自定义消息",
"aps":{
"alert":{
"title":"通知标题",
"body":"通知内容"
},
"content-available":0,
"sound":"default"
},
"auto_badge":"+1"
}
}
扩展场景:部分用户希望效果是先打开app首页,再跳转到指定的页面;该场景对应的是在transmissioncontent中添加对应参数,客户端收到通知后打开app首页,在 GeTuiSdkDidReceiveSlience 中拿到transmissioncontent的内容,然后处理跳转。
报错内容:
error NSError * domain: @"NSCocoaErrorDomain" - code: 3000 0x17e83560
NSObject NSObject
isa Class NSError 0x3917ee90
_reserved void * NULL 0x00000000
_code NSInteger 3000 3000
_domain __NSCFString * @"NSCocoaErrorDomain" 0x17e26d80
_userInfo __NSDictionaryI * 1 key/value pair 0x17e29110
[0] (null) @"NSLocalizedDescription" : @"未找到应用程序的“aps-environment”的权利字符串"
key __NSCFConstantString * @"NSLocalizedDescription" 0x39185db0
value __NSCFString * @"未找到应用程序的“aps-environment”的权利字符串" 0x1be0ea90
如下图所示,如果出现 GTSDK 和 GTExtensionSDK 两个库中类冲突问题,原因是将两个库合成到同一个Target上,导致两个库冲突。而个推接入中两个库分别独立使用,GTSDK 在主 Target 上使用,GTExtensionSDK 在 NotificationService Target 上使用,不需要也不能将两个库一起引用到同一个 Target 上。
或是cocoapods集成使用了use_framework!的原因
解决方案:
CocoaPods集成方式: 如下图,在GTExtensionSDK中使用静态库方式配置
手动集成方式: 同一个Target中不要同时集成二个SDK库,GTSDK 在主 Target 上使用,GTExtensionSDK 在 NotificationService Target 上使用。
iOS Silent Notification(静默通知),属于特殊的远程推送通知,其目的不是为了弹出通知框提醒用户,而是用于后台运行的App和服务端同步数据。例:App在后台放置一段时间,网络已不再活跃,App内数据可能已经过时;服务端可推送一条携带参数的静默通知,处于后台的App可以触发静默通知回调,在后台运行状态下获取对应参数并发起网络请求,获取最新数据更新,整个过程用户无感知。
不设置通知标题、内容,声音和角标
收到静默通知时的系统回调:
application:didReceiveRemoteNotification:fetchCompletionHandler
为方法A)GeTuiSdkDidReceivePayloadData:andTaskId:andMsgId:andOffLine
方法A
导证书不要把钥匙串也导进来,解决按着证书生成文档重新导出次,单独选择证书;
客户端开发者需要检查是否调用了清除角标的api,若清除了角标则通知栏通知也会被清除掉。
application.applicationIconBadgeNumber = 0;
[INFO] GeTuiSdk:Error Domain=com.getui.www Code=-400 "Missing UNUserNotificationCenter Delegate, Please Use [GeTuiSdk registerRemoteNotification:]" UserInfo={NSLocalizedDescription=Missing UNUserNotificationCenter Delegate, Please Use [GeTuiSdk registerRemoteNotification:]}
Other Linker Flags: -ObjC
Pod repo update
老版本若开启了后台运行,需要再次设置关闭后台模式才会关闭,否则默认开启,开关状态会存储在本地。
GeTuiSdk runBackgroundEnable:NO
问题:
部分开发者反馈,sdk启动后就发生crash如下:
经过个推一系列排查和反馈发现:
Xcode15 在target<12时,针对iOS17以下的机型,Network.framework系统库会导致crash。Network.framework是用于socket通信,用于替换原有的GCDSocket方案。苹果官网论坛的反馈回复
解决方案:
方案一:Xcode15 苹果官网要求最低支持target12,官网说明文档, 将target设置成12及以上,即可修复这个系统问题。
方案二:由于部分客户在iOS11仍有一定的用户占比需要支持。那么使用GTCommonSDK 3.1.0.0及以上版本,并且在Info.plist中新增字段GT_MinimumOSVersion Number 内容填写为当前的target值。
但如果开发者调用了objc_copyClassList等runtime方法,xcode存在swift混编不兼容也会导致crash,这种情况则必须使用target≥12。
以上文档对您是否有帮助?