[facebook] 액세스 토큰을 사용하여 Facebook 사용자 ID를 얻는 방법

Facebook 데스크톱 애플리케이션이 있고 Graph API를 사용하고 있습니다. 액세스 토큰을 얻을 수 있지만 그 후에는 사용자 ID를 얻는 방법을 모릅니다.

내 흐름은 다음과 같습니다.

  1. 필요한 모든 확장 권한을 사용 하여 사용자를 https://graph.facebook.com/oauth/authorize 로 보냅니다 .

  2. 내 리디렉션 페이지에서 Facebook에서 코드를 얻습니다.

  3. 그런 다음 API 키로 graph.facebook.com/oauth/access_token에 HTTP 요청을 수행 하고 응답에서 액세스 토큰을 얻습니다.

그 시점부터 사용자 ID를 얻을 수 없습니다.

이 문제를 어떻게 해결할 수 있습니까?



답변

Graph API를 사용하여 현재 사용자 ID를 얻으려면 다음 주소로 요청을 보내십시오.

https://graph.facebook.com/me?access_token=...


답변

가장 쉬운 방법은

https://graph.facebook.com/me?fields=id&access_token="xxxxx"

그러면 사용자 ID 만 포함 된 json 응답이 표시됩니다.


답변

페이스 북 액세스 토큰도 비슷해 보입니다. “1249203702 | 2.h1MTNeLqcLqw __. 86400.129394400-605430316 | -WE1iH_CV-afTgyhDPc”

사용하여 중간 부분을 추출하는 경우 | 당신을 나누기 위해

2.h1MTNeLqcLqw __. 86400.129394400-605430316

그런 다음 다시-

마지막 부분 605430316은 사용자 ID입니다.

다음은 액세스 토큰에서 사용자 ID를 추출하는 C # 코드입니다.

   public long ParseUserIdFromAccessToken(string accessToken)
   {
        Contract.Requires(!string.isNullOrEmpty(accessToken);

        /*
         * access_token:
         *   1249203702|2.h1MTNeLqcLqw__.86400.129394400-605430316|-WE1iH_CV-afTgyhDPc
         *                                               |_______|
         *                                                   |
         *                                                user id
         */

        long userId = 0;

        var accessTokenParts = accessToken.Split('|');

        if (accessTokenParts.Length == 3)
        {
            var idPart = accessTokenParts[1];
            if (!string.IsNullOrEmpty(idPart))
            {
                var index = idPart.LastIndexOf('-');
                if (index >= 0)
                {
                    string id = idPart.Substring(index + 1);
                    if (!string.IsNullOrEmpty(id))
                    {
                        return id;
                    }
                }
            }
        }

        return null;
    }

경고 :
액세스 토큰의 구조는 문서화되지 않았으며 항상 위의 패턴에 맞지 않을 수 있습니다. 자신의 책임하에 사용하십시오.

업데이트
Facebook의 변경으로 인해. 암호화 된 액세스 토큰에서 사용자 ID를 가져 오는 데 선호되는 방법은 다음과 같습니다.

try
{
    var fb = new FacebookClient(accessToken);
    var result = (IDictionary<string, object>)fb.Get("/me?fields=id");
    return (string)result["id"];
}
catch (FacebookOAuthException)
{
    return null;
}


답변

onSuccess (LoginResult loginResult) 에서 아래 코드를 사용할 수 있습니다.

loginResult.getAccessToken (). getUserId ();


답변

다른 Graph API를 누르기 만하면됩니다.

https://graph.facebook.com/me?access_token={access-token}

이메일 ID와 사용자 ID (Facebook 용)도 제공합니다.


답변

최신 API를 사용하여 사용한 코드는 다음과 같습니다.

/*params*/
NSDictionary *params = @{
                         @"access_token": [[FBSDKAccessToken currentAccessToken] tokenString],
                         @"fields": @"id"
                         };
/* make the API call */
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
                              initWithGraphPath:@"me"
                              parameters:params
                              HTTPMethod:@"GET"];

[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
                                      id result,
                                      NSError *error) {
    NSDictionary *res = result;
    //res is a dict that has the key
    NSLog([res objectForKey:@"id"]);


답변

FacebookSDK v2.1에서 (이전 버전을 확인할 수 없습니다). 우리는

NSString *currentUserFBID = [FBSession activeSession].accessTokenData.userID;

그러나 FacebookSDK의 댓글에 따르면

@discussion iOS 시스템 계정과 같은 로그인 동작에는 채워지지 않을 수 있습니다.

따라서 사용 가능한지 확인한 다음 사용 여부를 확인하거나 요청을 호출하여 사용자 ID를 가져와야 할 수 있습니다.