iOS Android消息推送

iOS、android消息推送分为本地通知和远程推送。

一、iOS本地通知

本地通知,local notification,分为基于时间的定时提醒或者基于行为的触发提醒。比如日历或者to do list应用提醒;或者应用在后台执行,收到消息时,比如下载更新版本的提示消息,通过本地通知机制通知用户。本地通知由iOS NotificationManager统一管理,只需要将封装好的本地Notification对象加入到系统Notification管理机制队列中,系统会在指定的时间激发将本地Notification,应用只需设计好处理Notification的方法就完成了整个Notification流程了。

本地通知 UILocalNotification的实例,主要有三类属性:

  1. scheduled time,时间周期,用来指定iOS系统发送通知的日期和时间;
  2. notification type,通知类型,包括警告信息、动作按钮的标题、应用图标上的badge(数字标记)和播放的声音;
  3. 自定义数据,本地通知可以包含一个dictionary类型的本地数据。

创建一个本地通知通常分为以下几个步骤:

  1. 创建UILocalNotification。
  2. 设置处理通知的时间fireDate。
  3. 配置通知的内容:通知主体、通知声音、图标数字等。
  4. 配置通知传递的自定义数据参数userInfo(这一步可选)。
  5. 调用通知,可以使用scheduleLocalNotification:按计划调度一个通知,也可以使用presentLocalNotificationNow立即调用通知。

 

二、iOS远程消息推送

iOS远程消息推送和本地通知不同,推送通知是由应用服务提供商发起的,通过苹果的APNs(Apple Push Notification Server)发送到应用客户端。

iOS 系统的推送(APNS,即 Apple Push Notification Service)依托一个或几个系统常驻进程运作,是全局的(接管所有应用的消息推送),所以可看作是独立于应用之外,而且是设备和苹果服务器之间的通讯,而非应用的提供商服务器 your server。

1

推送通知的过程如下:

  1. 应用服务提供商provider从服务器端把要发送的消息和设备令牌(device token)发送给苹果的消息推送服务器APNs。
  2. APNs根据设备令牌在已注册的设备(iPhone、iPad、iTouch、mac等)查找对应的设备,将消息发送给相应的设备。
  3. 客户端设备接将接收到的消息传递给相应的应用程序,应用程序根据用户设置弹出通知消息。

2

1.应用程序注册APNs推送消息。

通过UIApplication的registerUserNotificationSettings:方法注册;

注册有两个前提条件必须准备好:开发配置文件(provisioning profile,也就是.mobileprovision后缀的文件)的App ID必须使用指定APP ID并且生成配置文件中选择Push Notifications服务;应用程序的Bundle Identifier必须和生成配置文件使用的APP ID完全一致。

2.iOS系统从APNs接收device token,在应用程序获取device token。

3.iOS应用将device token发送给应用程序提供商your server,告诉服务器端当前设备允许接收消息。

4.应用程序提供商your server在服务器端根据前面发送过来的device token组织信息发送给APNs。

发送时指定device token和消息内容,并且完全按照苹果官方的消息格式组织消息内容,通常情况下可以借助其他第三方消息推送框架来完成。

5.APNs根据消息中的device token查找已注册的设备推送消息。

正常情况下可以根据device token将消息成功推送到客户端设备中,但是也不排除用户卸载程序的情况,此时推送消息失败,APNs会将这个错误消息通知服务器端以避免资源浪费(服务器端此时可以根据错误删除已经存储的device token,下次不再发送)。

 

三、Android本地通知

Android 中的发送本地通知的逻辑如下:

先实例化Notification.Builder,再用builder创建出具体的Notification,创建时要指定好启动用的PendingIntent。最后实例化NotificationManager,利用notify函数发送。

Android本地通知略有不同,分为立即触发和延时触发:android默认的Notification为立即触发;延时触发:想让一定时间后再触发通知,其实是用系统的AlarmManager来实现的。

 

四、Android远程消息推送

Android和iOS不同,每个需要后台推送的应用有各自的单独后台进程,才能和各自的服务器通讯,交换数据。不过其实 Android 也有类似 APNS 的 GCM(Google Cloud Message),但是由于某些原因,导致这项服务在国内不是很好使,为了弥补这个不足,国内各大平台陆续推出了GCM的替代品。 好点的推送服务如果在一台设备上安装了多款Push SDK的应用,不会为每个应用都创建PushService,而是会采用多应用共享一个PushService的模式,如果是差点的,就会每个应用都创建PushService。

android app常见的后台服务见链接:http://xkonglong.com/android-app-service/

 

 

 

欢迎留言