Monday, August 11, 2014

[iOS] Apple的Push Notification Service: APNS

官方介绍
实现Push功能的例子
APNS notification request与response的binary格式:

Saturday, August 09, 2014

Base64 Encoding

base64 encode是一种编码方式. 这种编码方式用来将一段二进制数据变换成为"方便传输"的文本数据. 它的核心思想是把二进制数据按每3个字节划分为一段, 然后每一段里每6个bit映射为一个文本字符来表示. 6个bit最多只有64种可能, 所以可以用a-zA-Z0-9+/ 这64个大多数字符集里都有的文本来对应.
在Objective C中, 使用如下的方法可以在二进制数据(NSDate类型)和based64 encoded数据(保存在NSString中)相互转换.
// From binary data to base64 encoded string
NSString string;
if ([data respondsToSelector:@selector(base64EncodedStringWithOptions:)]) {
    string = [data base64EncodedStringWithOptions:kNilOptions];  // iOS 7+
} else {
    string = [data base64Encoding];                              // pre iOS7
}

// From base64 encoded string to binary data
NSData *data;
if ([NSData instancesRespondToSelector:@selector(initWithBase64EncodedString:options:)]) {
    data = [[NSData alloc] initWithBase64EncodedString:string options:kNilOptions];  // iOS 7+
} else {
    data = [[NSData alloc] initWithBase64Encoding:string];                           // pre iOS7
}

Tuesday, August 05, 2014

[iOS] iOS开发涉及到的Certificate, Provisioning Profile

iOS development/distribution

iOS开发最基本的证书. 其实是一个private key, Xcode使用该private key对App的code签名.
  • iOS Development Certificate: 该证书用来在Xcode上开发一个iOS app
  • iOS Distribution Certificate: 该证书用来将一个iOS使用App Store或者AdHoc方式来分发给用户
每一个Certificate可以对应多个App.

iOS Push service

一个经过Apple授权的SSL Certificate, 使得App后端的notification server可以连接到Apple的APNS服务.
  • APNS Development SSL Certificate: 在开发测试期使用该证书. APNS的sandbox 服务器:gateway.sandbox.push.apple.com:2195
  • APNS Production SSL Certificate: 在App运行期使用该证书. 并连接APNS production 服务器:gateway.push.apple.com:2195
每一个特定的SSL Certificate只能对应一个iOS App ID.

什么是Provisioning Profile

一个被Apple使用PKCS#7标准签名过的plist文件. 这个plist文件里以key-value pair的形式保存了关于这个App的一些基本属性. 比如AppIDName,证书创建和过期日期等等. 每一个Provisioning Profile需要对应
  • 一个AppID
  • 一个development/distribution certificate

验证一个Provisioning Profile

$ openssl smime -in /path/to/your/foo.mobileprovision -inform der -verify 
这个命令会输出该plist文件的文本内容, 以及"Verification successful" 如果验证成功

参考