【问题标题】:How to get a Facebook access token on iOS如何在 iOS 上获取 Facebook 访问令牌
【发布时间】:2011-08-26 08:41:13
【问题描述】:

iOS 初学者在这里。我有以下代码:

[facebook authorize:nil delegate:self];
NSString *string1=[facebook accessToken];
NSLog(string1);

日志显示:miFOG1WS_7DL88g6d95Uxmzz7GCShsWx_FHuvZkmW0E.eyJpdiI6IjNZZkFBY1c5ZnBaMGEzOWM2RzNKbEEifQ.LNjl06lsOQCO9ArVARqff3Ur2XQHku3CMHDBKkpGg351EB33LGxVv96Hh5R860KDJL0cLq8QezSW0GovYxnhUucOwxlITV364sVKDXIzC3bAn9P_74r2Axl1SgOaTyMMkQ_aSQ2OWh-8d3Zn9BDt3pXVWzBLJ9I4XAosnw0GjuE

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

【问题讨论】:

    标签: iphone facebook access-token


    【解决方案1】:

    对于 FacebookLogin (0.9.0) Swift

    import FacebookLogin
    
    AccessToken.current?.tokenString
    

    【讨论】:

      【解决方案2】:

      斯威夫特 4 (2018)

      FBSDKAccessToken.current().tokenString
      

      【讨论】:

        【解决方案3】:
        - (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];
                 }
             }];
        }
        

        【讨论】:

        • 虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您不仅要为这个人回答这个问题,还要为将来的读者回答这个问题,他们可能不知道为什么您的代码是这样的。
        【解决方案4】:

        检查以下代码以从 ACAccountStore 获取 access_token :

        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");
                 }
        
             }
         }];
        

        【讨论】:

          【解决方案5】:

          使用截至 2013 年 3 月 20 日的 v3.2.1 版 Facebook SDK。

          NSString *fbAccessToken = [[[FBSession activeSession] accessTokenData] accessToken];
          

          如果你更喜欢点语法,

          NSString *fbAccessToken = [FBSession activeSession].accessTokenData.accessToken;
          

          对于那些使用 Swift 的人;

          var fbAccessToken = FBSession.activeSession().accessTokenData.accessToken
          

          从 v4.1.0 SDK 开始更新

          Objective-C

          NSString *fbAccessToken = [FBSDKAccessToken currentAccessToken].tokenString;
          

          斯威夫特

          var fbAccessToken = FBSDKAccessToken.currentAccessToken().tokenString
          

          【讨论】:

          • 感谢@NurImranIzam
          • 快速跟进问题 - 生成的这个令牌会是他们文档中描述的“长期”访问令牌吗?谢谢!
          • 我相信从本地客户端获得的所有令牌都被认为是“长期的”。唯一一次它的“短期”可能是针对网络客户端的。如果我错了,请随时纠正我。你可以在这里阅读更多信息:developers.facebook.com/docs/facebook-login/access-tokens
          • 对于 Swift 的语法是 FBSDKAccessToken.currentAccessToken().tokenString
          • 对于 Swift 3,FBSDKAccessToken.current().tokenString
          【解决方案6】:

          对于 Swift 1.2 和 FB SDK 4.1:

          var fbAccessToken = FBSDKAccessToken.currentAccessToken().tokenString
          

          【讨论】:

            【解决方案7】:

            对于 SDK 4.0

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

            【讨论】:

              【解决方案8】:

              对于需要在 SDK 3.2.1 中使用 swift 的人:

              let token = FBSession.activeSession().accessTokenData.accessToken
              

              【讨论】:

                【解决方案9】:

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

                NSString * accessToken = [[FBSession activeSession] accessToken];
                

                获取访问令牌。

                它对我有用。

                【讨论】:

                • abdus.me 建议的方法在 3.2 SDK 中已弃用。访问 accessToken 的正确方法是 Nur Iman Izam 建议的方法: if ([[FBSession activeSession] isOpen]) { NSString *fbAccessToken = [[[FBSession activeSession] accessTokenData] accessToken]; ... }
                【解决方案10】:

                您可以使用委托方法:

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

                更多信息可以参考以下问题:Facebook Access Token

                【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2013-06-20
                • 2012-10-09
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-04-26
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多