推送通知本身是iOS系统的行为,所以在APP没有运行(没有再前台也没有再后台)的时候,任然能够推送或接受
收到推送的时候无法获取到内容,点击通知之后能跳转到APP中,可以获取到推送中带过来的扩展内容
注册推送服务:
- (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary)launchOptions
{ //注册推送
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
[JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert) categories:nil];
}
else {
[JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert) categories:nil];
}
}
在第一次出发这段代码的时候,会有一个系统弹窗,询问你是否允许该APP要给你推送消息
允许:系统打包APP+手机唯一标识+证书发送至APNs服务器注册推送服务
注册成功:
可以在此方法中获取到deviceToken他是对(手机+APP)组合的唯一标识
-(void)application:(UIApplication *)applicationdidRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{ //获取DeviceToken
[JPUSHService registerDeviceToken:deviceToken];此为极光方法
}
推送通知的提醒
前台收到:
系统会将内容传到didReceiveRemoteNotification
后台收到:
· 开启了RemoteNotification,系统执行didReceiveRemoteNotification:fetchCompletionHandler方法
· 展示横幅、通知中心、声音、角标
退出收到:
· 如果点击推送横幅、通知中心而启动APP,执行didFinishLaunchingWithOptions方法
· 展示横幅、通知中心、声音、角标
推送包含
本地通知:
APP指定推送时间,在该时间准时弹出推送通知
远程通知:
1.普通推送
· 最常见的推送通知
· 包含声音、横幅、角标、自定义字段
· APP: 处于前台,不展示横幅,可通过didReceiveRemoteNotification(iOS7之前)或
didReceiveRemoteNotification:fetchCompletionHandler(iOS7之后)方法获取内容
· 处于后台或退出,会展示横幅,无法获取通知内容
· 点击横幅启动,在didFinishLaunchingWithOptions方法获取内容
2.后台推送
· 各种显示效果如普通推送效果
· 必须携带"content-avaliable"=1;
· 必须携带alert,badge,sound中至少一个字段(后台如果不给,前台就没有任何声音)
· 必须在xcode工程中开启notifications的功能
· APP
1.处于前台或退出与普通推送效果一致
2.处于后台,可通过didReceiveRemoteNotification:fetchCompletionHandler获取通知内容,获取情况与普通推送不同的是,此时iOS系统允许开发者在APP处于后台的情况下执行代码
3.静默推送
· 没有任何展示效果
· 必须携带"content-avaliable"=1;因此静默必然是后台的
· 不能携带alert、badge、sound任何字符
· 可携带自定义字段
· APP :效果与后台推送效果一直
第三方推送
1.广播 :
无差别的发给所有的用户
2.别名(alias):
· 第三方提供的功能
· 每个手机只能设置一个别名alias
· 仅指定alias的用户能收到推送,不再限制于手机
3.标签(tag):
· 第三方提供
· 可以设置多个、可增加、清空
· 用于指定多样的属性,如"1000"+"daily"+"discount" 可用于标签月消费超过1K,喜欢购买日用品、偏好折扣商品的用户
· 如果要删除,需要在上次设置的时候,讲设置的tags保存至NSUserDefaults本次剔除不需要的tag之后,再重新设置
· 推送时可指定多个tag来统一发送内容
4.Resgistration ID :
· 第三方提供
· 在讲deviceToken提供给第三方之后,其服务器会自动生成的志向该手机的唯一id
· 可用于对核心用户、期间用户的精准推送
应用内消息
· 不需要证书
· 由第三方服务器下发,而不是APNs
· 比通知快,不延迟,可用于IM消息的即时送达
· 能够长时间保留离线消息,可获取所有历史消息内容
· 能够长连接技术下发消息 手机必须启动并与第三方服务器建立连接
· 如果手机启动立刻切换到后台,很可能没有建立连接
· 手机必须处于前台才能接收消息
· 手机从后台切回前台,才会自动重新建立连接,并收到离线消息
· 没有任何展示 只能自己实现UI效果
· 完全静默情况下处理APP内部逻辑
· AppStore审核必须关闭一些功能,上架后再通过后台开启
通知 与 消息对比
通知 | 消息 | |
---|---|---|
送达时间 | 可能存在几秒的延迟 | 无延迟 |
获取时间 | 前台或后台 | 仅前台 |
离线内容 | 保留一段时间,无法查询历史内容 | 始终保留,可查询全部历史内容 |
系统展示 | 静默或处于前台不展示,后台或退出展示角标、声音、横幅 | 不展示 |
QQ/微信聊天
同时下发一组通知 + 消息,如果用户没有启动APP,虽然有延迟,但是必然能够收到通知,在通知的提醒之后,用户打开APP,此时收到离线消息,及时更新UI
参考iOS 推送全解析,你不可不知的所有 Tips!(完整版)