@@ -133,7 +133,11 @@ - (BOOL)isDefaultToken {
133
133
return [self .scope isEqualToString: kFIRMessagingDefaultTokenScope ];
134
134
}
135
135
136
- #pragma mark - NSCoding
136
+ #pragma mark - NSSecureCoding
137
+
138
+ + (BOOL )supportsSecureCoding {
139
+ return YES ;
140
+ }
137
141
138
142
- (nullable instancetype )initWithCoder : (NSCoder *)aDecoder {
139
143
// These value cannot be nil
@@ -164,30 +168,13 @@ - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
164
168
if (firebaseAppID && ![firebaseAppID isKindOfClass: [NSString class ]]) {
165
169
return nil ;
166
170
}
167
-
168
- id rawAPNSInfo = [aDecoder decodeObjectForKey: kFIRInstanceIDAPNSInfoKey ];
169
- if (rawAPNSInfo && ![rawAPNSInfo isKindOfClass: [NSData class ]]) {
171
+ NSSet *classes = [[NSSet alloc ] initWithArray: @[ FIRMessagingAPNSInfo.class ]];
172
+ FIRMessagingAPNSInfo *rawAPNSInfo = [aDecoder decodeObjectOfClasses: classes
173
+ forKey: kFIRInstanceIDAPNSInfoKey ];
174
+ if (rawAPNSInfo && ![rawAPNSInfo isKindOfClass: [FIRMessagingAPNSInfo class ]]) {
170
175
return nil ;
171
176
}
172
177
173
- FIRMessagingAPNSInfo *APNSInfo = nil ;
174
- if (rawAPNSInfo) {
175
- // TODO(chliangGoogle: Use the new API and secureCoding protocol.
176
- @try {
177
- [NSKeyedUnarchiver setClass: [FIRMessagingAPNSInfo class ]
178
- forClassName: @" FIRInstanceIDAPNSInfo" ];
179
- #pragma clang diagnostic push
180
- #pragma clang diagnostic ignored "-Wdeprecated-declarations"
181
- APNSInfo = [NSKeyedUnarchiver unarchiveObjectWithData: rawAPNSInfo];
182
- #pragma clang diagnostic pop
183
- } @catch (NSException *exception) {
184
- FIRMessagingLoggerInfo (kFIRMessagingMessageCodeTokenInfoBadAPNSInfo ,
185
- @" Could not parse raw APNS Info while parsing archived token info." );
186
- APNSInfo = nil ;
187
- } @finally {
188
- }
189
- }
190
-
191
178
id cacheTime = [aDecoder decodeObjectForKey: kFIRInstanceIDCacheTimeKey ];
192
179
if (cacheTime && ![cacheTime isKindOfClass: [NSDate class ]]) {
193
180
return nil ;
@@ -200,7 +187,7 @@ - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
200
187
_token = [token copy ];
201
188
_appVersion = [appVersion copy ];
202
189
_firebaseAppID = [firebaseAppID copy ];
203
- _APNSInfo = [APNSInfo copy ];
190
+ _APNSInfo = [rawAPNSInfo copy ];
204
191
_cacheTime = cacheTime;
205
192
}
206
193
return self;
@@ -212,16 +199,8 @@ - (void)encodeWithCoder:(NSCoder *)aCoder {
212
199
[aCoder encodeObject: self .token forKey: kFIRInstanceIDTokenKey ];
213
200
[aCoder encodeObject: self .appVersion forKey: kFIRInstanceIDAppVersionKey ];
214
201
[aCoder encodeObject: self .firebaseAppID forKey: kFIRInstanceIDFirebaseAppIDKey ];
215
- NSData *rawAPNSInfo;
216
202
if (self.APNSInfo ) {
217
- // TODO(chliangGoogle: Use the new API and secureCoding protocol.
218
- [NSKeyedArchiver setClassName: @" FIRInstanceIDAPNSInfo" forClass: [FIRMessagingAPNSInfo class ]];
219
- #pragma clang diagnostic push
220
- #pragma clang diagnostic ignored "-Wdeprecated-declarations"
221
- rawAPNSInfo = [NSKeyedArchiver archivedDataWithRootObject: self .APNSInfo];
222
- #pragma clang diagnostic pop
223
-
224
- [aCoder encodeObject: rawAPNSInfo forKey: kFIRInstanceIDAPNSInfoKey ];
203
+ [aCoder encodeObject: self .APNSInfo forKey: kFIRInstanceIDAPNSInfoKey ];
225
204
}
226
205
[aCoder encodeObject: self .cacheTime forKey: kFIRInstanceIDCacheTimeKey ];
227
206
}
0 commit comments