我正在创建一个有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."
答案 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;
}