如何在Android中登录Facebook?

时间:2014-10-16 05:01:01

标签: android facebook

我想在我的Android应用程序上登录Facebook。

但是当我点击我的登录按钮时,它会显示以下错误。

"Invalid key hash. They key hash iqzyy....... dose not match any stored key hashes. COnfiguryour    
  app key hashes at http://developers.faccebook.com/app/ 233423232..."

这是我的代码 -

 public class LoginFaceBook extends Activity {

// Your Facebook APP ID
private static String APP_ID = "234234343423"; // Replace with your App ID

// Instance of Facebook Class
private Facebook facebook = new Facebook(APP_ID);
private AsyncFacebookRunner mAsyncRunner;
String FILENAME = "AndroidSSO_data";
private SharedPreferences mPrefs;

   // Buttons
  Button btnFbLogin;
   Button btnFbGetProfile;
   Button btnPostToWall;
   Button btnShowAccessTokens;
   URL img_value;
   @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    btnFbLogin = (Button) findViewById(R.id.btn_fblogin);
    btnFbGetProfile = (Button) findViewById(R.id.btn_get_profile);
    btnPostToWall = (Button) findViewById(R.id.btn_fb_post_to_wall);
    btnShowAccessTokens = (Button) findViewById(R.id.btn_show_access_tokens);
    mAsyncRunner = new AsyncFacebookRunner(facebook);

    /**
     * Login button Click event
     * */
    btnFbLogin.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Log.d("Image Button", "button Clicked");
            loginToFacebook();
        }
    });

    /**
     * Getting facebook Profile info
     * */
    btnFbGetProfile.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            getProfileInformation();
        }
    });

    /**
     * Posting to Facebook Wall
     * */
    btnPostToWall.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            postToWall();
        }
    });

    /**
     * Showing Access Tokens
     * */
    btnShowAccessTokens.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            showAccessTokens();
        }
    });

    }

   /**
    * Function to login into facebook
    * */
   public void loginToFacebook() {

    mPrefs = getPreferences(MODE_PRIVATE);
    String access_token = mPrefs.getString("access_token", null);
    long expires = mPrefs.getLong("access_expires", 0);

    if (access_token != null) {

        accesstokenintent.accessno = access_token.toString();
        facebook.setAccessToken(access_token);

        btnFbLogin.setVisibility(View.INVISIBLE);

        // Making get profile button visible
        btnFbGetProfile.setVisibility(View.VISIBLE);

        // Making post to wall visible
        btnPostToWall.setVisibility(View.VISIBLE);

        // Making show access tokens button visible
        btnShowAccessTokens.setVisibility(View.VISIBLE);

        Log.d("FB Sessions", "" + facebook.isSessionValid());
        }

        if (expires != 0) {
        facebook.setAccessExpires(expires);
        }

        if (!facebook.isSessionValid()) {
        facebook.authorize(this,
                new String[] { "email", "publish_stream" },
                new DialogListener() {

                    @Override
                    public void onCancel() {
                        // Function to handle cancel event
                    }

                    @Override
                    public void onComplete(Bundle values) {
                        // Function to handle complete event
                        // Edit Preferences and update facebook acess_token
                        SharedPreferences.Editor editor = mPrefs.edit();
                        editor.putString("access_token",
                                facebook.getAccessToken());
                        editor.putLong("access_expires",
                                facebook.getAccessExpires());
                        editor.commit();

                        // Making Login button invisible
                        btnFbLogin.setVisibility(View.INVISIBLE);

                        // Making logout Button visible
                        btnFbGetProfile.setVisibility(View.VISIBLE);

                        // Making post to wall visible
                        btnPostToWall.setVisibility(View.VISIBLE);

                        // Making show access tokens button visible
                        btnShowAccessTokens.setVisibility(View.VISIBLE);
                    }

                    @Override
                    public void onError(DialogError error) {
                        // Function to handle error

                    }

                    @Override
                    public void onFacebookError(FacebookError fberror) {
                        // Function to handle Facebook errors

                    }

                });
    }
   }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    facebook.authorizeCallback(requestCode, resultCode, data);
     }


     /**
     * Get Profile information by making request to Facebook Graph API
      * */
      public void getProfileInformation() {
    mAsyncRunner.request("me", new RequestListener() {
        @Override
        public void onComplete(String response, Object state) {
            Log.d("Profile", response);
            String json = response;
            try {
                // Facebook Profile JSON data
                JSONObject profile = new JSONObject(json);

                // getting name of the user
                final String name = profile.getString("name");

                // getting email of the user
                final String email = profile.getString("email");
                String facebookid = profile.getString("id");

                try {
                    img_value = new URL("https://graph.facebook.com/"+facebookid+"/picture?
                type=normal");
                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(), "Name: " + name + "\nEmail: " +  
                         email +"\nimageurl:" + img_value, Toast.LENGTH_LONG).show();
                    }

                });


            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onIOException(IOException e, Object state) {
        }

        @Override
        public void onFileNotFoundException(FileNotFoundException e,
                Object state) {
        }

        @Override
        public void onMalformedURLException(MalformedURLException e,
                Object state) {
        }

        @Override
        public void onFacebookError(FacebookError e, Object state) {
        }
    });
    }

     /**
    * Function to post to facebook wall
     * */
     public void postToWall() {
    // post on user's wall.
    facebook.dialog(this, "feed", new DialogListener() {

        @Override
        public void onFacebookError(FacebookError e) {
        }

        @Override
        public void onError(DialogError e) {
        }

        @Override
        public void onComplete(Bundle values) {
        }

        @Override
        public void onCancel() {
        }
    });

    }

    /**
    * Function to show Access Tokens
    * */
    public void showAccessTokens() {
    String access_token = facebook.getAccessToken();

    Toast.makeText(getApplicationContext(),
            "Access Token: " + access_token, Toast.LENGTH_LONG).show();
   }

   /**
   * Function to Logout user from Facebook
    * */
    public void logoutFromFacebook() {
    mAsyncRunner.logout(this, new RequestListener() {
        @Override
        public void onComplete(String response, Object state) {
            Log.d("Logout from Facebook", response);
            if (Boolean.parseBoolean(response) == true) {
                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        // make Login button visible
                        btnFbLogin.setVisibility(View.VISIBLE);

                        // making all remaining buttons invisible
                        btnFbGetProfile.setVisibility(View.INVISIBLE);
                        btnPostToWall.setVisibility(View.INVISIBLE);
                        btnShowAccessTokens.setVisibility(View.INVISIBLE);
                    }

                });

            }
        }

        @Override
        public void onIOException(IOException e, Object state) {
        }

        @Override
        public void onFileNotFoundException(FileNotFoundException e,
                Object state) {
        }

        @Override
        public void onMalformedURLException(MalformedURLException e,
                Object state) {
        }

        @Override
        public void onFacebookError(FacebookError e, Object state) {
        }
    });
}

}

我仔细尝试过Facebook描述的所有步骤。

我该怎么做才能解决这个问题。

请帮助我!

2 个答案:

答案 0 :(得分:0)

从此代码中获取哈希键。

private void getHashKey() {

    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "your_package_name", PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA"); 
            md.update(signature.toByteArray());
            Log.e("YOURHASH KEY:",
                    Base64.encodeToString(md.digest(),Base64.DEFAULT));
            String WEATHER_HASH = Base64.encodeToString(md.digest(),
                    Base64.DEFAULT);

            return;
        }
    } catch (NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }
    return;

}

答案 1 :(得分:0)

复制打印在堆栈跟踪上的哈希码:

  

“无效的密钥哈希。密钥散列 iqzyy ....... 与任何存储的密钥哈希值不匹配.COnfiguryour
    app密钥哈希值http://developers.faccebook.com/app/ 233423232 ...“

我加粗的那个

然后转到您的应用信息中心>设置,然后将代码粘贴到密钥哈希部分。