"iOS push全方位解析(三)【译文】"——一个极简的demo,并测试一下push
2015-05-11 10:03
225 查看
这是一篇来自raywenderlich的教程,内容翔实!结构简单透彻、讲解循序渐进、文章质量上乘!是一篇难的的博文!使用半瓶的英语水平翻译了一下:
1.【iOS push全方位解析】(一) push的概述
2.【iOS push全方位解析】(二) 生成push证书,生成Provisioning Profile
3.【iOS push全方位解析】(三)一个极简的demo,并测试一下push。(本博文)
这里查看原文
打开Xcode选择File,New Project。在面板中选择Single View Application并下一步:
(建工程)
我是这么填的:
● Product Name:PushChat
● Organization Name:Ray Wenderlich
● Company Indemnifier:com.hollance
● Device Family:iPhone
Product Name和Company Identifier 一起构成了Bundle ID。在我的例子中是“com.hollance.PushChat”.你应该选择一个Product name 和Company Identifier,即,从之前在Provisioning Portal中生成的App ID中获取(例如com.yourname.PushChat)。确保勾选“User Stroyboards”并且“Use Automatic Reference Counting”。好,完成创建工程。进入AppDelegate.m。改一下代码:
函数registerForRemoteNotificationTypes是高速iOS该App想接收push通知。编译并运行该App。你应该在真机上运行,因为模拟器不支持push通知。Xcode会自动选择新的的provisioning profile。当程序启动并注册push通知,手机上弹一个消息,告知用户该app想发送push通知。
(发送push 通知提醒)
app仅仅弹出一次这样的对话框询问用户。如果用户点击OK,那就一切就设置好了。如果点击“Don't Allow”,那么这个app将永远收不到push通知了。用户可以更改push的设置在手机设置中。
(设置push通知)
app的名字被添加到设置中,在这里用户可以enable和disable app的push通知,包括badge、声音和alert样式。
(详细设置push通知)
你的app可以设置具体是哪一种push,比如:
UIRemoteNotificationType enabledTypes = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
在AppDelegate.m中还要添加一个逻辑,来收到push通知
当你的app在远程push 通知注册后,会返回一个device token。这是一个32字节的数字,可以唯一标识你的设备。可以吧device token想象成一个push通知的地址。再次运行app,你应该在控制台看到下面的输出:
My token is:
<740f4707 bebcf74f 9b7c25d4 8e335894 5f6aa01d a5ddb387 462c7eaf 61bb78ad>
token是一串儿二进制的数据,在一个NSData中存放着。Apple不想让开发者对token做什么更改。对我们而言知道它是一个32字节长的数据就足够了。
APP工程的修改就这些了,还有一件事做完,就能看到push通知了。
下载SimplePush code并解压,你还需要改一下simplepush.php文件:
将app工程运行结果中的device token拷贝到$deviceToken变量,去掉空格和回车。一共是64个十六进制字符。将私钥的密码放放到$passphrase变量;设置你希望的文本内容到$message变量。
将ck.pem拷贝到SimplePush文件夹下,记得!ck.pem文件一定是包含了证书和私钥。打开命令行:
$ php simplepush.php
如果一切正常,脚本输出是:
Connected to APNS
Message successfully delivered
几秒钟后,你的设备收到了第一个push通知。
(push测试成功)
注意:app启动后什么也看不到。push消息是被派发了,但是app中并没有处理它。
1.【iOS push全方位解析】(一) push的概述
2.【iOS push全方位解析】(二) 生成push证书,生成Provisioning Profile
3.【iOS push全方位解析】(三)一个极简的demo,并测试一下push。(本博文)
这里查看原文
一个极简的demo
到目前为止,上面还不是做的还不够让人兴奋,但是那些准备工作还是很有必要的。本教程像你详细展示了如何生成证书,因为每天都会用到证书,而且没有证书push就不好。刚才你刚搞了一个证书,可以连接到APNS。现在让我们来测试一下吧。打开Xcode选择File,New Project。在面板中选择Single View Application并下一步:
(建工程)
我是这么填的:
● Product Name:PushChat
● Organization Name:Ray Wenderlich
● Company Indemnifier:com.hollance
● Device Family:iPhone
Product Name和Company Identifier 一起构成了Bundle ID。在我的例子中是“com.hollance.PushChat”.你应该选择一个Product name 和Company Identifier,即,从之前在Provisioning Portal中生成的App ID中获取(例如com.yourname.PushChat)。确保勾选“User Stroyboards”并且“Use Automatic Reference Counting”。好,完成创建工程。进入AppDelegate.m。改一下代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Let the device know we want to receive push notifications [[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; return YES; }
函数registerForRemoteNotificationTypes是高速iOS该App想接收push通知。编译并运行该App。你应该在真机上运行,因为模拟器不支持push通知。Xcode会自动选择新的的provisioning profile。当程序启动并注册push通知,手机上弹一个消息,告知用户该app想发送push通知。
(发送push 通知提醒)
app仅仅弹出一次这样的对话框询问用户。如果用户点击OK,那就一切就设置好了。如果点击“Don't Allow”,那么这个app将永远收不到push通知了。用户可以更改push的设置在手机设置中。
(设置push通知)
app的名字被添加到设置中,在这里用户可以enable和disable app的push通知,包括badge、声音和alert样式。
(详细设置push通知)
你的app可以设置具体是哪一种push,比如:
UIRemoteNotificationType enabledTypes = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
在AppDelegate.m中还要添加一个逻辑,来收到push通知
- (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); }
当你的app在远程push 通知注册后,会返回一个device token。这是一个32字节的数字,可以唯一标识你的设备。可以吧device token想象成一个push通知的地址。再次运行app,你应该在控制台看到下面的输出:
My token is:
<740f4707 bebcf74f 9b7c25d4 8e335894 5f6aa01d a5ddb387 462c7eaf 61bb78ad>
token是一串儿二进制的数据,在一个NSData中存放着。Apple不想让开发者对token做什么更改。对我们而言知道它是一个32字节长的数据就足够了。
APP工程的修改就这些了,还有一件事做完,就能看到push通知了。
发送第一个push通知
我之前很多次提到的,你需要搞一个server来发送push通知。这里为了测试,你不必设置一个server了。我已经写好一个简单的php脚本,可以连接到APNS并发送指定token的push通知。你可以在mac上运行。下载SimplePush code并解压,你还需要改一下simplepush.php文件:
// Put your device token here (without spaces): $deviceToken = '0f744707bebcf74f9b7c25d48e3358945f6aa01da5ddb387462c7eaf61bbad78'; // Put your private key's passphrase here: $passphrase = 'pushchat'; // Put your alert message here: $message = 'My first push notification!';
将app工程运行结果中的device token拷贝到$deviceToken变量,去掉空格和回车。一共是64个十六进制字符。将私钥的密码放放到$passphrase变量;设置你希望的文本内容到$message变量。
将ck.pem拷贝到SimplePush文件夹下,记得!ck.pem文件一定是包含了证书和私钥。打开命令行:
$ php simplepush.php
如果一切正常,脚本输出是:
Connected to APNS
Message successfully delivered
几秒钟后,你的设备收到了第一个push通知。
(push测试成功)
注意:app启动后什么也看不到。push消息是被派发了,但是app中并没有处理它。
相关文章推荐
- "iOS push全方位解析(二)【译文】"——生成OpenSSL证书,Provisioning Profile
- "iOS push全方位解析(一)【译文】"——iOS PUSH概述
- linux mail命令用法浅析【用最简单的测试一下就可以了如 "mail 真实的邮箱账号"具体操作见下一篇文章】
- 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取"产品付费数量等于0的问题"】
- 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取"产品付费数量等于0的问题"】
- [iOS]一个动态方法解析的小demo
- 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取"产品付费数量等于0的问题"】
- 分享一下我封装iOS自定义控件的体会,附上三个好用的控件Demo &lt;时间选择器&amp;多行输入框&amp;日期选择器&gt;
- 一个关于extern"C"下函数指针行为的测试用例
- iOS内支付总结__详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取"产品付费数量等于0的问题"】
- Git -- 创建一个远程git仓库和做初始化"push"
- 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取"产品付费数量等于0的问题"】
- 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取"产品付费数量等于0的问题"】
- 分享一下我封装iOS自定义控件的体会,附上三个好用的控件Demo <时间选择器&多行输入框&日期选择器>
- iOS 真机测试提示"The identity used to sign the executable is no longer valid."
- 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取"产品付费数量等于0的问题"】
- 1>E1400Dlg.obj : error LNK2019: 无法解析的外部符号 __imp__Demo@12,该符号在函数 "protected: v
- iOS json 解析遇到error: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be comple
- 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取"产品付费数量等于0的问题"】
- 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取"产品付费数量等于0的问题"】