我在我的Android应用程序中集成了Facebook sdk,集成的目的是获取用户的个人资料信息,如
我已使用软件包名称在Facebook开发者控制台上注册了我的应用程序,添加了开发密钥-Hash并为任何人公开了应用程序。我为此目的使用了Graph 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/ ...处配置您的应用键哈希值”。如果有人知道哪里有问题,请帮助我。
答案 0 :(得分:0)
如果与调试不同,则发布的密钥哈希也必须将其添加到fb控制台。 你在哪里生成密钥哈希?