在Android中集成"Facebook login"和"Graphi API"时面临问题



我正在将Facebook sdk集成到我的Android应用程序中,集成的目的是获取用户的个人资料信息,例如

  1. 名字
  2. 电子邮件
  3. 编号
  4. 生日

我已经使用软件包名称在Facebook开发人员控制台上注册了我的应用程序,添加了开发密钥哈希,并向任何人公开了应用程序。我为此目的使用了图形 API

package info.colabore.freewifi.activities;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import info.colabore.freewifi.R;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.GraphRequest;
import com.facebook.GraphResponse;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
import org.json.JSONException;
import org.json.JSONObject;
public class LoginWithFB extends AppCompatActivity {
private CallbackManager callbackManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login_with_fb);
callbackManager = CallbackManager.Factory.create();
LoginButton btnLoginFb = (LoginButton) findViewById(R.id.login_button);
btnLoginFb.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
System.out.println("onSuccess");
String accessToken = loginResult.getAccessToken().getToken();
Log.i("accessToken", accessToken);
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
Log.i("LoginActivity", response.toString());
// Get facebook data from login
try {
Toast.makeText(LoginWithFB.this, object.getString("name"), Toast.LENGTH_SHORT).show();
Toast.makeText(LoginWithFB.this, object.getString("email"), Toast.LENGTH_SHORT).show();
Toast.makeText(LoginWithFB.this, object.getString("gender"), Toast.LENGTH_SHORT).show();
Toast.makeText(LoginWithFB.this, object.getString("birthday"), Toast.LENGTH_SHORT).show();
}
catch (JSONException e){
Toast.makeText(LoginWithFB.this, "error"+e, Toast.LENGTH_SHORT).show();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id, name, email,gender, birthday, location"); // Parámetros que pedimos a facebook
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
System.out.println("onCancel");
}
@Override
public void onError(FacebookException exception) {
System.out.println("onError");
Log.v("LoginActivity", exception.getCause().toString());
}
});
}
@Override
protected void onActivityResult(int requestCode, int responseCode, Intent intent) {
super.onActivityResult(requestCode, responseCode, intent);
//Facebook login
callbackManager.onActivityResult(requestCode, responseCode, intent);
}
}

当我在自己的设备(AUSS Zenfone-5(上运行我的应用程序时,我在Facebook开发人员控制台上添加了其开发密钥哈希,然后我获得了所有信息(姓名,电子邮件,生日(,但是当我在其他设备上运行时,然后调用onError((方法。此外,我已经生成了发布密钥,当我在我的设备和其他设备上运行 release.apk 文件时,我收到此错误。"ey 哈希与任何存储的密钥哈希都不匹配。在 http://developers.facebook.com/..."处配置应用密钥哈希。如果有人知道问题在哪里,请帮助我。

截图

如果与调试不同,则发布密钥哈希,因此您还必须将其添加到FB控制台。 在哪里生成密钥哈希?

最新更新