葡京赌场网址IOS开发之实现App消息推送(最新)

类似最近腾讯跟人杠上了,有人如果在网上整腾讯,今天当TechWeb上看资讯,突然见到这则消息了
:和腾讯打官司,你尽管认了咔嚓。 先看web tech的截图 ,

老没写过博客啦,今天即令由于本菜鸟为大家做一个概括的IOSApp消息推送教程吧!一切从0开始,包括XCode6,
IOS8,
以及苹果开发者中心最新如何注册下,申请证书及下载配置概要文件,相信广大恰巧开头接触ios的丁会见怪怀念了解一下。(ps:网上看了一晃虽然发生许多讲述推送的好教程,我吧是圈在一步步学会的,但是这些学科的时间都是去年或更早时期的,对引导新手来说不是老确切)

大家留意看发帖子的年华: 2011-9-29 21:18

率先片

发帖人注册时: 2011-9-29

率先第一步当然是介绍一下苹果之推送机制(APNS)咯(ps:其实各个一样首教程都来),先来拘禁一样摆设苹果官方对其推送做出解释的概要图。

http://forum.techweb.com.cn/thread-855071-1-1.html 

葡京赌场网址 1

 

Provider是为你手机采用来推送消息之服务器,而APNS(Apple Push
Notification
Service)则是苹果消息推送服务器。你本地的服务器当需要被使用推送一长长的消息的时节,先使将信息来到苹果推送服务器,然后再由苹果推送服务器将信息发至安装了该采取的无绳电话机。

葡京赌场网址 2

通下再拘留一样摆设说图:

 

葡京赌场网址 3

当探访就员发帖子的食指”江艳惟愿”  的挂号时 2011-9-29

基于上图的逻辑本身来叫大家解释一下:

 

1.君的IOS应用得去注册APNS消息推送功能。

 葡京赌场网址 4

2.当苹果APNS推送服收到来自你用的挂号信息就见面回一串device
token给您(很关键)

 

3.将动用收到的device Token传被您本地的Push服务器。

角落上的海军发帖时间 2011-9-29 20:53:00 

4.当你需要呢使推送消息之时刻,你本地的推送服务器会将信息,以及Device
Token打包发送至苹果之APNS服

发帖人帐号注册时 2011-9-29 

5.APNS再以信息推送给目的iphone

网址:http://www.tianya.cn/publicforum/content/itinfo/1/155133.shtml#Bottom

仲片段

 

1.打证书颁发机构公布证书

葡京赌场网址 5 

打开你mac的钥匙串访问:葡京赌场网址 6 然后点击钥匙串访问

发帖人帐号注册时间 2011-9-29

葡京赌场网址 7

 葡京赌场网址 8

随之其见面弹有一个窗口
葡京赌场网址 9用户电子邮件信息

 

即使填写您苹果开发者账号的名称即可(应该是一个邮件号),点击保存及磁盘的挑项,点击继续,显示如下

 

葡京赌场网址 10

 kdnet帖子http://club.kdnet.net/dispbbs.asp?id=7810592&boardid=1&page=1&1=1#7810592

点击存储,文件称吧:CertificateSigningRequest.certSigningRequest
随后以他置身一个文书夹着我们得名push吧!

 发帖时间: 2011-9-29 22:06:23

老三有些

 发帖人马甲注册时间:2011-9-29 20:57

走访苹果开发者网址:https://developer.apple.com/

葡京赌场网址 11 

葡京赌场网址 12

海军注册时间 2011-9-29 20:57

入选MemberCenter选项,进入登陆页面,用而的苹果开发者账号登陆,过相同碰头网页就见面活动跳反至下图。

 

葡京赌场网址 13点击红色所选取部分

葡京赌场网址 14

内容进行下一样步的操作。

 

葡京赌场网址 15

 

选料Certificates选项,设置证书,如图所示先解释一下

sohu论坛里呢是  http://club.it.sohu.com/r-it-1943628-0-0-900.html

葡京赌场网址 16  

发帖时间 2011-09-29 20:43:59 

Development选项的图顾名思义就是是为此来作开使的关系,Production选项则

望google搜索结果吧 大致都当同一时间发表的
葡京赌场网址 17

凡是因此来宣布产品采取的,名称很生疏是未是,之前的开发者网页是无即时同样选之,可能是苹果将他改了,用是名称更加会给人口

 

知晓吧(字面上解释就是是生品么)。两只选择生成证书的步子是一样的,现在咱们使用开发者的取舍项进行证件的制作,步骤如下:

 水军的报时间是震惊之平等,多么来紧密了团队啊。恐怖!!!!

选择Development选项

 网络及水军泛滥成灾!!!!

葡京赌场网址 18

 

点击上面的加号选项,

 

葡京赌场网址 19

挑选APNS选项(开发么当然是于沙盒环境下了,模拟真实情况),然后Continue

葡京赌场网址 20

斯AppID我们在生一些叙哪些转,现在自家为此底是都变化好的一个行使ID,继续Continue

葡京赌场网址 21

当时边就假设挑于钥匙串访问环节下载下来的CertificateSigningRequest.certSigningRequest文件了,选择并转

葡京赌场网址 22

点击下载,得到aps_development .cer,保存到push文件中失去。

季有些

新建一个AppID,选择网页上之AppIDs,然后点击右侧上比赛的 “加号”

葡京赌场网址 23

App的命名只要依照苹果要求的便好了

葡京赌场网址 24

然后BundleID是比较重大的,在交付审查及测试(苹果之TestFlight)和付费环节还亟需动用,也只是待遵循苹果要求来形容就哼了。

葡京赌场网址 25

属下便指向您的利用得采用苹果的如何服务开展选择虽推行了,例如广告,游戏中心,推送,付费等等情况。

葡京赌场网址 26

说到底选择“Submit”选项,在产一个界面被挑选“done”选项,这样咱们设置AppID的步调我们就算形成了。

第五有的:生成Provisioning Profiles

是布局概要文件分为两栽,一种植是啊支付使的,还有平等栽则是吗公布暨appStore上面。

葡京赌场网址 27

创建发布版的ProvisioningProfile与开发版的流程同样,点击Development然后点击右侧上比赛的加号

葡京赌场网址 28

会晤进选择何种配置概要文件的界面

葡京赌场网址 29

俺们本时常测试,所以选择“IOS App
Development”的抉择项,在脚的Distribution发布选项中生出半点只挑选,“App
Store”以及“Ad hoc”,你得因下面的描述

挑选你发表所要的选项项。点击Continue进入下一致步。

葡京赌场网址 30

挑而达标一致步创建的AppID,点击Continue 进行下一致步

葡京赌场网址 31

摘你的开发者账号,Continue进行下一样步

葡京赌场网址 32

在即时无异步上摘而的装置(你只有在当下同步上勾选了您的装备,你才能够当设施上就此此签名进行调剂)。关于怎样将您的装置号上加进去吧是老

大概的,选择左侧的”Devices”,然后点击右侧上较量的加号,在随着出来的页面上添加而设备的UUID(在XCode中可查阅相)以及name(
可以随便取,自己扣之知情就执行)

下一场Register一下,照在流程走至结尾一步就是做到了。

哼咋们继续回地方的Provisioning
Profile配置环节,当你挑好了若的装备后点击“Continue”进入下一样页,

葡京赌场网址 33

输入一个文书称(最好是自从的会看明白是干嘛的,当然也得凭起),点击“Generate”进入下一个页面,在这页面中就是会起一个下载按钮让你下充斥之文件,

咱俩把它下载下来放在Push文件夹着。

第六片段

好了,前期的准备工作都曾经召开截止了,现在让咱们初步推送吧!(吼吼)

先是双击我们转变的 “aps_development .cer”
文件,进入钥匙串访问,找到我们的专用秘钥(根据当其次部分受到由证书机构发布证书操作着填入的常用名)

葡京赌场网址 34

自我在第二局部填写的是“silicon”,由于换了同样台mac之前安装的从未有过了,之前从未截图,所以无找了只图给大家看一下,凭大家之才智应该不难理解吧。

接下来右击导出,会弹来如下所显示之图。

葡京赌场网址 35

 

拿他存储到push文件夹着,命名吧“push.p12”,在即时同样步着导出会让您输入密码并说明,你得起定义一个密码,例如abc123葡京赌场网址 36

现行push文件夹着应该出几个文本“aps_development .cer”
,”push.p12″,“CertificateSigningRequest.certSigningRequest”以及才下下的布置概要文件。

 

接下我们打开终端以他们生成.pem文件

1.把aps_development .cer文件生成.pcm文件,cd到push文件夹下

葡京赌场网址 37

2.管push.p12文本特别成为.pem文件

葡京赌场网址 38

上输入的密码则是您导出证明所设的密码,即abc123.跟着还会见为您输入.pem文件的密码,还是用abc123好了,防止混淆。

这么咱们以push文件夹着即使同时取了少单文件,PushChatCert.pem和PushChatKey.pem。

3.管PushChatCert.pem和PushChatKey.pem合并为一个pem文件,

葡京赌场网址 39

在push文件夹着又基本上矣一个ck.pem文件,以上我们管需要以的公文都备好了

联网下去便假设测试一下啊,是勿是非常激动~

为了测试证明工作的面貌,我们好使用“telnet
gateway.sandbox.push.apple.com 2195”来检测一下,如果显示

葡京赌场网址 40

虽表示成功了。

接下来,我们利用我们别的证明及私钥来安一个有惊无险的链接去链接苹果服务器

在顶峰输入如下命令:openssl s_client -connect
gateway.sandbox.push.apple.com:2195 -cert PushChatCert.pem -key
PushChatKey.pem

急需输入密码(abc123 我们刚所设置的)。

然后他见面返回一密密麻麻的数量,这里我虽粘一部分啦:

 

CONNECTED(00000003)

depth=1 /C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is
incorporated by reference/OU=(c) 2009 Entrust, Inc./CN=Entrust
Certification Authority – L1C

verify error:num=20:unable to get local issuer
certificate

verify return:0


Certificate chain

。。。。。(省略)

。。。。。(省略)

。。。。。(省略)

 

    Start Time: 1416389389

    Timeout   : 300 (sec)

    Verify return code: 0 (ok)


测试就交此地呀。。。

第七有

1.立推送项目

 

[objc] view
plaincopy葡京赌场网址 41葡京赌场网址 42

 

  1. //  
  2. //  AppDelegate.m  
  3. //  TestPushNotifiy  
  4. //  
  5. //  Created by silicon on 14-10-30.  
  6. //  Copyright (c) 2014年 silicon. All rights reserved.  
  7. //  
  8.   
  9. #import “AppDelegate.h”  
  10.   
  11. @implementation AppDelegate  
  12. @synthesize mainView = _mainView;  
  13.   
  14. – (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
  15. {  
  16.     if ([application respondsToSelector:@selector(isRegisteredForRemoteNotifications)])  
  17.     {  
  18.         //IOS8  
  19.         //创建UIUserNotificationSettings,并安装信息之显得类品种  
  20.         UIUserNotificationSettings *notiSettings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIRemoteNotificationTypeSound) categories:nil];  
  21.           
  22.         [application registerUserNotificationSettings:notiSettings];  
  23.           
  24.     } else{ // ios7  
  25.         [application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge                                       |UIRemoteNotificationTypeSound                                      |UIRemoteNotificationTypeAlert)];  
  26.     }  
  27.       
  28.     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];  
  29.     // Override point for customization after application launch.  
  30.     self.window.backgroundColor = [UIColor whiteColor];  
  31.     [self.window makeKeyAndVisible];  
  32.       
  33.     self.mainView = [[MainViewController alloc] initWithNibName:@”MainViewController” bundle:nil];  
  34.     self.window.rootViewController = self.mainView;  
  35.     return YES;  
  36. }  
  37.   
  38. – (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)pToken{  
  39.     NSLog(@”—Token–%@”, pToken);  
  40. }  
  41.   
  42. – (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{  
  43.       
  44.     NSLog(@”userInfo == %@”,userInfo);  
  45.     NSString *message = [[userInfo objectForKey:@”aps”]objectForKey:@”alert”];  
  46.       
  47.     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@”提示” message:message delegate:self cancelButtonTitle:@”取消” otherButtonTitles:@”确定”, nil nil];  
  48.       
  49.     [alert show];  
  50. }  
  51.   
  52. – (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{  
  53.   
  54.     NSLog(@”Regist fail%@”,error);  
  55. }  
  56.   
  57. – (void)applicationWillResignActive:(UIApplication *)application  
  58. {  
  59.     // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.  
  60.     // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.  
  61. }  
  62.   
  63. – (void)applicationDidEnterBackground:(UIApplication *)application  
  64. {  
  65.     // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.   
  66.     // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.  
  67. }  
  68.   
  69. – (void)applicationWillEnterForeground:(UIApplication *)application  
  70. {  
  71.     // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.  
  72. }  
  73.   
  74. – (void)applicationDidBecomeActive:(UIApplication *)application  
  75. {  
  76.     // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.  
  77. }  
  78.   
  79. – (void)applicationWillTerminate:(UIApplication *)application  
  80. {  
  81.     // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.  
  82. }  
  83.   
  84. @end  

以appdelegate.m中进入上述代码,

 

 

 

[objc] view
plaincopy葡京赌场网址 43葡京赌场网址 44

 

  1. if ([application respondsToSelector:@selector(isRegisteredForRemoteNotifications)])  
  2.     {  
  3.         //IOS8  
  4.         //创建UIUserNotificationSettings,并安装信息的亮类品种  
  5.         UIUserNotificationSettings *notiSettings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIRemoteNotificationTypeSound) categories:nil];  
  6.           
  7.         [application registerUserNotificationSettings:notiSettings];  
  8.           
  9.     } else{ // ios7  
  10.         [application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge                                       |UIRemoteNotificationTypeSound                                      |UIRemoteNotificationTypeAlert)];  
  11.     }  

由ios8之推送和ios7暨以下的莫平等,所以用加判断来注册信息推送。

 

函数:

 

[objc] view
plaincopy葡京赌场网址 45葡京赌场网址 46

 

  1. – (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)pToken{  
  2.     NSLog(@”—Token–%@”, pToken);  
  3. }  

会见收到来自苹果服务器被你回的deviceToken,然后你待将它们上加至您本地的推送服务器上。(很要紧,决定你的装置能够无克接至推送消息)。

 

 

[objc] view
plaincopy葡京赌场网址 47葡京赌场网址 48

 

  1. – (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{  
  2.       
  3.     NSLog(@”userInfo == %@”,userInfo);  
  4.     NSString *message = [[userInfo objectForKey:@”aps”]objectForKey:@”alert”];  
  5.       
  6.     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@”提示” message:message delegate:self cancelButtonTitle:@”取消” otherButtonTitles:@”确定”, nil nil];  
  7.       
  8.     [alert show];  
  9. }  

其一函数则是当设备接收及自苹果推送服务器的信息时接触的,用来显示推送消息。

 

 

[objc] view
plaincopy葡京赌场网址 49葡京赌场网址 50

 

  1. – (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{  
  2.   
  3.     NSLog(@”Regist fail%@”,error);  
  4. }  

当注册失败时,触发此函数。

 

2.PHP服务端

拿simplepush.php这个推送脚论为放在push文件夹着

 

[php] view
plaincopy葡京赌场网址 51葡京赌场网址 52

 

  1. <?php  
  2.   
  3. // ??????????deviceToken???????????????  
  4. $deviceToken = ‘c95f661371b085e2517b4c12cc76293522775e5fd9bb1dea17dd80fe85583b41’;  
  5.   
  6. // Put your private key’s passphrase here:  
  7. $passphrase = ‘abc123’;  
  8.   
  9. // Put your alert message here:  
  10. $message = ‘My first push test!’;  
  11.   
  12. ////////////////////////////////////////////////////////////////////////////////  
  13.   
  14. $ctx = stream_context_create();  
  15. stream_context_set_option($ctx, ‘ssl’, ‘local_cert’, ‘ck.pem’);  
  16. stream_context_set_option($ctx, ‘ssl’, ‘passphrase’, $passphrase);  
  17.   
  18. // Open a connection to the APNS server  
  19. //??????????  
  20.  //$fp = stream_socket_client(?ssl://gateway.push.apple.com:2195?, $err, $errstr, 60, //STREAM_CLIENT_CONNECT, $ctx);  
  21. //?????????????appstore??????  
  22. $fp = stream_socket_client(  
  23. ‘ssl://gateway.sandbox.push.apple.com:2195’, $err,  
  24. $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);  
  25.   
  26. if (!$fp)  
  27. exit(“Failed to connect: $err $errstr” . PHP_EOL);  
  28.   
  29. echo ‘Connected to APNS’ . PHP_EOL;  
  30.   
  31. // Create the payload body  
  32. $body[‘aps’] = array(  
  33. ‘alert’ => $message,  
  34. ‘sound’ => ‘default’  
  35. );  
  36.   
  37. // Encode the payload as JSON  
  38. $payload = json_encode($body);  
  39.   
  40. // Build the binary notification  
  41. $msg = chr(0) . pack(‘n’, 32) . pack(‘H*’, $deviceToken) . pack(‘n’, strlen($payload)) . $payload;  
  42.   
  43. // Send it to the server  
  44. $result = fwrite($fp, $msg, strlen($msg));  
  45.   
  46. if (!$result)  
  47. echo ‘Message not delivered’ . PHP_EOL;  
  48. else  
  49. echo ‘Message successfully delivered’ . PHP_EOL;  
  50.   
  51. // Close the connection to the server  
  52. fclose($fp);  
  53. ?>  

deviceToken填写您接到的token,passPhrase则填写您的ck.pem设置的密码。

 

这会儿即使是见证奇迹的上了

用极限上到push文件夹,在极端输入 php simplepush.php

葡京赌场网址 53

假若显示以上提示则表示推送成功了。

依附一摆成图。

葡京赌场网址 54

推送就顶及时边吧!