| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- // Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
- //
- // You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
- // copy, modify, and distribute this software in source code or binary form for use
- // in connection with the web services and APIs provided by Facebook.
- //
- // As with any software that integrates with the Facebook platform, your use of
- // this software is subject to the Facebook Developer Principles and Policies
- // [http://developers.facebook.com/policy/]. This copyright notice shall be
- // included in all copies or substantial portions of the software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- #import <Foundation/Foundation.h>
- #import <FBSDKCoreKit/FBSDKCopying.h>
- #import <FBSDKCoreKit/FBSDKGraphRequestConnection.h>
- #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
- /**
- Notification indicating that the `currentAccessToken` has changed.
- the userInfo dictionary of the notification will contain keys
- `FBSDKAccessTokenChangeOldKey` and
- `FBSDKAccessTokenChangeNewKey`.
- */
- FOUNDATION_EXPORT NSNotificationName const FBSDKAccessTokenDidChangeNotification;
- #else
- /**
- Notification indicating that the `currentAccessToken` has changed.
- the userInfo dictionary of the notification will contain keys
- `FBSDKAccessTokenChangeOldKey` and
- `FBSDKAccessTokenChangeNewKey`.
- */
- FOUNDATION_EXPORT NSString *const FBSDKAccessTokenDidChangeNotification;
- #endif
- /**
- 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;
- FOUNDATION_EXPORT NSString *const FBSDKAccessTokenDidChangeUserID
- DEPRECATED_MSG_ATTRIBUTE("Renamed `FBSDKAccessTokenDidChangeUserIDKey`");
- /*
- 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;
- /*
- 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;
- /*
- A key in the notification's userInfo that will be set
- if and only if the token has expired.
- */
- FOUNDATION_EXPORT NSString *const FBSDKAccessTokenDidExpireKey;
- FOUNDATION_EXPORT NSString *const FBSDKAccessTokenDidExpire
- DEPRECATED_MSG_ATTRIBUTE("Renamed `FBSDKAccessTokenDidExpireKey`");
- /**
- Represents an immutable access token for using Facebook services.
- */
- @interface FBSDKAccessToken : NSObject<FBSDKCopying, NSSecureCoding>
- /**
- Returns the app ID.
- */
- @property (readonly, copy, nonatomic) NSString *appID;
- /**
- Returns the expiration date for data access
- */
- @property (readonly, copy, nonatomic) NSDate *dataAccessExpirationDate;
- /**
- Returns the known declined permissions.
- */
- @property (readonly, copy, nonatomic) NSSet *declinedPermissions;
- /**
- Returns the expiration date.
- */
- @property (readonly, copy, nonatomic) NSDate *expirationDate;
- /**
- Returns the known granted permissions.
- */
- @property (readonly, copy, nonatomic) NSSet *permissions;
- /**
- Returns the date the token was last refreshed.
- */
- @property (readonly, copy, nonatomic) NSDate *refreshDate;
- /**
- Returns the opaque token string.
- */
- @property (readonly, copy, nonatomic) NSString *tokenString;
- /**
- Returns the user ID.
- */
- @property (readonly, copy, nonatomic) NSString *userID;
- /**
- Returns whether the access token is expired by checking its expirationDate property
- */
- @property (readonly, assign, nonatomic, getter = isExpired) BOOL expired;
- /**
- Returns whether user data access is still active for the given access token
- */
- @property (readonly, assign, nonatomic, getter = isDataAccessExpired) 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 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).
- 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 *)permissions
- declinedPermissions:(NSArray *)declinedPermissions
- appID:(NSString *)appID
- userID:(NSString *)userID
- expirationDate:(NSDate *)expirationDate
- refreshDate:(NSDate *)refreshDate;
- /**
- 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 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 *)permissions
- declinedPermissions:(NSArray *)declinedPermissions
- appID:(NSString *)appID
- userID:(NSString *)userID
- expirationDate:(NSDate *)expirationDate
- refreshDate:(NSDate *)refreshDate
- dataAccessExpirationDate:(NSDate *)dataAccessExpirationDate
- NS_DESIGNATED_INITIALIZER;
- /**
- Convenience getter to determine if a permission has been granted
- @param permission The permission to check.
- */
- - (BOOL)hasGranted:(NSString *)permission;
- /**
- 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;
- /**
- Returns 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`).
- */
- + (FBSDKAccessToken *)currentAccessToken;
- /**
- Returns YES if currentAccessToken is not nil AND currentAccessToken is not expired
- */
- + (BOOL)currentAccessTokenIsActive;
- /**
- Sets the "global" access token that represents the currently logged in user.
- @param token The access token to set.
- This will broadcast a notification and save the token to the app keychain.
- */
- + (void)setCurrentAccessToken:(FBSDKAccessToken *)token;
- /**
- Refresh the current access token's permission state and extend the token's expiration date,
- if possible.
- @param completionHandler 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)refreshCurrentAccessToken:(FBSDKGraphRequestHandler)completionHandler;
- @end
|