首先,确定你已经有了CSR证书请求、开发证书和App ID。如果你不是第一次开发iOS应用程序,那么你可能已经有了这些东西。那么你可以继续以下的步骤。
一、配置App ID
登录你的provisioningportal,点击左侧边栏的App ID菜单,可以查看你现有的App ID。
点击打开链接
图 1-1
选择一个App ID进行配置。注意列表中有的App ID的Apple Push Notification Service列是灰色的,并且不允许使用Configure按钮。这是因为APNs不支持带统配符的AppID。
你可以配置现有的App ID,也可以重新创建一个。我们假设是后者。点击New App ID,按照如下截图进行设置:
点击打开链接
图 1-2
注意,在Bundle Seed ID一栏,苹果提供了Team ID的概念,如果你要和其他应用程序共享钥匙串,可以选择一个已经存在的BundleSeed ID。
点击Submit,马上可以在App ID中看到你新建的PushAppID,点击右边的Configure按钮,进入App ID配置页面:
点击打开链接
图 1-3
勾选“Enable for Apple Push Notification service”,点击“Development Push SSLCertificate”右边的“Configure”按钮。
在接下来的“Apple Push Notification service SSL Certificate Assistant”页面中,点击Continue按钮。
然后选择你硬盘上保存的CSR证书请求文件,点击Generate按钮,以生成一个SSL证书。点击download按钮把ssl证书下载到本地 :
点击打开链接
图 1-4
文件名为aps_developer_identity.cer,双击,将证书安装到钥匙串中。这个证书会在你的程序中用到,它允许程序接收 APNs 发送来的推送通知。
二、创建 Provisioning Profile
Provisioning Profile用于把ssl证书安装到设备上。点击Provisioning Portal中左侧边栏的Provisioning菜单进入ProvisioningProfile页面。
用New Profile按钮新建一个Provisioning Profile。
点击打开链接
图 2-1
ProfileName填写PushDeviceProfile,Certificate勾选你所用的开发证书(这个证书将和第三步Code Signing中设置的一致),如果不太清楚,把所有证书勾上即可。AppID栏选择我们前面创建的App ID。Devices勾上用于接收推送通知的设备,也可以把所有设备勾上。
点击Submit,将创建Profile。等待几秒刷新页面,Download按钮将出现,下载该证书,文件名为 PushDeviceProfile.mobileprovision。把设备连接上Mac,将该mobileprovision文件拖到 Dock 栏的 Xcode 图标,即可在设备上安装该profile。
三、创建APNs应用程序
创建Window-based Application,命名为APNsTest。准备一个.wav文件,比如machinegun.wav,拖到Groups& Files的resources组中。
选择Targets下的APNsTest,打开info窗口,并切换到Properties页。把Indentifier修改为我们前面创建的AppId:com.ydtf.AppID。
切换到 Build 页,在 search 输入框中键入 Code Signing。在 Any iPhone OS Device 选项,选择正确的profile(请回忆第二步创建Provisioning Profile时选择的证书) ,注意证书和profile是成对使用的,如下图所示 :
点击打开链接
图 3-1
在本例中,我们用于代码签名的profile是前面创建的PushDeviceProfile,使用的证书是Hongyan Yang(正是我们在创建profile时,在Certificates栏中选择的证书,见图2-1)。
打开APNsTestAppDelegate.m,找到代码“[windowmakeKeyAndVisible];”,在后面加入:
//注册APNs类型:警告+徽章+声音
[[UIApplication sharedApplication]
registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeAlert|
UIRemoteNotificationTypeBadge|
UIRemoteNotificationTypeSound)];
然后实现3个方法:
// 注册Device token
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSString *str = [NSString
stringWithFormat:@"Device Token=%@",deviceToken];
NSLog(@"%@",str);
}
// 注册APNs错误
- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {
NSString *str = [NSString stringWithFormat: @"Error: %@",err];
NSLog(@"%@",str);
}
// 接收推送通知
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
NSString *msg=[NSString stringWithFormat:@"%@",userInfo];
UIAlertView* alert=[[UIAlertView alloc]initWithTitle:@"通知"
message:msg delegate:nil
cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
alert=nil;
}
在真实设备上运行程序(不要在模拟器上运行!),iOS会在屏幕出现一个提示框,问你是否同意应用程序APNsTest接收推送通知,当你点击同意后,会在控制台看到输出的Devicetoken:
DeviceToken=<804d95ab 708a0aad 33a08c1f 00341ae2 3774bcb0 02362e33 9a8535758f36dc90>
你可以把这个Device token复制下来,等下要用。
打开设备的“设置->通用”,可以看到所有使用APNs的应用程序列表:
点击打开链接
图 3-2
可以看到,我们的APNsTest程序已经注册了APNs类型:标记、提醒、声音。你可以在这里更改这些设置。
四、推送通知提供者
推送通知提供者是一个程序,用于负责和苹果APNs服务器进行SSL通讯,它是实际上的通知发送者。如果你想想用户设备上的应用程序发送消息,实际上是由推送通知提供者进行的。实际上,整个APNs服务由3层应用程序构成:
推送通知提供者、Apple APNs服务器、iOS客户端。
苹果APNs服务器位于两者中间,起到一个中间人的角色。提供者向客户端发送消息,必须由APNs服务器来转发。开发人员除了需要实现客户端外,还需要实现提供者的代码。我们前面创建的SSL证书aps_developer_identity.cer,需要在提供者程序中使用,因为与APNs服务器通讯需要一个合法的SSL数字证书。
如果仅仅是测试,我们可以使用一个其他人已经实现的提供者:
PushMeBaby,下载地址
下载后解压缩,实际上得到的是一个Xcode工程。打开PushMeBaby工程,将aps_developer_identity.cer文件导入到Resources文件夹。
打开ApplicationDelegate.m文件,在init方法找到“self.deviceToken =”一行,将刚才复制的Devicetoken粘贴到这里:
self.deviceToken = @"804d95ab708a0aad 33a08c1f 00341ae2 3774bcb0 02362e33 9a853575 8f36dc90";
把“self.payload =”一行中的You got a new message!替换成我们自己的提示信息“收到一条推送通知。”。
把“self.certificate =”一行中的apns替换成我们自己的SSL文件aps_developer_identity。
运行PushMeBaby,程序显示如下界面:
点击打开链接
图 4-1
当提示是否允许使用证书时,选择“总是允许”。然后点击Push按钮。
稍后,你的iPhone/iPod会受到一条推送通知:
点击打开链接
图 4-2
如果你点击“显示”按钮,则会启动APNsTest,并立即显示消息的内容。
点击打开链接
图 4-3
在我们的self.payload中,仅仅使用了两个基本的通知类型:标记(badge)和提醒(alert)。
self.payload = @"{\"aps\":{\"alert\":\"收到一条推送通知。\",\"badge\":1}}";
实际上我们也可加上声音(sound)或者是其他自定义的键-值对,唯一的限制是整个payload不能超过256字节:
self.payload = @"{\"aps\":{\"alert\":\"收到一条推送通知。\",\"badge\":5,\"sound\":\"machinegun.wav\",\"myData\":12345}}";
还有一个有趣的地方。如果发送通知时,用户的APNsTest已经在当前任务中,那么当用户收到通知时,则忽略通知,并直接在APNsTest程序中呈现如图4-3所示的界面。
分享到:
相关推荐
part of APNSPHP
apns.jar包,用于apns推送,直接导入就可以使用了
该项目是.net下的一个APNS推送,服务器到APNS端的一个示例。
tornado_apns, 在PyAPNS上,基于 Tornado的异步 APNS tornado_apns用于与苹果推送通知服务( APNs ) 进行 Tornado 异步编程的python 库示例用法import timefrom apns import APNs, Payloadfrom
阿里封装的APNS推送工具包 可以使用ios客户端的APNS推送功能
apns4j 是 Apple Push Notification Service 的 Java 实现!Maven: <groupId>com.github.teaey</groupId> <artifactId>apns4j <version>1.0.1 示例代码:KeyStoreWraper keyStore = ...
苹果最新技术apns推送!!C#代码!和数据库 VS2008+sql2008
苹果APNS推送,C#实现通过APNS向客户手机推送消息,Apple Push Notification Service
php实现的APNs服务端,大家自行下载。如果有疑问,可以参看我的博客
自己用java实现苹果的apns推送,调用压缩包的text文件里面的方法即可
IOS APNS 官方开发文档 英文版本
服务端为Java时编写发送Push通知的示例,引用第三方库javapns
网络上很多的APN文件,看了许多,没有带电信参数的,花费一晚上的时间,通宵写成了这个,确切的说是改成了这个集成了中国电信相关参数的apns-conf.xml文件,借阅请说明出处,谢谢
java apns推送示例,基于http/2亲测有效
java依赖+整合代码工具类示例
APNS 苹果推送服务 C#实现
easyapns, 使用 PHP & MySQL的简单 APNs 不再维护这里项目:请注意:EasyAPNs适用于精通 PHP,MySQL和 Objective C的程序员。 如果你不精通这些编程语言,请使用其他服务,如城市飞艇( http://urbanairship.com ) 。...
APNS消息推送服务端, 运行系统mac os 连结服务器,为gateway.sandbox.push.apple.com
vapor-apns, 用于蒸汽的简单APNS库( Swift ) VaporAPNS VaporAPNS是一个简单但优雅的Swift 库,允许你使用 Linux & macOS 中的http/2 协议发送苹果推送通知。 软件支持基于新的基于令牌的认证机制,但是如果需要,