123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- /*
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- * All rights reserved.
- *
- * This source code is licensed under the license found in the
- * LICENSE file in the root directory of this source tree.
- */
- #import <Foundation/Foundation.h>
- #import <FBSDKCoreKit/FBSDKAccessTokenProviding.h>
- #import <FBSDKCoreKit/FBSDKTokenStringProviding.h>
- #import <FBSDKCoreKit/FBSDKGraphRequestConnection.h>
- #import <FBSDKCoreKit/FBSDKTokenCaching.h>
- @protocol FBSDKGraphRequestConnectionFactory;
- @protocol FBSDKGraphRequestPiggybackManaging;
- @protocol FBSDKErrorCreating;
- NS_ASSUME_NONNULL_BEGIN
- /**
- Notification indicating that the `currentAccessToken` has changed.
- the userInfo dictionary of the notification will contain keys
- `FBSDKAccessTokenChangeOldKey` and
- `FBSDKAccessTokenChangeNewKey`.
- */
- FOUNDATION_EXPORT NSNotificationName const FBSDKAccessTokenDidChangeNotification
- NS_SWIFT_NAME(AccessTokenDidChange);
- /**
- A key in the notification's userInfo that will be set
- if and only if the user ID changed between the old and new tokens.
- Token refreshes can occur automatically with the SDK
- which do not change the user. If you're only interested in user
- changes (such as logging out), you should check for the existence
- of this key. The value is a NSNumber with a boolValue.
- On a fresh start of the app where the SDK reads in the cached value
- of an access token, this key will also exist since the access token
- is moving from a null state (no user) to a non-null state (user).
- */
- FOUNDATION_EXPORT NSString *const FBSDKAccessTokenDidChangeUserIDKey
- NS_SWIFT_NAME(AccessTokenDidChangeUserIDKey);
- /*
- key in notification's userInfo object for getting the old token.
- If there was no old token, the key will not be present.
- */
- FOUNDATION_EXPORT NSString *const FBSDKAccessTokenChangeOldKey
- NS_SWIFT_NAME(AccessTokenChangeOldKey);
- /*
- key in notification's userInfo object for getting the new token.
- If there is no new token, the key will not be present.
- */
- FOUNDATION_EXPORT NSString *const FBSDKAccessTokenChangeNewKey
- NS_SWIFT_NAME(AccessTokenChangeNewKey);
- /*
- A key in the notification's userInfo that will be set
- if and only if the token has expired.
- */
- FOUNDATION_EXPORT NSString *const FBSDKAccessTokenDidExpireKey
- NS_SWIFT_NAME(AccessTokenDidExpireKey);
- /// Represents an immutable access token for using Facebook services.
- NS_SWIFT_NAME(AccessToken)
- @interface FBSDKAccessToken : NSObject <NSCopying, NSObject, NSSecureCoding, FBSDKAccessTokenProviding, FBSDKTokenStringProviding>
- /**
- The "global" access token that represents the currently logged in user.
- The `currentAccessToken` is a convenient representation of the token of the
- current user and is used by other SDK components (like `FBSDKLoginManager`).
- */
- @property (class, nullable, nonatomic, copy) FBSDKAccessToken *currentAccessToken NS_SWIFT_NAME(current);
- /// Returns YES if currentAccessToken is not nil AND currentAccessToken is not expired
- @property (class, nonatomic, readonly, getter = isCurrentAccessTokenActive, assign) BOOL currentAccessTokenIsActive;
- /**
- Internal Type exposed to facilitate transition to Swift.
- API Subject to change or removal without warning. Do not use.
- @warning INTERNAL - DO NOT USE
- */
- @property (class, nullable, nonatomic, copy) id<FBSDKTokenCaching> tokenCache;
- /// Returns the app ID.
- @property (nonatomic, readonly, copy) NSString *appID;
- /// Returns the expiration date for data access
- @property (nonatomic, readonly, copy) NSDate *dataAccessExpirationDate;
- /// Returns the known declined permissions.
- @property (nonatomic, readonly, copy) NSSet<NSString *> *declinedPermissions
- NS_REFINED_FOR_SWIFT;
- /// Returns the known declined permissions.
- @property (nonatomic, readonly, copy) NSSet<NSString *> *expiredPermissions
- NS_REFINED_FOR_SWIFT;
- /// Returns the expiration date.
- @property (nonatomic, readonly, copy) NSDate *expirationDate;
- /// Returns the known granted permissions.
- @property (nonatomic, readonly, copy) NSSet<NSString *> *permissions
- NS_REFINED_FOR_SWIFT;
- /// Returns the date the token was last refreshed.
- @property (nonatomic, readonly, copy) NSDate *refreshDate;
- /// Returns the opaque token string.
- @property (nonatomic, readonly, copy) NSString *tokenString;
- /// Returns the user ID.
- @property (nonatomic, readonly, copy) NSString *userID;
- /// Returns whether the access token is expired by checking its expirationDate property
- @property (nonatomic, readonly, getter = isExpired, assign) BOOL expired;
- /// Returns whether user data access is still active for the given access token
- @property (nonatomic, readonly, getter = isDataAccessExpired, assign) BOOL dataAccessExpired;
- - (instancetype)init NS_UNAVAILABLE;
- + (instancetype)new NS_UNAVAILABLE;
- /**
- Initializes a new instance.
- @param tokenString the opaque token string.
- @param permissions the granted permissions. Note this is converted to NSSet and is only
- an NSArray for the convenience of literal syntax.
- @param declinedPermissions the declined permissions. Note this is converted to NSSet and is only
- an NSArray for the convenience of literal syntax.
- @param expiredPermissions the expired permissions. Note this is converted to NSSet and is only
- an NSArray for the convenience of literal syntax.
- @param appID the app ID.
- @param userID the user ID.
- @param expirationDate the optional expiration date (defaults to distantFuture).
- @param refreshDate the optional date the token was last refreshed (defaults to today).
- @param dataAccessExpirationDate the date which data access will expire for the given user
- (defaults to distantFuture).
- This initializer should only be used for advanced apps that
- manage tokens explicitly. Typical login flows only need to use `FBSDKLoginManager`
- along with `+currentAccessToken`.
- */
- - (instancetype)initWithTokenString:(NSString *)tokenString
- permissions:(NSArray<NSString *> *)permissions
- declinedPermissions:(NSArray<NSString *> *)declinedPermissions
- expiredPermissions:(NSArray<NSString *> *)expiredPermissions
- appID:(NSString *)appID
- userID:(NSString *)userID
- expirationDate:(nullable NSDate *)expirationDate
- refreshDate:(nullable NSDate *)refreshDate
- dataAccessExpirationDate:(nullable NSDate *)dataAccessExpirationDate
- NS_DESIGNATED_INITIALIZER;
- /**
- Convenience getter to determine if a permission has been granted
- @param permission The permission to check.
- */
- // UNCRUSTIFY_FORMAT_OFF
- - (BOOL)hasGranted:(NSString *)permission
- NS_SWIFT_NAME(hasGranted(permission:));
- // UNCRUSTIFY_FORMAT_ON
- /**
- Compares the receiver to another FBSDKAccessToken
- @param token The other token
- @return YES if the receiver's values are equal to the other token's values; otherwise NO
- */
- - (BOOL)isEqualToAccessToken:(FBSDKAccessToken *)token;
- /**
- Refresh the current access token's permission state and extend the token's expiration date,
- if possible.
- @param completion an optional callback handler that can surface any errors related to permission refreshing.
- On a successful refresh, the currentAccessToken will be updated so you typically only need to
- observe the `FBSDKAccessTokenDidChangeNotification` notification.
- If a token is already expired, it cannot be refreshed.
- */
- + (void)refreshCurrentAccessTokenWithCompletion:(nullable FBSDKGraphRequestCompletion)completion;
- /**
- Internal method exposed to facilitate transition to Swift.
- API Subject to change or removal without warning. Do not use.
- @warning INTERNAL - DO NOT USE
- */
- + (void)configureWithTokenCache:(id<FBSDKTokenCaching>)tokenCache
- graphRequestConnectionFactory:(id<FBSDKGraphRequestConnectionFactory>)graphRequestConnectionFactory
- graphRequestPiggybackManager:(id<FBSDKGraphRequestPiggybackManaging>)graphRequestPiggybackManager
- errorFactory:(id<FBSDKErrorCreating>)errorFactory
- NS_SWIFT_NAME(configure(tokenCache:graphRequestConnectionFactory:graphRequestPiggybackManager:errorFactory:));
- @end
- NS_ASSUME_NONNULL_END
|