一、使用个推完成推送通知
1、启动个推SDK
[GeTuiSdk startSdkWithAppId:kGtAppId appKey:kGtAppKey appSecret:kGtAppSecret delegate:self];
/** SDK启动成功返回cid */
- (void)GeTuiSdkDidRegisterClient:(NSString *)clientId {
//启动SKD成功后返回clientId
self.clientId = clientId;
}
/** SDK遇到错误回调 */
- (void)GeTuiSdkDidOccurError:(NSError *)error {
//个推错误报告,集成步骤发生的任何错误都在这里通知,如果集成后,无法正常收到消息,查看这里的通知。
NSLog(@"\n>>>[GexinSdk error]:%@\n\n", [error localizedDescription]);
}
2、注册推送通知
- (void)registerPushNotification {
if (IS_IOS10_OR_LATER) {
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (!error) {
[[UIApplication sharedApplication] registerForRemoteNotifications];
}
}];
} else {
if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeSound|UIUserNotificationTypeAlert categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
} else {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
UIRemoteNotificationType myTypes = UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound;
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:myTypes];
#pragma clang diagnostic pop
}
}
}
//当版本号大于8.0时会进入下面函数,在下面函数中完成注册
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
[application registerForRemoteNotifications];
}
#endif
//注册完成后回调的函数,在该函数中返回deviceToken
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSString *token = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
token = [token stringByReplacingOccurrencesOfString:@" " withString:@""];
//向个推服务器注册deviceToken
[GeTuiSdk registerDeviceToken:token];
//向后台传递启动个推时回调的clientId,该数据只传一次
[self.registerPushOpt registerPushToServer:self.clientId];
}
3、接收推送
个推的接收推送方法:
/**
* SDK通知收到个推推送的透传消息
*
* @param payloadData 推送消息内容
* @param taskId 推送消息的任务id
* @param msgId 推送消息的messageid
* @param offLine 是否是离线消息,YES.是离线消息
* @param appId 应用的appId
*/
- (void)GeTuiSdkDidReceivePayloadData:(NSData *)payloadData andTaskId:(NSString *)taskId andMsgId:(NSString *)msgId andOffLine:(BOOL)offLine fromGtAppId:(NSString *)appId {
}
原生的接收推送方法
//点击消息时调用该方法
//后台接收到推送调用该方法
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
completionHandler(UIBackgroundFetchResultNewData);
}
//IOS10之后 推送消息接收
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
completionHandler(UIBackgroundFetchResultNewData);
}
//IOS10之前 推送消息接收
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
}
4、关闭推送通道
关闭应用的推送通道:
[[UIApplication sharedApplication] unregisterForRemoteNotifications];
关闭个推通道
//关闭推送状态
[GeTuiSdk setPushModeForOff:YES];
开启个推通道
//开启推送状态
[GeTuiSdk setPushModeForOff:NO];
5、在该推送中实现的流程
启动个推SDK获得个推的clientId
注册推送获得deviceToken
向个推服务器注册deviceToken
向服务器传递个推的clientId
服务器更具clientId向个推推送消息
个推根据注册的deviceToken把消息推送到推送到APNS
APNS将推送消息推送到设备上(手机或电脑)
设备(手机或电脑)把信息推送到APP