apple推送功能环境配置
apple推送功能环境配置
环境配置需要用到:
(1)mac电脑的 Keychain Access程序 (在Applications/Utilities下 )。中文环境名为 钥匙串访问 (在/应用程序/实用工具/钥匙串访问)
(2)apple网站 https://developer.apple.com/devcenter/ios/index.action (99美金用户登录)
在读本篇文章之前,建议先阅读文章《iphone开发--真机测试 》!
具体配置步骤如下:
1. 生成证书签名请求( Certificate Signing Request, CSR )
打开 Keychain Access程序。
输入邮件地址、常用名称;在“请求是”中选择“存储到磁盘”,点按钮[继续]。
选择证书存储的目录,设置存储文件名,这里我命名为 push2013.certSigningRequest ,然后点按钮[存储]。
点按钮[完成]。
2. 导出证书签名请求CSR的私钥。
这里文件命名为 push2013.p12
在密码和验证框中输入密码。
3. 创建APP ID
打开网站 https://developer.apple.com/devcenter/ios/index.action 并登录进入 iOS Provisioning Portal;
点右上角的按钮:
。
输入 Description 和 Bundle Identifier信息,注意:Bundle Identifier名称是你以后在XCode开发中的Bundle Identifier。因此,最好能根据项目名来设置。设置后,点右下角按钮
。
找到,上面刚创建的名为push2013的应用,然后点链接“Configure”。
在“Enable for Apple Push Notification service
”前面的方框内打勾,然后点行“Development Push SSL Certificate
”对应的按钮[Configure]。
如果是发布产品,则必须选择下面的【Producy Push SSL certificate】的Configure]按钮!
选择上面生成的CSR证书文件 : push2013.certSigningRequest
点击图中的按钮
,将推送的 SSL证书下载到本地,该证书文件名设置为 aps_development.cer
然后点图中的按钮[Done]。
可以看到状态变为
了,然后点右下角的按钮[Done]。
4.创建开发配置属性参数(Development Provisioning Profiles )
进入菜单 [Provisioning
],然后点击右上角的按钮
。
输入参数“Profile Name”(可以是任意名称),选中你的“Certificates”、选择上面创建的APP Id,选中你的“Devices”。
备注:如果没有配置“Certificates”和“Devices”,那么请先参考文章
iphone开发--真机测试
进行配置吧!
在参数确定后,点击右下角的按钮
。
可以看到如下界面:
前面创建的push2013_profile的status为“Pending”,然后刷新当前页面,直到出现下面的界面。
push2013_profile的status变为“Active”,就可以点击旁边的按钮[
]。
下载到本地,文件名为 push2013_profile.mobileprovision 。
把你要用来测试的真机(ipad或iphone)接上你的MAC电脑。
然后双击文件push2013_profile.mobileprovision 运行,会自动打开XCODE的Organizer,并在你的真机中加入该文件。
5.在xcode中创建推送测试程序。
注意:图中方框内的“Bundle Identifier”必须和前面创建 APP ID中的“Bundle Identifier”相同。
项目创建后,修改 “AppDelegate.m ”的方法[didFinishLaunchingWithOptions]代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; // Override point for customization after application launch. self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease]; self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; // Let the device know we want to receive push notifications [[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; return YES; }
另外新增2个方法:
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken { NSLog(@"My token is: %@", deviceToken); } - (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error { NSLog(@"Failed to get token, error: %@", error); }
在运行前,请选择真机运行,而且真机必须是联网的,否则看不到推送效果!!
选择真机运行,如下图:
如果看不到真机,那么请先参考文章
iphone开发--真机测试
进行配置吧!
真机运行后,可以看到真机上有推送确认框。如下图:
点击按钮[好]。
另外在xcode的控制台看到输出信息,如下图:
会看到一个64个字符的号码,这个号码就是你的真机的推送ID,如果你要给这个真机发通知,则必须记下这个64位的号码。
这里,请记下你测试真机的推送ID。
6.创建推送通知发送服务程序,用来给真机发推送通知信息。
6.1 制作推送程序必须的证书。
通过上面的一系列操作,我们已经得到了3个主要的证书相关的文件。
为方便操作,请将这3个文件放在同一个目录下。
打开1个MAC终端(终端程序 位置如下图)
在终端上,进入到3个证书文件所在的目录。
执行命令:
openssl x509 -in aps_development.cer -inform der -out push2013cert.pem
执行后,得到证书文件 push2013cert.pem
执行命令:
openssl pkcs12 -nocerts -out push2013key.pem -in push2013.p12
执行后,输入密码(3次),然后会得到证书文件 push2013key.pem
执行命令:
cat push2013cert.pem push2013key.pem > push2013.pem
这里得到的证书文件 push2013.pem ,就是推送程序需要的证书(php可以使用pem格式证书)。
如果是java或者.net开发的话,必须使用.p12格式的证书。
执行下面命令来制作p12证书:
openssl pkcs12 -export -inkey push2013key.pem -in push2013cert.pem -out push2013java.p12
得到的证书文件 push2013java.p12 就可以用用于java或.net开发。
6.2 创建一个简单的推送程序。
到了这里,我们已经准备了1个证书文件,1个测试真机的推送ID(就是上面所说的64位号码,注意空格符号要去掉)。
下面只需要1个程序就可以发推送通知了。
这里有1个现成的发送程序(php语言的),参见附件中的 simplepush.php.zip ,下载后解压得到文件 simplepush.php,将其放到与证书 push2013.pem相同目录下。
修改 simplepush.php 内容:
按照图中的提示信息,填写上对应的信息。注意:真机推送ID不要有空格。
文件中的 gateway.sandbox.push.apple.com:2195 是沙箱测试地址。2195是端口号。
文件修改好后,请先将真机运行程序退出(程序运行中看不到推送通知),然后在终端执行命令:
php simplepush.php
执行成功后,将显示:
Connected to APNS
Message successfully delivered
表示推送通知发送成功了!!!!
在测试真机上可以看到:
如果你看到的不一样,可能是真机上对于通知的配置不一样导致。