2016-12-11 6 views
0

にログイングーグル。 Facebookボタンでログインをクリックすると、公開プロフィールとメールの権限ダイアログが表示されます。ダイアログは表示されませんが、Facebookのログアウトに変更されたログインとしてログインしているようです。これを行うためのより良い方法はありますか?アンドロイド - Facebookと私は</p> <p>Googleのログイン作品単一のアクティビティにFacebookとGoogleのログインを処理しようとしていますが、Facebookのログインが要求許可ダイアログが表示されていない

public class LoginActivity extends AppCompatActivity { 

    private static final String TAG = LoginActivity.class.getSimpleName(); 
    private static final int RC_SIGN_IN = 1; 
    private GoogleApiClient googleClient; 
    private CallbackManager callbackManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     FacebookSdk.sdkInitialize(getApplicationContext()); 
     setContentView(R.layout.activity_login); 


     callbackManager = CallbackManager.Factory.create(); 

     SignInButton googleButton = (SignInButton)findViewById(R.id.google_button); 
     LoginButton facebookBtn = (LoginButton)findViewById(R.id.fb_login_button); 
     Button emailButton = (Button)findViewById(R.id.email_button); 
     googleButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleClient); 
       startActivityForResult(signInIntent, RC_SIGN_IN); 
      } 
     }); 

     initGoogleSignIn(); 
     initFacebookSignIn(facebookBtn); 
    } 

    private boolean isLoggedInByFacebook(){ 
     AccessToken accessToken = AccessToken.getCurrentAccessToken(); 
     return accessToken != null; 
    } 

    private void initGoogleSignIn(){ 
     GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
       .requestIdToken(getString(R.string.default_web_client_id)) 
       .requestEmail() 
       .build(); 

     googleClient = new GoogleApiClient.Builder(this) 
       .enableAutoManage(this, new GoogleApiClient.OnConnectionFailedListener() { 
        @Override 
        public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
        } 
       }) 
       .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
       .build(); 
     OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(googleClient); 
     if (opr.isDone()) { 
      // If the user's cached credentials are valid, the OptionalPendingResult will be "done" and the GoogleSignInResult will be available instantly. 
      Log.d("TAG", "Got cached sign-in"); 
      GoogleSignInResult result = opr.get(); 
      finish(); 
     } 

    } 

    private void initFacebookSignIn(LoginButton facebookBtn){ 
     if(isLoggedInByFacebook()) { 
      finish(); 
     }else{ 
      callbackManager = CallbackManager.Factory.create(); 
      facebookBtn.setReadPermissions(Arrays.asList(
        "public_profile","email")); 
      // Callback registration 
      facebookBtn.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
       @Override 
       public void onSuccess(LoginResult loginResult) { 
        loginResult.getAccessToken().getUserId(); 
        // App code 
        GraphRequest request = GraphRequest.newMeRequest(
          loginResult.getAccessToken(), 
          new GraphRequest.GraphJSONObjectCallback() { 
           @Override 
           public void onCompleted(JSONObject object, GraphResponse response) { 
            try { 
             Log.i("Response",response.toString()); 
             String email = response.getJSONObject().getString("email"); 
             String name = response.getJSONObject().getString("name"); 
             finish(); 
            }catch (JSONException e){ 
             Log.e(TAG,"Error getting facebook email", e); 
            } 
           } 
          }); 
        Bundle parameters = new Bundle(); 
        parameters.putString("fields", "name,email"); 
        request.setParameters(parameters); 
        request.executeAsync(); 
       } 

       @Override 
       public void onCancel() { 
        // App code 
       } 
       @Override 
       public void onError(FacebookException exception) { 
        Log.e(TAG,"Error in facebook sign in", exception); 
       } 
      }); 
     } 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == RC_SIGN_IN) { 
      GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
      if (result.isSuccess()) { 
       // Signed in successfully, show authenticated UI. 
       GoogleSignInAccount acct = result.getSignInAccount(); 
       api.loginGoogle(acct.getIdToken()).subscribe(new Action1<User>() { 
        @Override 
        public void call(User user) { 
         api.getWeather(-31.0, 115.0).subscribe(new Action1<WeatherResponse>() { 
          @Override 
          public void call(WeatherResponse weatherResponse) { 
          } 
         }); 
        } 
       }, new Action1<Throwable>() { 
        @Override 
        public void call(Throwable throwable) { 
         System.out.println(throwable); 
        } 
       }); 
      } else { 
       System.out.println(result.getStatus()); 
      } 
     }else { //facebook 
      callbackManager.onActivityResult(requestCode, resultCode, data); 
     } 
    } 

} 

答えて

0

これを試してみてください。 変数を宣言します。あなたのonCreate()メソッドで

private CallbackManager callbackManager; 
    private AccessTokenTracker accessTokenTracker; 
    com.facebook.Profile profile; 
    private ProfileTracker mProfileTracker; 

..

FacebookSdk.sdkInitialize(getApplicationContext()); 
    callbackManager = CallbackManager.Factory.create(); 
    updateWithToken(AccessToken.getCurrentAccessToken()); 
    accessTokenTracker = new AccessTokenTracker() { 
     @Override 
     protected void onCurrentAccessTokenChanged(AccessToken oldToken, AccessToken newToken) { 
      updateWithToken(newToken); 
     } 
    }; 
    accessTokenTracker.startTracking(); 

今updateWithTokenで()メソッド

private void updateWithToken(AccessToken currentAccessToken) { 

    if (currentAccessToken != null) { 
     LoginManager.getInstance().logOut(); 
    } else { 
    } 
} 

今コールバックでマネージャーあなたの現在のプロフィールを追跡する必要があります

+0

更新なし??それは働いていますか? – rafsanahmad007

関連する問題