1

だから、ここに私のログイン機能があります:

  public void facebookLogin()
{

    shareAppPreferences = new AppPreferences(getApplicationContext());
     facebook = ((GlobalVars)getApplicationContext()).facebook;

     String access_token = shareAppPreferences.getAccessToken();
     long expires = shareAppPreferences.getAccessExpires();
     Log.d("MyTag","token:" +access_token);
     if(access_token != null) {
         facebook.setAccessToken(access_token);
     }
     if(expires != 0) {
         facebook.setAccessExpires(expires);
     }
     /*
      * Only call authorize if the access_token has expired.
      */
     if(!facebook.isSessionValid()) {
         Log.d("MyTag","In Authorize");
          facebook.authorize(this, new String[] {}, new DialogListener() {
              @Override
              public void onComplete(Bundle values) {
                //  new AccessKeyTask().execute("http://37.49.226.66/allaroundme/requests.php");
                  shareAppPreferences.saveAccessToken(facebook.getAccessToken());
                  Log.d("MyTag","face token: " +facebook.getAccessToken());
                  shareAppPreferences.saveAccessExpires(facebook.getAccessExpires());

              }

              @Override
              public void onFacebookError(FacebookError error) {}

              @Override
              public void onError(DialogError e) {}

              @Override
              public void onCancel() {}
          });
     }
     Intent intent = new Intent(this,MainActivity.class);
     Log.d("MyTag", "starting activity");
     startActivity(intent);

}

このコードが機能しない理由がよくわかりません。そのコードを使用する前に、Facebook アプリから Facebook をログアウトしました。onComplete() は発生しないようで、アクセス トークンは常に null です。最初のログイン後は、情報を入力する必要はありません。誰でもここで私を助けることができますか?

4

1 に答える 1

2

これが私のために働いたコードです:

    public void loginToFacebook(){
        facebook.authorize(CandyCount.this, new String[]{"publish_stream", "email"}, Facebook.FORCE_DIALOG_AUTH, new DialogListener() {

            public void onFacebookError(FacebookError e) {
                Toast.makeText(getApplicationContext(), "onFacebookError", Toast.LENGTH_SHORT).show();
            }

            public void onError(DialogError e) {
                Toast.makeText(getApplicationContext(), "onError", Toast.LENGTH_SHORT).show();
            }

            public void onComplete(Bundle values) {

                Editor editor = sp.edit();
                editor.putString("access_token", facebook.getAccessToken());
                editor.putLong("access_expires", facebook.getAccessExpires());
                editor.commit();
                updateButtonStatus();

                getName();

            }

            public void onCancel() {
                // TODO Auto-generated method stub

            }

        });
    }

そしてonCreateで:

    sp = getPreferences(MODE_PRIVATE);
    access_token = sp.getString("access_token", null);
    expires = sp.getLong("access_expires", 0);
    getName = sp.getString("name", null);

    if (access_token != null){
        facebook.setAccessToken(access_token);
        fbName.setText("Hello, " + getName);
        updateButtonStatus();
    }
    if (expires != 0){
        facebook.setAccessExpires(expires);

    }

updateButtonStatusメソッドでボタンの画像を変更し、ボタンのonClickで、セッションが有効かどうかに応じてサインアウトまたはログインします。

このリンクをチェックしてください。FacebookのSDKを説明するのに非常に役立ちます。

明らかに、特定のニーズに合うようにコードを変更する必要があります。これがお役に立てば幸いです。

于 2012-11-04T00:28:51.197 に答える