Facebook登录时访问令牌返回null

时间:2016-01-28 05:52:22

标签: android facebook-graph-api

我正在创建一个有Facebook登录的应用程序,我已经在应用程序中使用Facebook SDK for facebook登录,一切正常但在登录后我尝试从Graph API获取详细信息时,它在AccessToken中返回空值。 / p>

我已经在清单文件中提到了facebook app id和facebook活动。如何获取Facebook的访问令牌任何人都可以建议我,这对我来说将是很有帮助的。

我正在使用此代码获取数据:

public void RequestData(){
    System.out.println("Request data method ");

    final AccessToken accessToken = AccessToken.getCurrentAccessToken();
    System.out.println("access token = "+accessToken);

    GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(),
            new GraphRequest.GraphJSONObjectCallback() {
        @Override
        public void onCompleted(JSONObject object,GraphResponse response) {

            JSONObject jsonn = response.getJSONObject();
            try {
                if(jsonn != null){

                    String text = jsonn.getString("name")+
                            jsonn.getString("email")+
                            jsonn.getString("id")+
                            jsonn.getJSONObject("picture").getJSONObject("data").getString("url");

                    FpersonName = jsonn.getString("name");
                    FpersonEmail = jsonn.getString("email");
                    FpersonPhotoUrl = jsonn.getJSONObject("picture").getJSONObject("data").getString("url");
                    FpersonSocialId = jsonn.getString("id");
                    System.out.println("fb details = "+text);


                    if(FpersonName != null && FpersonEmail != null && FpersonPhotoUrl != null && FpersonSocialId != null){
                        loginFromFb = true;
                        new LoginGoogleAsyncTask().execute();
                    }
                }

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    });
    Bundle parameters = new Bundle();
    parameters.putString("fields", "id,name,link,email,picture");
    request.setParameters(parameters);
    request.executeAsync();
}

我还在oncreate()方法中定义了SDK,在onActivityResult中定义了CallBack。

这是访问令牌的错误:"D/GraphRequest: Warning: Request without access token missing application ID or client token."

2 个答案:

答案 0 :(得分:1)

在代码中包含个人资料跟踪器。当配置文件发生更改时,它的onCurrentProfileChanged()将被触发(最初,您的配置文件将为null,登录后它将更改为用户配置文件,访问令牌将可用)

mProfileTracker = new ProfileTracker() {
@Override
protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) {
// Include your method in here
requestData();
}
};

不要忘记在onDestroy()

中停止跟踪
@Override
    protected void onDestroy() {
        super.onDestroy();
        mProfileTracker.stopTracking();
    }

答案 1 :(得分:0)

使用此

private AccessTokenTracker accessTokenTracker;
private boolean isResumed = false;
accessTokenTracker = new AccessTokenTracker() {
            @Override
            protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken,
                                                       AccessToken currentAccessToken) {
                if (isResumed) {
                    if (currentAccessToken != null) {
                    } else {
                        // currentaccestoken has your accesstoken value
                    }
                }
            }
        };

@Override
    public void onResume() {
        super.onResume();
        isResumed = true;
    }

    @Override
    public void onPause() {
        super.onPause();
        isResumed = false;
    }