Iphone 如何在iOS上获取Facebook访问令牌

Iphone 如何在iOS上获取Facebook访问令牌,iphone,facebook,access-token,Iphone,Facebook,Access Token,我是新手。我有以下代码: [facebook authorize:nil delegate:self]; NSString *string1=[facebook accessToken]; NSLog(string1); 日志显示:mifog1ws7dl88g6d95uxmzz7gcshswx(FHuvZkmW0E.eyjpdiijnzkfb1c5znbamgezowm2rznkbeeifq.lnjl06lsoqco9arqf3ur2xqhku3cmhdbkkkpgg351eb33lgxvv9

我是新手。我有以下代码:

[facebook authorize:nil delegate:self];
NSString *string1=[facebook accessToken];
NSLog(string1);
日志显示:
mifog1ws7dl88g6d95uxmzz7gcshswx(FHuvZkmW0E.eyjpdiijnzkfb1c5znbamgezowm2rznkbeeifq.lnjl06lsoqco9arqf3ur2xqhku3cmhdbkkkpgg351eb33lgxvv96hh5r860kdjl0cl8qezw0goveryxnhuuwxlizv364svkdxizc3ban9p\u74r2r2axl1znoatymmkq\asq2h8zn4xg8znbd9wwwg9gjg8zwgj>


这似乎太长,不能作为访问令牌。我读到它应该只有40个字符长。我做错了什么?

您可以使用委托方法:

- (void)fbDialogLogin:(NSString *)token expirationDate:(NSDate *)expirationDate 

有关更多信息,请参考以下问题:

如果您使用的是Facebook SDK,则可以使用
FBSession
对象获取和访问令牌。 如果用户已通过应用程序身份验证,并且您有活动会话,请使用:

NSString * accessToken = [[FBSession activeSession] accessToken];
获取访问令牌


它对我很有用。

从2013年3月20日开始使用Facebook SDK的v3.2.1

NSString *fbAccessToken = [[[FBSession activeSession] accessTokenData] accessToken];
如果您喜欢点语法

NSString *fbAccessToken = [FBSession activeSession].accessTokenData.accessToken;
对于使用Swift的用户

var fbAccessToken = FBSession.activeSession().accessTokenData.accessToken
v4.1.0 SDK以后版本的更新

目标-C

迅捷的


对于需要结合SDK 3.2.1使用swift的用户:

let token = FBSession.activeSession().accessTokenData.accessToken
适用于SDK 4.0

NSString *fbAccessToken = [[FBSDKAccessToken currentAccessToken] tokenString];

对于Swift 1.2和FB SDK 4.1:

var fbAccessToken = FBSDKAccessToken.currentAccessToken().tokenString

检查以下代码以从ACAccountStore获取访问令牌:

ACAccountStore *accountStore = [[ACAccountStore alloc] init];
ACAccountType *accountType =  [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
NSDictionary *FBOptions = [NSDictionary dictionaryWithObjectsAndKeys:FACEBOOK_APP_ID, ACFacebookAppIdKey,@[@"email"],ACFacebookPermissionsKey, nil];

[accountStore requestAccessToAccountsWithType:accountType options:FBOptions completion:
 ^(BOOL granted, NSError *error) {
     if (granted) {

         NSArray *facebookAccounts = [accountStore accountsWithAccountType:accountType];
         FBAccount = [facebookAccounts firstObject];
         NSLog(@"token :%@",[[FBAccount credential] oauthToken]);

     } else {
         //Error
         NSLog(@"error getting permission %@",error);
         if([error code]== ACErrorAccountNotFound){
             NSLog(@"Account not found. Please setup your account in settings app"); 
         }
         else {
             NSLog(@"Account access denied");
         }

     }
 }];
Swift 4(2018年) 用于FacebookLogin(0.9.0)Swift


我不确定长度,你可以在这个问题上看到没有固定的长度,谢谢@NurImranIzamQuick follow question-生成的这个令牌是他们文档中描述的“长期”访问令牌吗?谢谢我相信从本地客户端获得的所有代币都被认为是“长期的”。唯一的“短期”可能是针对web客户端。如果我错了,请随时纠正我。您可以在此处阅读更多信息:对于Swift,语法为FBSDKAccessToken.currentAccessToken().tokenStringFor Swift 3,FBSDKAccessToken.current().TokenStringAbdus.me建议的方法在3.2 SDK中不推荐使用。访问accessToken的正确方法是Nur Iman Izam建议的方法:如果([[FBSession activeSession]isOpen]){NSString*fbAccessToken=[[FBSession activeSession]accessTokenData]accessToken];…}虽然这个代码片段可以解决这个问题,但确实有助于提高文章的质量。请记住,您回答的问题不仅针对此人,而且针对将来可能不知道您的代码为何如此的读者。
var fbAccessToken = FBSDKAccessToken.currentAccessToken().tokenString
ACAccountStore *accountStore = [[ACAccountStore alloc] init];
ACAccountType *accountType =  [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
NSDictionary *FBOptions = [NSDictionary dictionaryWithObjectsAndKeys:FACEBOOK_APP_ID, ACFacebookAppIdKey,@[@"email"],ACFacebookPermissionsKey, nil];

[accountStore requestAccessToAccountsWithType:accountType options:FBOptions completion:
 ^(BOOL granted, NSError *error) {
     if (granted) {

         NSArray *facebookAccounts = [accountStore accountsWithAccountType:accountType];
         FBAccount = [facebookAccounts firstObject];
         NSLog(@"token :%@",[[FBAccount credential] oauthToken]);

     } else {
         //Error
         NSLog(@"error getting permission %@",error);
         if([error code]== ACErrorAccountNotFound){
             NSLog(@"Account not found. Please setup your account in settings app"); 
         }
         else {
             NSLog(@"Account access denied");
         }

     }
 }];
- (IBAction)facebookClick:(id)sender {

    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];

     [login logOut];

    login = [[FBSDKLoginManager alloc] init];


    login.loginBehavior = FBSDKLoginBehaviorWeb;
    [login logInWithReadPermissions:@[@"email"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
        if (error)
        {
                 NSLog(@"Process error");
             //   [login logOut];
         } else if (result.isCancelled) {
             NSLog(@"Cancelled");
            // [login logOut];
         } else {
             NSLog(@"Logged in");
             [self getUserInformation];
         }
     }];
}
FBSDKAccessToken.current().tokenString
import FacebookLogin

AccessToken.current?.tokenString