zoukankan      html  css  js  c++  java
  • 初玩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$

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

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

  • 相关阅读:
    JavaScript 深入之从原型到原型链(转载)
    Javascript 异步加载详解(转载)
    JavaScript 运行机制(转载)
    js学习总结----数据类型检测的四种方式(转载)
    GitHub常用指令
    项目部署到linux云服务器最简单的方式
    把MongoDB写成服务
    浏览器中的事件循环
    使用Nodejs计算文件夹中所有文件的大小
    前端web模块化开发之ESModules
  • 原文地址:https://www.cnblogs.com/tianglin/p/3623837.html
Copyright © 2011-2022 走看看