2016-08-05 12 views
-1

アンドロイドでfacebookでログインしています。しかし、私はアクセストークンを取得していません。 メール、名前などのユーザーの詳細を取得しています。 トークンを取得できない理由を教えてください。Facebookでログインしてアクセストークンを取得していません

私はfacebook sdk 4.0.0を使用しています。

MainActivity

public class MainActivity extends  Activity { 
     private CallbackManager callbackManager; 
     private LoginButton loginButton; 
     private TextView btnLogin; 
     private ProgressDialog progressDialog; 
     private AccessTokenTracker accessTokenTracker; 
     private ProfileTracker profileTracker; 

     private FacebookCallback<LoginResult> callback = new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       AccessToken accessToken = loginResult.getAccessToken(); 
       String token = loginResult.getAccessToken().getToken(); 
       Profile profile = Profile.getCurrentProfile(); 
       displayMessage(profile); 
      } 

      @Override 
      public void onCancel() { 

      } 

      @Override 
      public void onError(FacebookException error) { 

      } 
     }; 

     User user; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      FacebookSdk.sdkInitialize(this); 
      callbackManager = CallbackManager.Factory.create(); 

      accessTokenTracker= new AccessTokenTracker() { 
       @Override 
       protected void onCurrentAccessTokenChanged(AccessToken oldToken, AccessToken newToken) { 

       } 
      }; 

      profileTracker = new ProfileTracker() { 
       @Override 
       protected void onCurrentProfileChanged(Profile oldProfile, Profile newProfile) { 
        displayMessage(newProfile); 
       } 
      }; 

      accessTokenTracker.startTracking(); 
      profileTracker.startTracking(); 
      AppEventsLogger.activateApp(this); 
      setContentView(R.layout.activity_main); 
      assert getActionBar() != null; 
      getActionBar().hide(); 

      if(PrefUtils.getCurrentUser(MainActivity.this) != null){ 
       //Intent homeIntent = new Intent(MainActivity.this, LogoutActivity.class); 
       Intent homeIntent = new Intent(MainActivity.this, ListViewActivity.class); 
       startActivity(homeIntent); 
       finish(); 
      } 
      /*try { 
       PackageInfo info = getPackageManager().getPackageInfo(
         "com.comida", 
         PackageManager.GET_SIGNATURES); 
       for (Signature signature : info.signatures) { 
        MessageDigest md = MessageDigest.getInstance("SHA"); 
        md.update(signature.toByteArray()); 
        Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT)); 
       } 
      } catch (PackageManager.NameNotFoundException e) { 

      } catch (NoSuchAlgorithmException e) { 

      }*/ 
      /* FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
      fab.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
          .setAction("Action", null).show(); 
       } 
      });*/ 
     } 


     private void displayMessage(Profile profile){ 
      if(profile != null){ 
       //textView.setText(profile.getName()); 
      } 
     } 

    @Override 
     protected void onResume() { 
      super.onResume(); 



      callbackManager=CallbackManager.Factory.create(); 

      loginButton= (LoginButton)findViewById(R.id.login_button); 

      loginButton.setReadPermissions("public_profile", "email","user_friends"); 

      btnLogin= (TextView) findViewById(R.id.btnLogin); 
      btnLogin.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        progressDialog = new ProgressDialog(MainActivity.this); 
        progressDialog.setMessage("Loading..."); 
        progressDialog.show(); 

        loginButton.performClick(); 

        loginButton.setPressed(true); 

        loginButton.invalidate(); 

        loginButton.registerCallback(callbackManager, mCallBack); 

        loginButton.setPressed(false); 

        loginButton.invalidate(); 

       } 
      }); 
     } 

     @Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 
      callbackManager.onActivityResult(requestCode, resultCode, data); 
     } 


     private FacebookCallback<LoginResult> mCallBack = new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 

       progressDialog.dismiss(); 

       // App code 
       GraphRequest request = GraphRequest.newMeRequest(
         //loginResult.getAccessToken(), 
         AccessToken.getCurrentAccessToken(), 
         new GraphRequest.GraphJSONObjectCallback() { 
          @Override 
          public void onCompleted(
            JSONObject object, 
            GraphResponse response) { 

           Log.e("response: ", response + ""); 
           try { 
            user = new User(); 
            user.facebookID = object.getString("id").toString(); 
            user.email = object.getString("email").toString(); 
            user.name = object.getString("name").toString(); 
            user.gender = object.getString("gender").toString(); 
            PrefUtils.setCurrentUser(user,MainActivity.this); 

           }catch (Exception e){ 
            e.printStackTrace(); 
           } 
           Toast.makeText(MainActivity.this,"welcome "+user.name,Toast.LENGTH_LONG).show(); 
           Intent intent=new Intent(MainActivity.this,ListViewActivity.class); 
           //Intent intent=new Intent(MainActivity.this,LogoutActivity.class); 
           startActivity(intent); 
           finish(); 

          } 

         }); 

       Bundle parameters = new Bundle(); 
       parameters.putString("fields", "id,name,email,gender, birthday"); 
       request.setParameters(parameters); 
       request.executeAsync(); 
      } 

      @Override 
      public void  onCancel() { 
       progressDialog.dismiss(); 
      } 

      @Override 
      public void onError(FacebookException e) { 
       progressDialog.dismiss(); 
      } 
     }; 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      // Inflate the menu; this adds items to the action bar if it is present. 
      getMenuInflater().inflate(R.menu.menu_main, menu); 
      return true; 
     } 

     /*@Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
      // Handle action bar item clicks here. The action bar will 
      // automatically handle clicks on the Home/Up button, so long 
      // as you specify a parent activity in AndroidManifest.xml. 
      int id = item.getItemId(); 

      //noinspection SimplifiableIfStatement 
      if (id == R.id.action_settings) { 
       return true; 
      } 

      return super.onOptionsItemSelected(item); 
     }*/ 
    } 

Logcat

08-05 16:08:17.964 2258-2829/com.google.android.gms.persistent E/Auth: [GoogleAccountDataServiceImpl] getToken() -> BAD_AUTHENTICATION. Account: <ELLIDED:601871123>, App: com.google.android.gms, Service: oauth2:https://www.googleapis.com/auth/games 
                     dkq: Long live credential not available. 
                      at dkr.a(:com.google.android.gms:3101) 
                      at dje.a(:com.google.android.gms:397) 
                      at djd.a(:com.google.android.gms:31369) 
                      at djd.a(:com.google.android.gms:313) 
                      at elb.a(:com.google.android.gms:1201) 
                      at ela.a(:com.google.android.gms:530) 
                      at ela.a(:com.google.android.gms:196) 
                      at dfw.a(:com.google.android.gms:320) 
                      at dfw.a(:com.google.android.gms:210) 
                      at dgf.a(:com.google.android.gms:1498) 
                      at dge.a(:com.google.android.gms:909) 
                      at dge.e(:com.google.android.gms:523) 
                      at dgd.a(:com.google.android.gms:37) 
                      at dhm.getAuthToken(:com.google.android.gms:178) 
                      at android.accounts.AbstractAccountAuthenticator$Transport.getAuthToken(AbstractAccountAuthenticator.java:214) 
                      at android.accounts.IAccountAuthenticator$Stub.onTransact(IAccountAuthenticator.java:113) 
                      at android.os.Binder.execTransact(Binder.java:453) 

08-05 16:08:18.040 2258-2829/com.google.android.gms.persistent W/GLSActivity: dgt: BadAuthentication 
                        at dgf.a(:com.google.android.gms:1515) 
                        at dge.a(:com.google.android.gms:909) 
                        at dge.e(:com.google.android.gms:523) 
                        at dgd.a(:com.google.android.gms:37) 
                        at dhm.getAuthToken(:com.google.android.gms:178) 
                        at android.accounts.AbstractAccountAuthenticator$Transport.getAuthToken(AbstractAccountAuthenticator.java:214) 
                        at android.accounts.IAccountAuthenticator$Stub.onTransact(IAccountAuthenticator.java:113) 
                        at android.os.Binder.execTransact(Binder.java:453) 
+0

質問を絞り込んで、数十のインポート、重要ではないメソッド、コメントアウトされたコードブロックのみを含めるようにしてください。 – Eiko

+0

accessTokenをログに記録しようとしましたか?私はあなたがそれを使用していないと思う。あなたは持っていますが、あなたはそれを使用しません。 –

+1

ユーザーの詳細を取得している場合は、アクセストークンを持っている必要があります。そうしないと、APIが最初にアクセストークンを渡すことはありません。 – CBroe

答えて

0

あなたがLoginResultを使用する場合は、任意の時点でトークンを取得することができ、これを使用して

AccessToken.getCurrentAccessToken().getToken(); 

を使用してトークンを取得することができますログインしたときに一度だけ取得します。アプリケーションを再起動すると、onSuccessは呼び出されません。あなたが再起動した後、プロファイルが必要な場合は、このリターンはあなたがあなたがアクセストークンを持っていますが、それを直接使用することはありません

+0

私は使っていますが、得られませんでした。 – user6313669

+0

アクセストークンは のように格納できます。String token = AccessToken.getCurrentAccessToken()。getToken(); @ user6313669 –

+0

あなたはFacebookCallback メソッドで書いていますか? –

0

にlogedされていないヌル場合

は、あなたが

Profile.getCurrentProfile(); 

を使用しています。

あなたができたトークンを介してユーザのIDをログに記録する、たとえばたい場合は、次のユーザーを取得している場合は

:@Cbroeが正しいコメントで述べたように

Log.w("accessToken", accessToken.getUserId().toString()); 

詳細は、アクセストークンを持っている必要があります。 それ以外の場合、APIは最初のものを提供しません。

+0

実際にはFacebookトークでログインしようとしている特定のユーザーのユーザーの詳細を含むアクセストークンを保存します。もし私が直接得ることができない場合、どのように私はデータベースに格納することができますか? – user6313669

関連する問題