2018年12月

NSObject 与 NSProxy

NSProxy是和NSObject并列的Root Type

明确这一点很重要,我们习惯性地认为所有的OC对象都是NSObject的基类,然而还有NSProxy.从字面意思上来讲,Proxy意为代理人,委托.从命名上也可以窥见,NSProxy一般作为NSObject的补充.
NSObject很了解了,那么NSProxy到底是什么样的定位呢,翻下苹果官方的解释.

- 阅读剩余部分 -

推送token在registerForRemoteNotifications后即可获取到,不论用户允许还是拒绝

token长度是可变的,不要写死

推送token是会随时变化的,即使是app在使用中.当推送token变化时,会重新回调application:didRegisterForRemoteNotificationsWithDeviceToken: 方法,你也可以随时手动调用registerForRemoteNotifications方法来快速拿到已有token

没有网络或连接远程APNS失败时,会调用didFailToRegisterForRemoteNotificationsWithError方法

以下情况APNs会重新生成新的device token

  • 用户在新设备重装app(可见生成规则和appleid有关)
  • 用户从备份还原设备
  • 用户重装系统
  • 其他系统事件

苹果官方出于隐私保护,禁止使用token来区分设备.换句话说,理论上是可以使用token来区分设备的.

用户拒绝推送请求后,再次调用registerForRemoteNotifications方法也不会再弹出窗口,所以,谨慎选择弹窗时机.

deviceToken拿到的为32位的data,可以使用[deviceToken description]查看,格式为<e49c54cc 8a13341d f9f67000 bb621456 43b308ad 777bb2e0 a3b27f0b fa323edc>,可以使用以下方法过滤<>空格

    NSString* token = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
    token = [token stringByReplacingOccurrencesOfString:@" " withString:@""];

- 阅读剩余部分 -