[英]Android facebook login callback not happening
I'm trying to implement Facebook login for my android app using the facebook sdk 4.1.0.我正在尝试使用 facebook sdk 4.1.0 为我的 android 应用程序实现 Facebook 登录。 The LoginButton is placed inside a splashActivity and upon successful login should start the MainActivity. LoginButton 放置在 splashActivity 内,成功登录后应启动 MainActivity。 However, the facebook callback method is not runnning at all for me and I can't figure out what is causing this.但是,facebook 回调方法对我来说根本没有运行,我无法弄清楚是什么导致了这种情况。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(this.getApplicationContext());
setContentView(R.layout.activity_splash);
callbackManager = CallbackManager.Factory.create();
cache = new DiskBasedCache(getApplicationContext().getCacheDir(), 1024 * 1024);
network = new BasicNetwork(new HurlStack());
mRequestQueue = new RequestQueue(cache, network);
getUserInfo();
skip = (Button) findViewById(R.id.btnSkip);
skip.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent done = new Intent(getBaseContext(),MainActivity.class);
startActivity(done);
finish();
}
});
loginButton = (LoginButton) findViewById(R.id.login_button);
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Call private method
onFblogin();
loginButton.post(new Runnable() {
@Override
public void run() {
loginButton.setVisibility(View.INVISIBLE);
}
});
}
});
accessTokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken newAccessToken) {
if(newAccessToken == null){
LoginManager.getInstance().logOut();
}
}
};
AccessToken accessToken = AccessToken.getCurrentAccessToken();
if(accessToken != null){
skip.setVisibility(View.INVISIBLE);
Intent done = new Intent(this,MainActivity.class);
startActivity(done);
finish();
}
ProfileTracker profileTracker = new ProfileTracker() {
@Override
protected void onCurrentProfileChanged(Profile oldProfile, Profile newProfile) {
}
};
accessTokenTracker.startTracking();
}
private void onFblogin() {
// Set permissions
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("email", "public_profile"));
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
AccessToken token = loginResult.getAccessToken();
// Set denied = loginResult.getRecentlyDeniedPermissions();
// loginResult.getRecentlyGrantedPermissions();
System.out.println("Success");
GraphRequest.newMeRequest(
loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject jsonObject, GraphResponse graphResponse) {
if (graphResponse.getError() != null) {
// handle error
System.out.println("ERROR");
} else {
try {
mRequestQueue.start();
String jsonresult = String.valueOf(jsonObject);
System.out.println("JSON Result" + jsonresult);
JSONObject loginDetailsJSON = new JSONObject();
loginDetailsJSON.put("id", jsonObject.getString("id"));
loginDetailsJSON.put("name", jsonObject.getString("name"));
loginDetailsJSON.put("first_name", jsonObject.getString("first_name"));
loginDetailsJSON.put("last_name", jsonObject.getString("last_name"));
loginDetailsJSON.put("link", jsonObject.getString("link"));
loginDetailsJSON.put("gender", jsonObject.getString("gender"));
loginDetailsJSON.put("locale", jsonObject.getString("locale"));
loginDetailsJSON.put("timezone", jsonObject.getString("timezone"));
loginDetailsJSON.put("email", jsonObject.getString("email"));
loginDetailsJSON.put("verified", jsonObject.getString("verified"));
loginDetailsJSON.put("updated_time", jsonObject.getString("updated_time"));
loginDetailsJSON.put("age_range", "");
loginDetailsJSON.put("connector", "FB");
JsonObjectRequest req = new JsonObjectRequest(Request.Method.POST,
connetionStrings.LoginUrl, loginDetailsJSON.toString(), new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
VolleyLog.v("Response:%n %s", response.toString(4));
Log.d("response: ", response.toString(4));
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.e("Error: ", error.getMessage());
Toast toast = Toast.makeText(getApplicationContext(), "Please try again", Toast.LENGTH_LONG);
toast.show();
}
});
mRequestQueue.add(req);
Intent done = new Intent(getBaseContext(), MainActivity.class);
startActivity(done);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}).executeAsync();
}
@Override
public void onCancel() {
Log.d("TAG_CANCEL", "On cancel");
}
@Override
public void onError(FacebookException error) {
Log.d("TAG_ERROR", error.toString());
}
});
}
Look at the https://developers.facebook.com/docs/facebook-login/android/v2.3#get_current and check, if you implemented everything (what I'm missing in your code is onActivityResult callback).查看https://developers.facebook.com/docs/facebook-login/android/v2.3#get_current并检查,如果您实现了所有内容(我在您的代码中缺少的是 onActivityResult 回调)。 Don't put initation of callback into onFbLogin method - put it directly in onCreate.不要将回调的启动放入 onFbLogin 方法中 - 将其直接放入 onCreate 中。 You don't have to add listener to LoginButton.您不必向 LoginButton 添加侦听器。 It works just after inflation.它在通货膨胀之后起作用。 And visibility of UI elements you can change in callback methods of FacebookCallback listener (make your activity implementation of it).您可以在 FacebookCallback 侦听器的回调方法中更改 UI 元素的可见性(使您的活动实现它)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.