iOS推送

推送通知本身是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!(完整版)

你可能感兴趣的:(iOS推送)