本文译自《Apple Push Notification Service》

Apple Push Notification service(APNs)是远程通知的核心。它是一个高效率传播信息给iOS(间接地传送给watchOS)、tvOS和OS X设备的机器人。每个设备都会与APNs建立一个可信任、加密的IP连接,设备能够通过这个长连接接受通知。如果一个通知在应用没有运行的时候到来,那么设备便会通知用户,应用有最新的数据来了。

你的服务器需要为用户生成远程通知,这个服务器也就是常说的provider,它的作用就是从用户那里收集数据并且决定需要什么时候给用户发送通知。provider会生成每个通知的payload,然后将payload添加到一个HTTP/2请求,该请求将会在一个使用HTTP/2多路复用协议的安全可靠的长连接下发送给APNs。APNs在收到这个请求后,则会将通知payload发送给用户设备上的应用。

关于更多发送给APNs请求的组成或者响应,可以参见APNs Provider API

阅读全文 »

本文译自《Registering, Scheduling, and Handling User Notifications

应用在能接受本地通知和远程通知之前必须被正确的配置。这些配置在iOS和OS X中略有区别,但是其基本原则是一致的。在启动时,你的应用需要注册通知,并且在系统设置中正确设置通知选项。一旦注册完成,你就可以创建通知并推送到你的应用。而且应用将处理这些进来的通知,并作出合理的响应。

在iOS和tvOS中,注册分为两步:注册通知交互类型和注册通知本身。注册通知类型告诉了操作系统如何在通知来到时提醒用户。这个是本地通知和远程通知都需要的一个步骤。对于远程通知,你还必须注册第二步,就是获取应用特定的device token,APNs服务器会根据device token发送通知(本地通知无需该步)。在OS X系统中,注册通知是必须的,因为仅支持远程通知。

关于发送与接受远程通知更多的issue,参考Technical Note TN2265

阅读全文 »

本文译自《Local and Remote Notifications in Depth》

不管是本地通知还是远程通知,它们最基本的目的都是使应用不在前台时,传递给用户一些信息——比如,一条消息或者即将开始的约会。而本地通知和远程通知最基本的区别也是很简单的:

  • 本地通知是由应用本身调度安排并且传送到同一台设备上的;
  • 远程通知,也就是推送通知,是由你的服务器发送给APNs服务器,然后再推送到你的设备上的通知。
阅读全文 »

本文译自《Introduction》

关于本地与远程推送

本地通知远程通知就是所谓的用户通知的两种类型,区别于广播通知(由 NSNotificationCenter类管理)与键值观察通知用户通知在应用不在前台运行时,仍能让用户获取到新信息。比如,这些信息可以是一条短信、一件即将发生的日历事件或者从远程服务器获取的新数据。用户通知不管来源是本地还是远程,都由操作系统来呈现,且两者视觉和听觉效果一致。它们能显示一个提示消息或者在应用图标显示角标,也能在弹出提醒或者显示角标的同时,播放提醒音

当用户收到通知后,可以点击通知启动关联应用,查看详细的通知详情。当选择忽略通知,应用不会被激活。

阅读全文 »

这是Objective-C系列的第3篇。

一、最佳实践

  • 为所有类名都加上适当的前缀

  • 提供”全能初始化方法”

    • 在类中提供一个全能初始化方法,并与文档中指明。其他初始化方法均应调用此方法;
    • 若全能初始化方法与超类方法不同,则需要覆写超类中对应的方法;
    • 如果超类方法的初始化方法不适用于子类,那么应该覆写这个超类方法,并在其中抛出异常。
阅读全文 »

这是Objective-C系列的第2篇。

什么是属性

属性是Objective-C的一项特性,用于封装对象中的数据;

1 实例变量

1
2
3
4
5
6
@interface Person:NSObject {
@public
NSString *_firstName;
NSString *_lastName;
}
@end
阅读全文 »


背起行囊,来一场说走就走的旅行。抑或,推开房门,足下一方土,手捧一瓣花。
这是春天的日子。
在周末,趁着樱花盛放对我还颇具吸引力的时候,我走出楼道间,搭上地铁,去了顾村公园。
令我意想不到的是,在门票还没来得及塞进包的瞬间,花草树木已悄然来到身边。你知道,并不是,每次出游,大自然都给予你这般荣宠,以这般柔和的春风迎接你的到来。

阅读全文 »

从高中,到大学,及至现在。写的越来越少,思考的越来越少。

每天似乎都很忙,其实不然。每天的时间在指缝间溜走,是的,一些焦虑的阴云总是浮在头顶。靠刷着微博、朋友圈和那源源不断的新闻来驱走短暂的无聊、间歇的焦躁以及持久的孤独。

时间一有富裕,如果不分配合理,就会无中生有许多事来。比如,培养一些恶劣的习惯,又可能陷入假性繁忙的循环,更可怕的是,假如没有安置好时间与心情,胡思乱想一番,把仅剩的智慧和价值观也塑造的极其卑劣。

阅读全文 »

一、查看本机密钥

在iTerm:

1
2
cd ~/.ssh
ls

如果看到有id_rsa和id_rsa.pub,则说明该机器已经生成了SSH密钥,只要复制id_rsa.pub里的密钥即可。

1
cat id_rsa.pub

将会显示一个长字符串:

ssh-rsa *****….

否则,next

阅读全文 »

本系列是根据《Effective Objective-C 2.0》一书中的系列文章,选开发中实践的经验之谈,汇集于此,便于查阅,或者为来访者提供一份参考。编排按《Effective Objective-C 2.0》中条目。

一、最佳实践

  • 在类的头文件中尽量少引用其他头文件;
  • 多用字面量语法,少用与之等价的方法;
  • 多用类型常量,少用#define预处理指令;
  • 用枚举表示状态、选项、状态码;
阅读全文 »