非常详细讲解如何构建iOS推送

原文地址:http://blog.sina.com.cn/s/blog_7bfb9660010144j6.html

以开发一个"MobileCAP"app为例


Step 1:Create cert request file。(当你在apple web site "provisioningportal"里生成"Development Certificate" 和 "Push SSLCertificate"时就会用到它

1. Access "keychain access" by selecting"Application > Utilities >keychain access"

2. select menu "keychain access >certificate assistant > request certificate from acertificate authority"

3. set "User Email Address"as the same email address that you used to sign upfor the iOS Developer Program, and set "CommonName" as "MobileCAP", leave "CAEmail address" empty, and tick "Save todisk" option, click Continue button

4. set “Save the file” as“MobileCAP.certSigningRequest”.

当完成step1后,就会在Keychain Access的“Keys” section里生成了name为"MobileCAP"的public keyand private key pair

Step 2:export "MobileCAP" private key to a ".p12" file(该文件会在后面生成apns provider的.p12 or .pemfile时用到)

1. right click "MobileCAP“ private key and select "ExportMobileCAP..."

2. Save the private key as“MobileCAPKey.p12” file, click Save button

3. 这时会让你输入2次用于加密该.p12 file的密码,例如用"123456",接着会要求你输入一次your macaccount password


Step 3:Generate a "development certificate" file and downloadit (会生成一个cert file,该cert会被import tokeychain access里,若你要在真机上调试app,这步是必须的,另外该developmentcertificate会在后面创建provisioning profile时用到)

注意:"developmentcertificate"是与developer account对应的,即一个developeraccount只能生成一个"development certificate"。如果你之前已经创建过该cert, then justdownload it

1. 在apple web site "provisioning portal >Certificates" page, click "requestcertificate" button

2. 然后选定step 1生成的cert request file"MobileCAP.certSigningRequest"

3. follow the wizard, 就会生成一个cert file"ios_development.cer" file, andthen click the "download" link to download it


Step 4:创建Registered device (这是把你要进行调试app的device添加到apple web site"provisioning portal > Devices"page,若你要在真机上调试app,这步是必须的,另外在后面创建provisioningprofile时要把该device包含进去,否则无法在该device上调试)

1. 在apple web site "provisioning portal >Devices" page, click "Add Device"button

2. 输入device name (任意名字)and device id(把你的device连接到电脑后,在iTunes可以查到device id)


Step 5:Create App ID (若你要在真机上调试app,这步是必须的,另外它会在后面创建provisioningprofile时用到,每个provisioning profile只对应一个app ID)

关于App ID和你创建的project的product name,company identifier的关系参看 http://blog.csdn.net/totogogo/article/details/7377870

AppID是开发和预配置系统的重要组件。这个唯一的ID允许应用程序与Apple PushNotification服务以及与外部硬件附件通信。AppID也可以用于在一组应用程序内共享密钥链数据,比如密码。另外它还用于configurationdata between your applications using iCloud

任何单个应用程序ID都是由包种子(bundle seed)ID和包标识符(bundleidentifier)组成的。包种子ID是由10个字符组成的唯一字符串。这个ID也可用于在利用单个应用程序ID构建的多个应用程序之间共享密钥链访问,还可以把这个ID合并到你可能希望用其扩展iPhone应用程序的多种硬件附件中。

包标识符可以是唯一的应用程序名称,或如果你想使用通配符包ID,则它也可以是星号(*)。当你想为多个应用程序使用单个应用程序ID时,这会很有用。例如,在开发原型时,我使用了名为“test”的应用程序ID,它为其包ID使用了一个星号。在我的iPod和iPhone上安装的所有开发构建软件上都使用这一个ID。要注意的一件事情是:只有使用显式的应用程序ID,才能使用ApplePush Notifications


1.  在apple web site "provisioningportal > App IDs" page, click "newapp ID" button

2. 输入"Description" (任意取),“BundleIdentifier (App ID Suffix)” 为 "edu.cityu.MobileCAP","Bundle Seed ID (App ID Prefix)"的值是固定用上了TeamID

3. click Submit button


Step6Enable APNS in the App IDcreated by step 5, generate apns cert file and download it(若你的app要带pushnotification功能,这步是必须的。)

注意:若你生成provisioningprofile时没有enable apns,而当你之后enable apns时,就要delete旧的provisioningprofile,然后生成一个新的。否则当你运行带apns feature的app时不会弹出notification allow ordeny 提醒窗口,但也不见有任何错误信息,总之就是用不到push notification!


1.  在apple web site "provisioning portal> App IDs" page, click"configure" link of the App ID created by step5

2.  tick "Enable for Apple PushNotification service" option, and then click"configure" button of "Development PushSSL Certificate"

3. 在弹出的"ApplePush Notification service SSL CertificateAssistant"窗口里,选定step 1创建的cert request file,followthe wizard,就会生成一个apns cert file named "aps_development.cer"

4. download the cert file

5. 这时你会在apple web site "provisioning portal> App IDs" page看到,你的这个App ID 在"pushnotification"这个column里是“Enabled forDevelopment


Step7: create Provisioning Profile,download the file and add it to your device (若你要在真机上调试app,这步是必须的,ProvisionProfile实际上才是真正真机上需要添加的东东,没有它,无法真机调试。Provision Profile里集成包含了step3创建的development cert, step 4创建的device和step 5创建的appID的信息)

 

1.  在apple web site "provisioning portal> Provisioning" page, click "newProfile"  button

2. 输入"Profile Name" (任意取)

3. 选择该profile要包含的certificates (可以包含多个

4. 选择该profile要包含的App ID (只能选择一个

5. 选择能够用来真机调试的devices (最好全选

6. click submit button

7. download the provisioning profile file (extension is".mobileprovision")



Step 8:import  " ios_development.cer" filecreated by step 3and  " aps_development.cer" filecreated by step 6 to “ keychain access"
1. doubleclick  " ios_development.cer" fileto import it to  keychainaccess"
2. doubleclick  " aps_development.cer"file to import it to  keychainaccess"
3.然后在keychain access里的"Login > MyCertificates"里会看到这2个cert:" iPhone Developer: TomsonXu" cert and " Apple Development IOS PushServices" cert

Step 9:add provisioning profile file download in step 7 to yourdevice
1. 把iphone/ipod连接上电脑
2.  drag theprovision  profile file (extension is " .mobileprovision") to "Xcode" inthe desktop dock 
3. 这时会打开xocde里的" organizer"window。如果没有打开,就在select Xcode menu "window >organizer"
4. 在左边的panel里select  "Library> Provisioning Profiles",你会看到你step7创建的provision profile in the list。另外在你的device的"ProvisionProfiles”里也会看到它。
5.  如果你在apple site更新了你的provisioningprofile,在"organizer" window的"Library> Provisioning Profiles"和Device"Provisioning Profiles"删除旧的,然后在"Library> Provisioning Profiles"里click"Refresh" button

这个时候你就可以在真机上调试了,即使是真机上测试push notification也是可以的( 当然,我是说iphone side for push notificationis ready)!

下面的步骤是讲解如何在你的app里添加一些代码来实现最简单的push notification功能,以及如何设置serverside (即apns provider),用于push message。

Step10  在你的app里添加一些代码来实现最简单的功能

1. 创建一个"single view application" project,为省事, 你设置的"Company Identifier" +"Production“必须和step 5创建的App ID的"bundle identifier"一致
2.在 AppDelegate.m  file的" didFinishLaunchingWithOptions"method里,添加下列代码 (用于为app register push notificationfeature):
[cpp]  viewplain copy
  1. // Let the device know we want to receive push notifications  
  2. [[UIApplication sharedApplication] registerForRemoteNotificationTypes:  
  3.  (UIRemoteNotificationTypeBadge UIRemoteNotificationTypeSound UIRemoteNotificationTypeAlert)];  

3.  AppDelegate.m  file里添加下列2个methods( 用来handle registerremote notification with device token和registererror的events

 

[cpp]  viewplain copy
  1. (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken  
  2.  
  3.     NSLog(@"My token is: %@"deviceToken);  
  4.  
  5.   
  6. (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error  
  7.  
  8.     NSLog(@"Failed to get token, error: %@"error);  
  9.  

4. 运行该app in real device ( simulator doesn't support pushnotification)。这时你会在device上看到一个popup window(该窗口只会出现一次,重装app不会再出现),提示你该app会send pushnotification给你,如果同意则click OK,不同意则click " Nowallow”。如果选择了OK,那么在" Setting >Notifications“里会有你的app在list里。而且这时你的Xcode outputconsole会显示你的device token。


 

Step11 step2生成的“MobileCAPKey.p12” file和step6生成的"aps_development.cer" file是用于APNS providerside的源文件,APNS Provider side进行push message时要用到的"cert + key"file就是通过这2个file来生成。该Step就是用来生成for APNS provider side (phpversion)要用到这个"cert + key" pem file.

step 11.1  open Terminal, goto Desktop (假设这2个file都在desktop里)
step 11.2  执行下列命令来生成和apns cerfile对应的pem file" MobileCAPCert.pem"
[plain]  viewplain copy
  1. openssl x509 -in aps_development.cer -inform der -out MobileCAPCert.pem  
step 11.3  执行下列命令来生成和private key.p12 file对应的pem file" MobileCAPKey.pem"( 注意:执行过程会要求你输入"MobileCAP.p12"创建时设置的密码,以及设置"MobileCAPKey.pem”的密码
[plain]  viewplain copy
  1. openssl pkcs12 -nocerts -out MobileCAPKey.pem -in MobileCAPKey.p12  
Step 11.4  执行下列命令把step 11.2生成的certpem file和step 11.3生成的key pem file合成为一个pem file  " MobileCAPCK.pem"
[plain]  viewplain copy
  1. cat MobileCAPCert.pem MobileCAPKey.pem MobileCAPCK.pem  


Step12 step2生成的“MobileCAPKey.p12” file和step6生成的"aps_development.cer" file是用于APNS providerside的源文件,该step是简单测试这2个file是否有效

step 12.1  open Terminal, goto Desktop (假设这2个file都在desktop里)

Step 12.2  执行下列命令来测试是否能够connectapple提供的不经加密( 即不需使用任何证书!)的APNSserver 
[plain]  viewplain copy
  1. telnet gateway.sandbox.push.apple.com 2195  
如果你看到下列输出,则表示你的电脑可以connect APNS.如果出现error,那么check你的firewall是否允许 outgoingconnections on port 2195。
[plain]  viewplain copy
  1. Trying 17.172.233.65...  
  2. Connected to gateway.sandbox.push-apple.com.akadns.net.  
  3. Escape character is '^]'.  

Press Ctrl+C to close the connection.

Step12.3    执行下列命令来测试是否能够connectapple提供的经加密( 需使用step11.2 and 11.3生成的2个pem file!)的APNS "sandbox“ serverfor development.
[plain]  viewplain copy
  1. openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert MobileCAPCert.pem -key MobileCAPKey.pem  

执行过程中会要你输入MobileCAPKey.pem生成时设置的密码。如果connectserver成功,就会等待你输入字串,你可以输入任意字串,然后回车,就会disconnect server。如果连接不成功,则openssl会显示错误信息。

注意:实际上有2个APNS servers: the “sandbox” server (用于testing) the liveserver(用于production mode)。我们这里测试的是sandbox server。live apnsserver的操作类似。


Step13 创建provider server side (phpversion)

1. Download SimplePushPHP code to your mac machine and then unzipit.

2. 去掉SimplePush folder里的pk.pem(它没用),把step 11.4生成的"MobileCAPCK.pem"copy toSimplePush folder

3.修改simplepush.php file下面几行:

// Put your device tokenhere (without spaces):

//device token来自Step10的第4点,在outputconsole获取,注意:要去掉前后的尖括号,和中间的所有空格
$deviceToken ='43fcc3cff12965bc45bf842bf9166fa60e8240c575d0aeb0bf395fb7ff86b465';
// Put your private key'spassphrase here:

//该值是step11.3生成MobileCAPKey.pem时设置的密码
$passphrase ='123456';
// Put your alert messagehere:
$message ='My first push notification!';

//.....
stream_context_set_option($ctx,'ssl', 'local_cert', 'MobileCAPCK.pem');


4. 在terminal window里,go to the simplepushfolder,然后执行下列命令,你的iPhone应该会收到一条push message。

[plain]  viewplain copy
  1. php simplepush.php  

注意:如果你的app在iphone里是正在运行,而且app是在frontend时,当它收到push message时是不会出现在iPhone顶部的notificationarea的!


Step14 创建provider server side (c#version)

step 11生成了用于php的APNS cert(extension is pem),而如果用c#作为apns provider,则要使用.p12 formatcert,它的生成方式比step 11简单很多:

step14.1. open "keychainaccess",然后找到"login > MyCertificates > Apple Development IOS Push Services:xxxx" cert (该cert是在step8导入到keychain access的)

    你会看到该cert下包含了Step1生成的private key 


step14.2. right click this cert, and select"Export xxx......" to save as .p12 format (e.g.MobileCAPCK_For_CSharp.p12),过程中会要你输入保护该cert的密码


step14.3. 下载apns-shary,解压后,double click "JdSoft.Apple.Apns.sln" to opentheproject。然后我们只需要"JdSoft.Apple.Apns.Notifications"和"JdSoft.Apple.Apns.Notifications.Test",其他的都可以删掉。Rightclick "JdSoft.Apple.Apns.Notifications.Test",select "Set as Startup Project"


step14.4 把step14.2生成的MobileCAPCK_For_CSharp.p12 file复制到“JdSoft.Apple.Apns.Notifications.Test\bin\Debug”目录下

step14.5 打开"JdSoft.Apple.Apns.Notifications.Test"下的"Program.cs",修改下面几行

[csharp]  viewplain copy
  1. //Put your device token in here  
  2. string testDeviceToken "fe58fc8f527c363d1b775dca133e04bff24dc5032d08836992395cc56bfa62ef" 
  3.   
  4. //Put your PKCS12 .p12 or .pfx filename here.  
  5. // Assumes it is in the same directory as your app  
  6. string p12File "apn_developer_identity.p12" 
  7.   
  8. //This is the password that you protected your p12File   
  9. //  If you did not use password, set it as null or an empty string  
  10. string p12FilePassword "yourpassword" 
step 14.6  Rebuild the wholeproject, and then Run!

Step 14.7 把APNS-SHARP移植到web project里

1. In visual studio, create a new "website"

2. right click the web site root node, select"Add reference...", select"browse" tab, and then choose"Newtonsoft.Json.Compact.dll" in APNS-SHARP libray"reference" folder

2. right click the web site root node,select "Add ASP.NET Folder> App_Code". 

3. right click "App_Code" node, select "new folder", foldername任取。然后把APNS-SHARP libray"JdSoft.Apple.Apns.Notifications"目录里的所有.cs文件copy到该新建目录下。

4.把step14.2生成的MobileCAPCK_For_CSharp.p12 file复制到website root node下。

5. 然后把APNS-SHARP libray"JdSoft.Apple.Apns.Notifications.Test"目录里的Program.cs里代码适当改下,然后复制到Default.aspx.cs里(记得要importJdSoft.Apple.Apns.Notifications),就做成一个最简单的asp.netpush notification web site.




参考文档:

iphone在真机测试

官方文档 https://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/ios_development_workflow/00-About_the_iOS_Application_Development_Workflow/introduction.html#//apple_ref/doc/uid/TP40007959-CH1-SW1

http://www.cocoachina.com/bbs/read.php?tid=68636


http://blog.csdn.net/dotphoenix/article/details/5271727

http://fstoke.me/blog/?p=1805

http://hi.baidu.com/zhaodingfeng/blog/item/381b7e54025cab42564e00fa.html


在真机测试其实最终是体现在xcode > window >organizer里,打开organizer窗口后,最顶有个"Documentation",查看organization的帮助文档


apns

http://www.cnblogs.com/zhuqil/archive/2011/06/05/2070679.html

http://wsqwsq000.iteye.com/blog/1404282

http://blog.csdn.net/kmyhy/article/details/6688370


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值