做了这么久开发没有接触到推送,说起来有些悲剧 -_- 今天被别个部门的新同事问要推送证书(因为公司的开发者账号只有少部分人知道),被鄙视了!!!哎……不过我认为我向来比较谦虚,不懂就是不懂,即使经验比别人多,我很抱歉的叫他去问别个同事;即便如此,我决定一定要懂推送是如何布置的,so……现在开始整下吧,开始吧!(原理很容易理解,网上很多解释)
PS:图片比较多,只是希望对于新手来说能更清晰的知道步骤
这些是我用到的链接:
http://blog.csdn.net/showhilllee/article/details/8631734
http://www.ityran.com/archives/194
http://www.cnblogs.com/ios8/p/ios-pem.html
http://eric-gao.iteye.com/blog/1567777
http://blog.csdn.net/linpeng_1/article/details/12681767
http://blog.csdn.net/haoxuliang_ios/article/details/17261157
如有侵权,请联系我删帖!!
1、首先去创建一个App ID,专门针对测试demo用的,如下图步骤:
图1:
图2:
图三:
图四:
这样就创建了一个App ID,以上需要注意的是Bundle ID必须是固定的,而不能是通配符,也就是com.xxx.*这种事不行的。图三记得要勾选Push Notifications
2、创建证书,这里创建开发调试用的,也就是Developement型的,如以下图步骤:
图5:
图6:
图7:
图8:
图6要注意选取步骤1中填写的Bundle ID;图7创建一个csr文件,保存为cer.certSigningRequest在桌面;图8选择刚才创建的csr文件,点击Generate即可。
3、因为要真机调试,我们还需要一个Provisioning Profiles,如以下图步骤:
图9:
图10:
图11:
图12:
图13:
图14:
图11和图12:因为是测试Developement,所以需要选择设备。
4、生成pem文件
下载以上步骤2生成的Certificates和步骤3生成的Provisioning Profiles,分别双击它们,keychain里会出现如下图:
图15:
鼠标右键那个push证书,export出一个.p12文件,这里我导出一个名为cer.p12的文件在电脑桌面(导出的同时会要求你设置一个密码,我把密码设置为lonelysoul,回车后有可能还需要输入电脑密码);打开终端命令行,cd进入桌面,输入命令:
Michaels-MBP:Desktop Michael$ openssl pkcs12 -in cer.p12 -out ck.pem -nodes
这样就生成了一个ck.pem文件在桌面(这个文件的名字可以随意,但是下面的php代码中需要用到ck.pem,到后面修改成ck.pem也可以)
5、新建一个工程
我这里命名为TestPush,修改Appdelete.m文件:
在didFinishLaunchingWithOptions函数中添加一段代码,看起来像这样,如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; return YES; }
调用registerForRemoteNotificationTypes 告诉OS 这个App想要接收推送消息。
并添加两个函数,获取token,如下:
- (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); }
保存;修改plist文件,在Bundle identifier这行中输入com.xuym.lonelysoul,因为和以上步骤生成的证书保持一致;然后选择证书,以便在真机运行,如下图:
图16:
保存运行在手机中,如果不出意外的话,console中会打印出token值,如下图:
图17:
请暂时不要退出程序,在SimplePush代码下载源码,解压到桌面后, 你需要在/SimplePush/simplepush.php做些改变,如下:
//把你的设备标识写在这里(没有空格)就刚才程序运行后获取的token: $deviceToken = 'cc2e36612c0a02789ee6db3595496b8d610ff008d15962d2461c7921fa86bbb0';
//密码放在这里,刚才我导出的p12文件得密码是lonelysoul $passphrase = 'lonelysoul'; // 把你的推送消息放在这里: $message = '我的第一条推送消息,谢谢!LonelySoul';
保存退出;把步骤4生成的ck.pem文件拷贝进/SimplePush目录下(如果此目录已有一个ck.pem文件,可以先删除,也可以覆盖它);
———————————————————————————————————————————————————————————
2014-05-15 修改
PS:如果有多个设备,也就是要在php文件里添加多个deviceToken,可以百度云盘或者Dorpbox下载参考源码
———————————————————————————————————————————————————————————
6、测试push消息
这时你可以选择关闭程序;命令行进入/SimplePush目录下,执行命令:
Michaels-MBP:SimplePush Michael$ php simplepush.php
Connected to APNS
Message successfully delivered
Michaels-MBP:SimplePush Michael$
说明已经成功发送了推送消息,手机可以立马收到(可能有点延迟),如下图:
成功了!!祝贺一下吧!小菜只能写一些没有技术含量的东西,请理解。如果有什么问题尽可以联系我。