极光推送:JPush iOS推送分为两种:第一种是APNs[(Apple Push Notification Service)苹果推送通知服务]推送,第二种是JPush应用内推送;
APNs推送
APNs推送,是指JPush代理开发者的应用向苹果的APNs服务器推送,再由服务器向iOS设备推送。这种方式需要基于开发者提供的应用证书。这种推送方式可以通过在设置->通知中关闭。这种推送方法需要应用的证书和推送指定的iOS环境匹配才能收到,也就是说要证书匹配。
(苹果官方推送系统)可随时推送。如果APP处于后台或者退出状态,会以系统的APNS提醒。如果APP处于前台状态,就不展示提醒。
JPush应用内推送
JPush应用内推送,是指当APP启动时,应用内嵌的JPush SDK会开启长连接到JPush服务器,因此,服务器(极光自己的推送服务器)可以直接推送消息到APP。。这种的只有在APP处于前台活跃状态,和JPush建立连接时才能接受到推送来的消息。
默认不展示提醒。可通过JPush提供的接口networkDidReceiveMessage接口自己来获取推送内容。
APNs推送与JPush应用内推送的区别
别名
为每一个安装了应用程序的用户,可以指定一个别名。推送消息时,就以此别名来表示。
如果一个别名被指定给多个用户,那么服务器给这个别名推送消息时,就会同时给这几个同别名的用户都推送消息。
别名的命名和长度也是有限制的。个数只能有一个。
有对应的API来设置,删除,获取别名。
我们的应用中,就是以老师的teacherId来作为每个用户的别名的。
标签
给每个用户可以指定多个标签,可以在推送消息时,根据这些标签,批量的推送给带这些标签的用户。
标签的命名,个数和长度都有限制。
都有对应的API来添加,设置、清除、获取。
Badge
设置程序图标的右上角角标,一般就是消息或者推送通知的个数。
如何获取APNs推送的内容
当用户点击推送来打开应用时,应用可以在APPDelegate中的下面两个方法中根据不同的状态来获取推送的内容。
1、- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
根据launchOptions这个字典中是否含有UIApplicationLaunchOptionsRemoteNotificationKey这个key值来判断应用的打开方式;
如果含有这个key值,就说明是从点击推送的消息来打开应用的。如果不含有这个key的话,就说明是通过点击桌面的图标或者其他的方式来启动的。
2、iOS6及以下的系统版本
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo;
3、iOS7及以上版本
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler;
4、iOS10及以上版本
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler;
// NSDictionary * userInfo = notification.request.content.userInfo;
// APNs内容为userInfo
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler;
// NSDictionary * userInfo = response.notification.request.content.userInfo;
// APNs内容为userInfo
如何获取JPush自定义消息推送内容
要获取JPush的内容得在APPDelegate中的- (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary ) launchOptions方法中注册通知并实现其回调方法。
如注册通知
NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
[defaultCenter addObserver:self selector:@selector(networkDidReceiveMessage:) name:kJPFNetworkDidReceiveMessageNotification object:nil];
实现回调
- (void)networkDidReceiveMessage:(NSNotification *)notification {
NSDictionary * userInfo = [notification userInfo];
NSString *content = [userInfo valueForKey:@"content"];
NSDictionary *extras = [userInfo valueForKey:@"extras"];
NSString *customizeField1 = [extras valueForKey:@"customizeField1"]; //服务端传递的Extras附加字段,key是自己定义的
}
我们项目中是在- (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary ) launchOptions中首先去设置用户的别名,在设置完成的回调方法中去注册获取JPush推送的通知,并实现了推送的回调。