IOS 远程推送 学习笔记 更新于2016年9月9日

时间:2020-12-09 11:48:00

APP上架简介:

1. 上传APP到IOS APP store上步骤,进入https://developer.apple.com/membercenter,输入开发者账户,密码。然后填写关于此APP的一些资源描述(包括APP图标和APP详细介绍)

2. 然后在xcode下面的window-------Organizer---------Archives-----Distribute-------Submit to the IOS  App store  -----next    ------上传成功


这两天又在重新调试消息推送,一直收不到消息,最后才发现客户端APP打包的证书是企业证书(com.xx.*)。因为消息推送证书的appID 要与客户端得APPID唯一绑定,所以这边的APPID(com.xx.xx)要唯一。20150418日调试笔记

在苹果官网申请PUSH证书的时候有说明,截图如下:

IOS 远程推送 学习笔记  更新于2016年9月9日

另外IOS8,注册消息推送的函数有所变化,具体如下在

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

 

//IOS注册推送消息格式如下:

#ifdef HS_IOS_8_0_API_BAN

    [application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge

                                                     | UIRemoteNotificationTypeSound

                                                     | UIRemoteNotificationTypeAlert)];

#else

    if ([[[UIDevice currentDevicesystemVersionfloatValue] > 7.99)

    {

        UIUserNotificationType remoteNotifyType = (UIUserNotificationTypeBadge

                                                   | UIUserNotificationTypeSound

                                                   | UIUserNotificationTypeAlert);

        

        UIUserNotificationSettings *notificationSettings = [UIUserNotificationSettings settingsForTypes:remoteNotifyType

                                                                                             categories:nil];

        

        [application registerUserNotificationSettings:notificationSettings];

        

        [application registerForRemoteNotifications];

    }

    else

    {

        UIRemoteNotificationType remoteNotifyType = (UIRemoteNotificationTypeBadge

                                                     | UIRemoteNotificationTypeSound

                                                     | UIRemoteNotificationTypeAlert);

        

        [application registerForRemoteNotificationTypes:remoteNotifyType];

    }

#endif


}



费了九牛二虎之力,终于把苹果的消息中心搞定了,写此文记录下。

大家也可以看这篇文章,写的比较好:http://blog.csdn.net/daydreamingboy/article/details/7977098

我测试通过的PushMeBaby  demo下载地址:http://download.csdn.net/detail/robinson_911/8106011

一。证书的申请与制作

0 .在制作证书前,需要使用钥匙串来制作CSR文件(物理层的描述文件)。具体如下图所示:

IOS 远程推送 学习笔记  更新于2016年9月9日


此处别忘记选择将文件存储在磁盘。

用户电子邮件地址   常用名称  CA电子邮件地址 -----------这三项必填,才可以生成有效的CSR签名物理文件

IOS 远程推送 学习笔记  更新于2016年9月9日

然后一路继续,我的文件存储在桌面,这时你会在桌面看到此文件CertificateSigningRequest.certSigningRequest


1. P12文件制作

    生成的cer文件只能单个电脑使用,倘若要多个电脑都想使用这个cer证书,就需要将cer文件转换为P12文件(个人交换文件---供多台电脑使用),具体如下:

IOS 远程推送 学习笔记  更新于2016年9月9日


IOS 远程推送 学习笔记  更新于2016年9月9日

2. 手机证书

(1)

    登录:develop.apple.com 然后在会有这个页面(如下图):

    然后点击左边的加号,然后一路继续,接着会让你导入刚刚生成的CSR文件(CertificateSigningRequest.certSigningRequest)IOS 远程推送 学习笔记  更新于2016年9月9日


(2)经过一步骤后,会生成下面的页面,是手机端证书,下载下来。{chaofeng Liu (M7RK9P2TE7).cer }

IOS 远程推送 学习笔记  更新于2016年9月9日


(3)跟上面的步骤差不多,下面的页面是服务端的PUSH证书(服务器端使用---------此处是用pushmebaby这个demo来使用),下载下来aps_development.cer 文件

IOS 远程推送 学习笔记  更新于2016年9月9日


(4)这个是描述用得(授权文件)Provisioning Profile,下载下来robinsonProvisioning.mobileprovision文件


(双击它,就可以导入手机工程(客户端)了。此处一定要先导入它robinsonProvisioning.mobileprovision),然后才会带出,显示手机端的证书(chaofeng Liu (M7RK9P2TE7).cer

IOS 远程推送 学习笔记  更新于2016年9月9日


二:iphone客户端配置:

在info中修改,Bundle identitifier 然后保证你所建的工程的bundle是更上面证书所匹配的

IOS 远程推送 学习笔记  更新于2016年9月9日

   IOS 远程推送 学习笔记  更新于2016年9月9日

三:服务端的PushMeBaby  demo

我测试通过的PushMeBaby  demo下载地址:http://download.csdn.net/detail/robinson_911/8106011

强调下:这边工程里面的

aps_development.cer 文件为上面的2(3)的服务端push文件。

       IOS 远程推送 学习笔记  更新于2016年9月9日


当你本地配置OK的话,启动demo,在debug区域可以看到如下正确内容:

第一个参数为0,表示APNS返回正确。否则,本地配置有错误。

96表明发送的字节数为96个字节。

具体解释可以参考这篇文章:http://blog.csdn.net/a6472953/article/details/8604823

IOS 远程推送 学习笔记  更新于2016年9月9日


点击Push,就可以把消息发送给APNS了,然后APNS会将消息转发给唯一token的手机客户端。

IOS 远程推送 学习笔记  更新于2016年9月9日


四。从手机客户端程序取得全球唯一的Token,设置断点,打印Token。然后给上面的PushMeBaby  demo使用

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

{

    NSLog(@"%@",deviceToken);

}

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error

{

}


打印结果如下:

2014-10-31 16:29:54.394 IPad[31932:707] <cc07a3ce ae0fe192 b1d4b846 0c1e308c 2de3214a 6846b8aa 052b3a4a 134f7a1b>

2014-10-31 16:29:55.048 IPad[31932:707] <cc07a3ce ae0fe192 b1d4b846 0c1e308c 2de3214a 6846b8aa 052b3a4a 134f7a1b>


OK


-------更新于2016.9.9日

参考:http://blog.csdn.net/zhuliushijie/article/details/46968613

        // 1.设置要推送到客户端的token
self.deviceToken = @"ff91b5c3 3d32ff0d 95c9ff5d d6de72b0 ddf7ef88 5d1d2970 0253eaad b6f9462b";
// 2.推送内容
self.payload = @"{\"aps\":{\"alert\":\"This message from my MacBook.\",\"badge\":4}}";

/*
SecIdentityCreateWithCertificate(): -25300,这个多半是因为证书不是你这太电脑申请的,.cer文件别人传你以后,你直接双击,没有生成私钥,你可以打开你的keychain,装的证书左边没有一个可以点开的小三角,就说明有问题.
解决方法是跟申请证书的人要私钥,.p12文件,然后在keychain-钥匙串-登录中导入这个.p12文件,不会导入的请自行google。导入以后证书中就有小三角了,再运行pushmebaby,能收到push消息了。
*/

//3.载入服务端的push证书
self.certificate = [[NSBundle mainBundle] pathForResource:@"aps_development" ofType:@"cer"];