在整合“Facebook登录”时遇到问题& android中的“Graphi API”

时间:2017-08-26 10:42:35

标签: android facebook facebook-graph-api hash login

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

  1. 名称
  2. 电子邮件
  3. ID
  4. 性别
  5. 生日
  6. 我已使用软件包名称在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/ ...处配置您的应用键哈希值”。如果有人知道哪里有问题,请帮助我。

    screenshot

1 个答案:

答案 0 :(得分:0)

如果与调试不同,则发布的密钥哈希也必须将其添加到fb控制台。 你在哪里生成密钥哈希?