阶段一:provider把要发送的消息、目的标识打包,发送给APNS
阶段二:APNS在自身的已注册Push服务的iOS设备列表中,查找响应标识的iOS设备,并将消息发送到iOS设备。
阶段三:iOS设备把发送的消息传递给相应的应用程序,并且按照设定弹出push通知。
a.首先是应用程序注册消息推送.
b.iOS跟APNS要devicetoken。应用程序接受devicetoken.
c.应用程序将devicetoken发送给JPush服务端程序.
d.server调用极光SDK将推送消息及相关信息发送给JPush.
e.Jpush服务端程序向APNS发送消息.
f.APNS服务将消息发送给iphone应用程序。
申请极光帐号,创建应用。创建后自动生成AppKey用以标识该应用,需要把它配置到项目中。
上传配推送证书.P12。开发环境显示已验证,表示上传成功。 证书ID必须与项目中的Bundle identifier一致。
导入API开发包到应用程序项目.
将SDK包解压,将解压后的lib文件夹添加到项目中。
必要的框架
CFNetwork.Framework
CoreTelephony.framework
SystemConfiguration.framework
Foundation.frmework
UIKit.framework
Security.framework
Xcode7需要的是libz.tbd;Xcode7以下版本是libz.Dylib
在项目中创建Push.Plist文件。
CHANNEL 指名应用程序的下载渠道。
APP_KEY 填写管理portal上创建应用后自动生成的APPkey值。确保双方一致。
5.在项目中点击点击info,找到Application requires iPhone environment 选择yes
APS_FOR_PRODUCTION
0表示采用的是开发者证书,1表示采用生产证书发布应用
客户端设置
开启Remote notifications 需要在xcode中修改应用的capabilities开启Remote notifications。
当注册了Backgroud Modes -> Remote notifications 后,notification 处理函数一律切换到下面函数,后台推送代码也在此函数中调用。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler;
+ (void)registerDeviceToken:(NSData *)deviceToken;
@abstract 处理收到的 APNs 消息
+ (void)handleRemoteNotification:(NSDictionary *)remoteInfo;
- (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken ;
当你的iPhone收到推送信息后到底会发生什么呢?总共有三种可能性:
app在前台运行. 接收到推送信息时屏幕上不会有任何显示,也不会有提示音,但你的app delegate会收到这个推送信息。你可以在这里加入代码来处理接收到的信息。
app不在前台运行。iPhone可能停留在主界面或者另一个app正在运行.一个提示窗口会弹出,可能伴随着提示音。用户可以点击Close按钮来关闭这个窗口或者点击View按钮来打开你的app。如果用户点击的时Close按钮,那你的app不会处理这个推送的信息。
iPhone在锁屏状态下. 同样一个提示窗口弹出,并伴随着提示音,但是这个窗口不会有Close和View按钮。屏幕解锁后会自动进入你的app。