lonelysoul

Happy share, happy life.

导航

初玩iOS中APNs

做了这么久开发没有接触到推送,说起来有些悲剧 -_- 今天被别个部门的新同事问要推送证书(因为公司的开发者账号只有少部分人知道),被鄙视了!!!哎……不过我认为我向来比较谦虚,不懂就是不懂,即使经验比别人多,我很抱歉的叫他去问别个同事;即便如此,我决定一定要懂推送是如何布置的,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$

说明已经成功发送了推送消息,手机可以立马收到(可能有点延迟),如下图:

 

成功了!!祝贺一下吧!小菜只能写一些没有技术含量的东西,请理解。如果有什么问题尽可以联系我。

 

posted on 2014-03-25 18:38  lonelysoul  阅读(354)  评论(0编辑  收藏  举报