@@ -133,7 +133,11 @@ - (BOOL)isDefaultToken {
133133 return [self .scope isEqualToString: kFIRMessagingDefaultTokenScope ];
134134}
135135
136- #pragma mark - NSCoding
136+ #pragma mark - NSSecureCoding
137+
138+ + (BOOL )supportsSecureCoding {
139+ return YES ;
140+ }
137141
138142- (nullable instancetype )initWithCoder : (NSCoder *)aDecoder {
139143 // These value cannot be nil
@@ -164,30 +168,13 @@ - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
164168 if (firebaseAppID && ![firebaseAppID isKindOfClass: [NSString class ]]) {
165169 return nil ;
166170 }
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 ]]) {
170175 return nil ;
171176 }
172177
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-
191178 id cacheTime = [aDecoder decodeObjectForKey: kFIRInstanceIDCacheTimeKey ];
192179 if (cacheTime && ![cacheTime isKindOfClass: [NSDate class ]]) {
193180 return nil ;
@@ -200,7 +187,7 @@ - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
200187 _token = [token copy ];
201188 _appVersion = [appVersion copy ];
202189 _firebaseAppID = [firebaseAppID copy ];
203- _APNSInfo = [APNSInfo copy ];
190+ _APNSInfo = [rawAPNSInfo copy ];
204191 _cacheTime = cacheTime;
205192 }
206193 return self;
@@ -214,14 +201,7 @@ - (void)encodeWithCoder:(NSCoder *)aCoder {
214201 [aCoder encodeObject: self .firebaseAppID forKey: kFIRInstanceIDFirebaseAppIDKey ];
215202 NSData *rawAPNSInfo;
216203 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 ];
204+ [aCoder encodeObject: self .APNSInfo forKey: kFIRInstanceIDAPNSInfoKey ];
225205 }
226206 [aCoder encodeObject: self .cacheTime forKey: kFIRInstanceIDCacheTimeKey ];
227207}
0 commit comments