/* * Copyright 2019 Google * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #import NS_ASSUME_NONNULL_BEGIN @class FIRInstanceIDBackupExcludedPlist; @class FIRInstanceIDCheckinPreferences; @class FIRInstanceIDCheckinStore; @class FIRInstanceIDTokenInfo; @class FIRInstanceIDTokenStore; @class FIRInstanceIDStore; @protocol FIRInstanceIDStoreDelegate /** * This is called when the store has decided to invalide its tokens associated with the * previous checkin credentials. After deleting the tokens locally, it calls this method * to notify the delegate of the change. If possible, the delegate should use this time * to request the invalidation of the tokens on the server as well. */ - (void)store:(FIRInstanceIDStore *)store didDeleteFCMScopedTokensForCheckin:(FIRInstanceIDCheckinPreferences *)checkin; @end /** * Used to persist the InstanceID tokens. This is also used to cache the Checkin * credentials. The store also checks for stale entries in the store and * let's us know if things in the store are stale or not. It does not however * acts on stale entries in anyway. */ @interface FIRInstanceIDStore : NSObject /** * The delegate set in the initializer which is notified of changes in the store. */ @property(nonatomic, readonly, weak) NSObject *delegate; - (instancetype)init __attribute__((unavailable("Use initWithDelegate: instead."))); /** * Initialize a default store to persist InstanceID tokens and options. * * @param delegate The delegate with which to be notified of changes in the store. * @return Store to persist InstanceID tokens. */ - (instancetype)initWithDelegate:(NSObject *)delegate; /** * Initialize a store with the token store used to persist tokens, and a checkin store. * Used for testing. * * @param checkinStore Persistent store that persists checkin preferences. * @param tokenStore Persistent store that persists tokens. * * @return Store to persist InstanceID tokens and options. */ - (instancetype)initWithCheckinStore:(FIRInstanceIDCheckinStore *)checkinStore tokenStore:(FIRInstanceIDTokenStore *)tokenStore delegate:(NSObject *)delegate NS_DESIGNATED_INITIALIZER; #pragma mark - Save /** * Save the instanceID token info to the store. * * @param tokenInfo The token info to store. * @param handler The callback handler which is invoked when the operation is complete, * with an error if there is any. */ - (void)saveTokenInfo:(FIRInstanceIDTokenInfo *)tokenInfo handler:(void (^)(NSError *))handler; #pragma mark - Get /** * Get the cached token info. * * @param authorizedEntity The authorized entity for which we want the token. * @param scope The scope for which we want the token. * * @return The cached token info if any for the given authorizedEntity and scope else * returns nil. */ - (nullable FIRInstanceIDTokenInfo *)tokenInfoWithAuthorizedEntity:(NSString *)authorizedEntity scope:(NSString *)scope; /** * Return all cached token infos from the Keychain. * * @return The cached token infos, if any, that are stored in the Keychain. */ - (NSArray *)cachedTokenInfos; #pragma mark - Delete /** * Remove the cached token for a given authorizedEntity and scope. If the token was never * cached or deleted from the cache before this is a no-op. * * @param authorizedEntity The authorizedEntity for the cached token. * @param scope The scope for the cached token */ - (void)removeCachedTokenWithAuthorizedEntity:(NSString *)authorizedEntity scope:(NSString *)scope; /** * Removes all cached tokens from the persistent store. In case deleting the cached tokens * fails we try to delete the backup excluded plist that stores the tokens. * * @param handler The callback handler which is invoked when the operation is complete, * with an error if there is any. * */ - (void)removeAllCachedTokensWithHandler:(nullable void (^)(NSError *error))handler; #pragma mark - Persisting Checkin Preferences /** * Save the checkin preferences * * @param preferences Checkin preferences to save. * @param handler The callback handler which is invoked when the operation is complete, * with an error if there is any. */ - (void)saveCheckinPreferences:(FIRInstanceIDCheckinPreferences *)preferences handler:(nullable void (^)(NSError *error))handler; /** * Return the cached checkin preferences. * * @return Checkin preferences. */ - (FIRInstanceIDCheckinPreferences *)cachedCheckinPreferences; /** * Remove the cached checkin preferences from the store. * * @param handler The callback handler which is invoked when the operation is complete, * with an error if there is any. */ - (void)removeCheckinPreferencesWithHandler:(nullable void (^)(NSError *error))handler; #pragma mark - Standard Directory sub-directory /** * Check if supported directory has InstanceID subdirectory * * @return YES if the Application Support directory has InstanceID subdirectory else NO. */ + (BOOL)hasSubDirectory:(NSString *)subDirectoryName; /** * Create InstanceID subdirectory in Application support directory. * * @return YES if the subdirectory was created successfully else NO. */ + (BOOL)createSubDirectory:(NSString *)subDirectoryName; /** * Removes Application Support subdirectory for InstanceID. * * @param error The error object if any while trying to delete the sub-directory. * * @return YES if the deletion was successful else NO. */ + (BOOL)removeSubDirectory:(NSString *)subDirectoryName error:(NSError **)error; @end NS_ASSUME_NONNULL_END