博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
极光推送流程
阅读量:6370 次
发布时间:2019-06-23

本文共 1813 字,大约阅读时间需要 6 分钟。

阶段一: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应用程序。

 

  1. 申请极光帐号,创建应用。创建后自动生成AppKey用以标识该应用,需要把它配置到项目中。
  2. 上传配推送证书.P12。开发环境显示已验证,表示上传成功。 证书ID必须与项目中的Bundle identifier一致。
  3. 导入API开发包到应用程序项目.

将SDK包解压,将解压后的lib文件夹添加到项目中。

必要的框架

CFNetwork.Framework

CoreTelephony.framework

SystemConfiguration.framework

Foundation.frmework

UIKit.framework

Security.framework

Xcode7需要的是libz.tbd;Xcode7以下版本是libz.Dylib

 

  1. 在项目中创建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。

 

转载于:https://www.cnblogs.com/YaLongblogs/p/5285273.html

你可能感兴趣的文章
Linux系统各发行版镜像下载
查看>>
JS获取键盘按下的键值event.keyCode,event.charCode,event.which的兼容性
查看>>
查看ORACLE 数据库及表信息
查看>>
腾讯、百度、阿里面试经验—(1) 腾讯面经
查看>>
Codeforces Round #374 (Div. 2) D. Maxim and Array 贪心
查看>>
HTML DOM 教程Part1
查看>>
GBDT的基本原理
查看>>
MySQL修改root密码的多种方法(转)
查看>>
MongoDB 基础命令——数据库表的增删改查——遍历操作表中的记录
查看>>
.NET Core 跨平台发布(dotnet publish)
查看>>
Activity入门(一)
查看>>
CentOS下如何从vi编辑器插入模式退出到命令模式
查看>>
Mysql索引的类型
查看>>
Eclipse debug模式 总是进入processWorkerExit
查看>>
Nginx的https配置记录以及http强制跳转到https的方法梳理
查看>>
[每天五分钟,备战架构师-1]操作系统的类型和结构
查看>>
springcloud(十三):Eureka 2.X 停止开发,但注册中心还有更多选择:Consul 使用详解...
查看>>
关于Boolean类型做为同步锁异常问题
查看>>
TestLink运行环境:Redhat5+Apache2.2.17+php-5.3.5+MySQL5.5.9-1
查看>>
Get File Name from File Path in Python | Code Comments
查看>>