iOS 消息推送原理及实现总结

ESP32-CAM搭建Arduino及简单使用 配置环境 方法一 文件 → 首选项 http://wechat.doit.am/package_esp8266com_index.json https://dl.espressif.com/dl/package_esp32_index.json 工具 → 开发板 → 开发板管理器 等待安装 方法二 https://github.com/espressif/arduino-esp32 Arduino安装目录下,找到hardware文件夹 建立文件夹espressif,然后在里面再建立一个esp32文件夹 阅读详情

一、消息推送原理:

在实现消息推送之前先提及几个于推送相关概念,如下图:

1、 Provider:就是为指定IOS设备应用程序提供Push的服务器,(如果IOS设备的应用程序是客户端的话,那么Provider可以理解为服务端[消息的发起者]);
2、 APNS:Apple Push Notification Service[苹果消息推送服务器];
3、 iPhone:用来接收APNS下发下来的消息;
4、 Client App:IOS设备上的应用程序,用来接收iphone传递APNS下发的消息到制定的一个客户端 app[消息的最终响应者];
上图可以分为三个阶段:
阶段一:Provider[服务端]把要发送的消息,目的IOS设备标识打包,发送给APNS;
阶段二:APNS在自身的已注册Push服务的IOS设备列表中,查找有相应标识的IOS设备,并将消息发送到IOS设备;
阶段三:IOS设备把发送的消息传递给对应的应用程序,并且按照设定弹出Push通知。
具体过程,如下图:

1、 [Client App]注册消息推送;
2、 [Client App]跟[APNS Service]要deviceToken, Client App接收deviceToken;
3、 [Client App]将deviceToken发送给[Provider]Push服务端程序;
4、 当Push服务端程序满足发送消息条件了,[Provider]向[APNS Service]发送消息;
5、 [APNS Service]将消息发送给[Client App].

二、消息推送实现:

1、 生成*.certSigningRequest文件,步骤如下:
[MacBookà应用程序à实用工具à钥匙串访问à证书助手à从证书机构求证书?à证书信息(用户电子邮箱地址{填写您的邮箱,如:your@email.com},常用名称{任意,如:PushDemo},请求是:{单选,选择‘存储到磁盘’})à继续à保存],这时会在您指定的地方生成你指定的文件,默认为CertificateSigningRequest.certSigningRequest文件,这里命名为:PushDemo.certSigningRequest.在此*.certSigningRequest已经生成,具体操作步骤如下面两张图所示。

如果生成成功,则会在[钥匙串访问|登录|密钥]栏目中列出与*.certSigningRequest关联的密钥,这里是PushDemo,如下图所示:

2、 新建一个App ID(在苹果开发者账号中配置)
(1) 登录iOS Dev Center,登录成功后,点击(iOS Provisioning Portal对应链接),如下图所示:

(2) 创建New App ID[App IDsàManageàNew App ID]( Description{填写您对此App ID 的描述,如:iShop},Bundle Seed ID(App ID Prefix){选择绑定App ID前缀,如:默认选择Generate New},Bundle Identifier(App ID Suffix){填写绑定App ID后缀,如:com.yourcorp.iShop}),如下图所示:

这样就会生成下面这条记录,如下图所示:

(3) 配置上一步中生成的App ID,让其支持消息推送[点击2-6中的Configureà选中Enable for Apple Push Notification serviceà点击Configure],如下图所示:

(4) Generate a Certificate Signing Request(生成部署请求认证)[点击上图中的2ConfigureàContinueà步骤1生成的*certSigningRequest文件(这里是iShop. certSigningRequest)à Generateà生成完成后将其下载下来,命名为:aps_developer_identity.cer],双击aps_developer_identity.cer证书{将证书与密钥关联,并将证书导入到MacBook中},如下图所示:

(5) 创建Development Provisioning Profiles[开发许可配置文件](Provisioning| Development|New Profile),具体操作流程如下图所示:

点击上图中Submit,生成Development Provisioning Profiles[开发许可配置文件],这里是:iShopDevprofile.mobileprovision如下图所示:

下载此开发许可证书(用于联机调试)。
总结,到现在为止,我们已经生成:A:*.certSigningRequest文件(在步骤(4)中使用,用于生成证书B)、B: aps_developer_identity.cer证书(在Provider[Push服务器]服务端应用使用)、C:*..mobileprovision开发许可配置文件(在Client App客户端应用联机调试使用)。

至此,消息推送的配置已经全部完成,接下来的工作就是编写Provider[Push服务器]服务端应用和Client App客户端应用的程序。

三、Provider服务端的实现

在这里只是简单讲述Provider服务端(JAVA实现)步骤如下:

(1) 制作Provider服务端所需要的*.p12文件:
在上面的实现的(4) 部分的图所展示的密钥、证书,我们并没有使用到它,那么为什么要展示出来呢,猜猜是为什么?为制作*.p12文件?哈哈,您猜对了,下面我们就利用它来制作*.p12文件,步骤:([MacBookà应用程序à实用工具à钥匙串访问[钥匙串:登录,种类:证书]à选择刚刚生成的证书(Apple Development IOS Services:*******)à菜单à文件à导出项目…à[存储为:任意文件名(如:iPush),文件格式:默认(个人信息交换(.p12))]à输入密码以进行导出[密码:任意,验证:与密码同一]à输入MACBook登录密码à允许à最终生成。

关键步骤如下图:

(2) 编写Client App客户端的关键代码,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
- ( BOOL )application : (UIApplication * )application didFinishLaunchingWithOptions : ( NSDictionary * )launchOptions
{
    self.window = [ [ [UIWindow alloc ] initWithFrame : [ [UIScreen mainScreen ]bounds ] ] autorelease ];
    self.window.backgroundColor = [UIColor whiteColor ];
    [self.window makeKeyAndVisible ];
    //消息推送支持的类型
    UIRemoteNotificationType types =
    (UIRemoteNotificationTypeBadge
     |UIRemoteNotificationTypeSound
     |UIRemoteNotificationTypeAlert );
    //注册消息推送
    [ [UIApplication sharedApplication ]registerForRemoteNotificationTypes :types ];
    return YES;
}
 
//获取DeviceToken成功
- ( void )application : (UIApplication * )application
didRegisterForRemoteNotificationsWithDeviceToken : ( NSData * )deviceToken
{
    NSLog ( @ "DeviceToken: {%@}",deviceToken );
    //这里进行的操作,是将Device Token发送到服务端
}
 
//注册消息推送失败
- ( void )application : (UIApplication * )application
didFailToRegisterForRemoteNotificationsWithError : ( NSError * )error
{
    NSLog ( @ "Register Remote Notifications error:{%@}", [errorlocalizedDescription ] );
}
 
//处理收到的消息推送
- ( void )application : (UIApplication * )application
didReceiveRemoteNotification : ( NSDictionary * )userInfo
{
    NSLog ( @ "Receive remote notification : %@",userInfo );
    UIAlertView *alert =
    [ [UIAlertView alloc ] initWithTitle : @ "温馨提示"
                               message : @ "推送成功!"
                              delegate : nil
                     cancelButtonTitle : @ "确定"
                     otherButtonTitles : nil ];
    [alert show ];
    [alert release ];
}

(3)编写Provider服务端关键代码,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import javapns.back.PushNotificationManager ;
import javapns.back.SSLConnectionHelper ;
import javapns.data.Device ;
import javapns.data.PayLoad ;
 
public class MainSend
{
    public static void main ( String [ ] args ) throws Exception
    {
        try
        {
            //从客户端获取的deviceToken
            String deviceToken = "3a20764942e9cb4c4f6249274f12891946bed26131b686b8aa95322faff0ad46" ;
            System. out. println ( "Push Start deviceToken:" + deviceToken ) ;
            //定义消息模式
            PayLoad payLoad = new PayLoad ( ) ;
            payLoad. addAlert ( "消息推送测试!" ) ;
            payLoad. addBadge ( 4 ) ;
            payLoad. addSound ( "default" ) ;
            //注册deviceToken
            PushNotificationManager pushManager = PushNotificationManager. getInstance ( ) ;
            pushManager. addDevice ( "iPhone", deviceToken ) ;
            //连接APNS
            String host = "gateway.sandbox.push.apple.com" ;
            int port = 2195 ;
            String path = "/Users/iMilo/Work.localized/iShop/project/service/iPush/" ;
            String certificatePath = (path + "src/ipush/iPush.p12" ) ;
            //certificatePath 步骤一中生成的*.p12文件位置
            String certificatePassword = "Love24mm" ;
            pushManager. initializeConnection (host, port, certificatePath, certificatePassword, SSLConnectionHelper. KEYSTORE_TYPE_PKCS12 ) ;
            //发送推送
            Device client = pushManager. getDevice ( "iPhone" ) ;
            pushManager. sendNotification (client, payLoad ) ;
            //停止连接APNS
            pushManager. stopConnection ( ) ;
            //删除deviceToken
            pushManager. removeDevice ( "iPhone" ) ;
            System. out. println ( "Push End" ) ;
        }
        catch ( Exception ex )
        {
            ex. printStackTrace ( ) ;
        }
    }
}

注意:如果Provider服务端为Objective-C实现的话,就不需要*.p12证书


The binary interface of the production environment is available through gateway.push.apple.com, port 2195; the binary interface of the development environment is available through gateway.sandbox.push.apple.com, port 2195.


http://www.dapps.net/dev/iphone/ios-push-notification-principle-realization.html

开启虚拟人物互动新时代:探索相芯Avatar SDK驱动功能(Android) 相芯SDK提供了男孩和女孩Avatar驱动模型,这些模型具备半身驱动和全身驱动的功能,使得虚拟角色能够根据用户的面部表情和动作实时模仿和响应。半身驱动功能: 相芯SDK的男孩和女孩Avatar驱动模型具备上身驱动功能,即能够通过用户的面部表情和动作来驱动虚拟角色的上半身行为。这意味着用户的面部表情、头部转动和上半身姿态等动作可以直接映射到虚拟角色上,使得虚拟角色能够栩栩如生地模仿用户的动作。例如,用户微笑时,虚拟角色会展现出笑容;用户转动头部时,虚拟角色也会相应地转动头部。 阅读详情

相关推荐

解决VMware与Hyper-V/Device Guard冲突的实用指南

本文详细解析了VMware与Hyper-V/Device Guard冲突的根源,并提供了三种实用的解决方案:彻底关闭相关功能、通过启动配置实现选择性引导,以及使用VMware Workstation Pro的Hyper-V兼容模式。指南包含清晰的诊断步骤、操作命令和避坑建议,帮助用户根据自身需求灵活选择,实现虚拟化环境的稳定运行或高效共存。

weixin_29306317的博客 684

iOS 消息推送原理

一、消息推送原理: 在实现消息推送之前先提及几个于推送相关概念,如下图: 1、 Provider:就是为指定IOS设备应用程序提供Push的服务器,(如果IOS设备的应用程序是客户端的话,那么Provider可以理解为服务端[消息的发起者]); 2、 APNS:Apple Push Notification Service[苹果消息推送服务器]; 3、 iPhone:用来接收APNS下

Linlei的专栏 931

Qt 5.12.8在Linux下编译qtvirtualkeyboard模块,我踩过的那些坑(附完整解决方案)

本文详细介绍了在Linux系统下为Qt 5.12.8单独编译qtvirtualkeyboard模块的完整解决方案。通过分析模块缺失原因、提供精准的编译步骤和常见问题处理,帮助开发者高效解决虚拟键盘模块缺失问题,避免重新编译整个Qt源码的繁琐过程。

weixin_29248611的博客 457

【转】iOS消息推送机制

推送的作用:可以让不在前台运行的app,告知客户app内部发生的事情.(QQ消息推送,微信消息推送等等)2.8.设置音效(如果不设置就是系统默认的音效, 设置的话会在mainBundle中查找)2.10.点击推送通知打开app时显示的启动图片(mainBundle 中提取图片)2.6.调度本地推送通知(调度完毕后,推动通知会在特定时间fireDate发出)商业转载请联系作者获得授权,非商业转载请注明出处。1.不需要服务器支持(无需联网)就能发出的推送通知。2.1.推送通知的触发时间(何时发出推送通知)

WangYouJin321的博客 2463

【图论】系列(一)之图论的构成

图论是研究图的数学分支,本章介绍了图论的基本构成和概念

qq_30066733的博客 748

VIIRS-NPP夜间灯光遥感数据下载和预处理

右侧搜索框搜索“按掩膜提取”,提取出夜光影像中国区域。将其转换为Albers积投影和重采样到400m。点击右上角Export,选择shp格式。最后点export导出就行。点击复制按钮,来到这个。,ctrl + v粘贴。将小于0.3的值置为0。下载好月合成产品后,

热爱分享,热爱记录 1万+

iOS 企业app打包方法【更新为Payload文件解压法】

iOS企业APP 打包方法,打包证书安装方法。Payload打包

lam的搬砖记录 5739

Darknet-Yolov3 移植过程

本教程面向使用寒武纪平台进行深度学习推理任务的开发者。针对当前主流检测网络darknet-yolov3,进行寒武纪平台的移植。开发者对照移植过程,能够利用寒武纪智能处理器设备完成多种场景的目标检测任务。本实验代码基于 Neuware 1.6.1 与 Python 2.7 环境。

shengyin714959的博客 438

iOS打包ipa文件

一直不怎么用ipa文件,今天实践顺便记下。 xcode跑真机成功以后,会在项目Products里生成xxx.app, 创建一个文件名,命名为Payload,注意名称一定是Payload。把生成的.app文件拖到Payload文件夹里,压缩生成Payload.zip,修改后缀名为Payload.ipa。此ipa装在iphone手机上就可以正常打开。 ...

baihailing的博客 1257

小龙虾 OpenClaw 权限全攻略:轻松激活 elevated (最新版 OpenClaw 自动化任务降智、无权限、无法执行sudo等系统命令、提升 elevated 权限的解决方案)

升级小龙虾 OpenClaw 后权限不足?elevated 报错?📛 本文教你如何正确配置 OpenClaw 权限💻,让自动化任务顺利执行 🚀

XiaoqiangClub的博客 732

CSP - 2024 普及组初赛试题及解析

CSP - 2024 普及组初赛试题及解析

QD_Jason的博客 2909

iPhone消息推送机制实现与探讨

最近两天在研究ios的消息推送机制。研究这个东西,还是充满兴趣的。 Push的原理: Push 的工作机制可以简单的概括为下图 图中,Provider是指某个iPhone软件的Push服务器,这篇文章我将使用.net作为Provider。 APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器。 上图可以分为...

diejia1113的博客 514

AD(Altium Designer)器件封装——立创商城导出原理图和PCB完成器件封装操作指南

官网:www.SZLCSC.COM以芯片为例器件类——>芯片类——>对应芯片确定芯片——>数据手册1:原理图2:PCB3:打开操作流程选中原理图——>文件——>导出——>AD1: ✔2:导出AD文件操作流程选中PCB图——>文件——>导出——>AD1: ✔2:导出AD文件1:PCB图2:原理图操作流程文件——>打开操作流程选中文件——>打开操作流程项目文件——>添加新的...到工程——>Schematic Library新原理图库操作流程项目文件——>添加新的...到工程——>PCB Library新的PC

XU157303764的博客 5434

iOS消息推送原理和实现总结

一、消息推送原理: 在实现消息推送之前先提及几个于推送相关概念,如下图:1、 Provider:就是为指定IOS设备应用程序提供Push的服务器,(如果IOS设备的应用程序是客户端的话,那么Provider可以理解为服务端[消息的发起者]);2、 APNS:Apple Push Notification Service[苹果消息推送服务器];3、 iPhone:用来接收APNS下发下...

weixin_30687051的博客 387

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IOS 消息推送原理及其实现

一、消息推送原理:   在实现消息推送之前先提及几个于推送相关概念,如下图1-1:    1-1 1、              Provider:就是为指定IOS设备应用程序提供Push的服务器,(如果IOS设备的应用程序是客户端的话,那么Provider可以理解为服务端[消息的发起者]); 2、              APNS:A

Kikim的地盘 2057

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

IOS 消息推送原理及实现总结

IOS 消息推送原理及实现总结   2011-12-17 22:13:14|  分类: IOS|字号 订阅 一、消息推送原理:   在实现消息推送之前先提及几个于推送相关概念,如下图1-1:    1-1 1、              Provider:就是为指定IOS设备应用程序提供Push的服务器,(如果IOS设备

cxm19881208的专栏 590

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

iOS 消息推送原理及实现Demo

转自:http://www.cnblogs.com/cdts_change/p/3240893.html 一、消息推送原理: 在实现消息推送之前先提及几个于推送相关概念,如下图1-1: 1、Provider:就是为指定IOS设备应用程序提供Push的服务器,(如果IOS设备的应用程序是客户端的话,那么Provider可以理解为服务端[消息的发起者]);

n7800的专栏 550

ios消息推送机制原理与实现

ios消息推送机制原理与实现 Push的原理: Push 的工作机制可以简单的概括为下图 图中,Provider是指某个iPhone软件的Push服务器,这篇文章我将使用.net作为Provider。 APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器。 上图可以分为三个阶段。

零纪年的专栏 895
上一篇: 推送通知iOS客户端编写实现及推送服务器端编写
下一篇: iOS AvPlayer AvAudioPlayer音频的后台播放问题
focusjava
博客等级 码龄14年 127粉丝 528原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值