2015-07-03 11 views
12

Devo integrare sia Facebook che Google Plus nella stessa attività ma non riesco a ottenere risultati positivi. Ho provato sia in singoli progetti che funzionano bene, ma quando aggiungo entrambi i progetti la mia app si blocca. Anche io li ho provati con pulsanti personalizzati, ma non funzionano neanche. Attualmente la mia parte di Facebook funziona correttamente ma ricevo un errore quando faccio clic sul pulsante di Google al momento del login. Ottengo l'errore in questi metodi:Come integrare Google Plus e Facebook Autenticazione insieme nella stessa attività del progetto Android?

private void resolveSignInError() { 
    if (mConnectionResult.hasResolution()) { 
     try { 
      mIntentInProgress = true; 
      mConnectionResult.startResolutionForResult(this, RC_SIGN_IN); 
     } catch (SendIntentException e) { 
      mIntentInProgress = false; 
      mGoogleApiClient.connect(); 
     } 
    } 
} 

e

private void signInWithGplus() { 
    if (!mGoogleApiClient.isConnecting()) { 
     mSignInClicked = true; 
     resolveSignInError(); 
    } 
} 

sto implementando in questa classe:

public class LoginActivity extends Activity implements OnClickListener, 
    ConnectionCallbacks, OnConnectionFailedListener { 
// Your Facebook APP ID 
private static String APP_ID = "XXXXXXXXXXXXXXX"; // Replace with your App 
                // ID 
LinearLayout ll; 
// Strings of Facebook 
String fb_mUserId = "", fb_mUserToken = "", fb_mUserName = "", 
     fb_mUserEmail = "", fb_verified_value = "", fb_Task_message; 
boolean fb_verified, google_verified; 
// Instance of Facebook Class 
private Facebook facebook = new Facebook(APP_ID); 
@SuppressWarnings("unused") 
private AsyncFacebookRunner mAsyncRunner; 
String FILENAME = "AndroidSSO_data"; 
private SharedPreferences mPrefs; 
EditText edittext_username, edittext_password; 
Button Btn_login, Btn_register; 
TextView Text_univesity, errorMsg, tv_forget_password; 
LinearLayout ll_google, ll_fb; 
static String Username, password, name, Twilio_Id = "", 
     name_candidate = "", phone_no = "", email_candidate = "", 
     country = "", mobile_verification = "", fb_id = ""; 
ImageView im; 
ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>(); 
int id, Mode = 0, fb_clicked = 0, google_clicked = 0; 
static int user_ids; 
String IMEI_number; 
GPSTracker gps; 
static double latitude = 0.00, longitude = 0.00; 
Context context; 

private static final int RC_SIGN_IN = 0; 
// Logcat tag 
private static final String TAG = "LoginActivity"; 
// Profile pic image size in pixels 
// private static final int PROFILE_PIC_SIZE = 400; 
// Google client to interact with Google API 
private GoogleApiClient mGoogleApiClient; 
/** 
* A flag indicating that a PendingIntent is in progress and prevents us 
* from starting further intents. 
*/ 
private boolean mIntentInProgress; 
private boolean mSignInClicked; 
private ConnectionResult mConnectionResult; 
// Strings of Google Plus 
String google_email="", google_id="", google_name="", google_verified_value=""; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() 
      .permitAll().build(); 
    StrictMode.setThreadPolicy(policy); 
    TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
    IMEI_number = telephonyManager.getDeviceId(); 
    im = (ImageView) findViewById(R.id.header); 
    mAsyncRunner = new AsyncFacebookRunner(facebook); 


    if (Mode == 3) { 
     if (login_details.contains("name")) { 
      name = login_details.getString("name", ""); 
      Intercom.client().registerIdentifiedUser(
        new Registration().withUserId(name)); 
     } else { 
      Intercom.client().registerIdentifiedUser(
        new Registration().withUserId("123456")); 
     } 
     // We're logged in, we can register the user with Intercom 
     // Carry on as normal 
     Intent mode = new Intent(LoginActivity.this, MenuItems.class); 
     startActivity(mode); 
     finish(); 
    } else { 
     edittext_password = (EditText) findViewById(R.id.et_login_password); 
     Btn_login = (Button) findViewById(R.id.btn_login); 
     Btn_register = (Button) findViewById(R.id.btn_login_register); 
     ll_fb = (LinearLayout) findViewById(R.id.login_fb); 
     ll_google = (LinearLayout) findViewById(R.id.login_google); 
     tv_forget_password = (TextView) findViewById(R.id.tv_login_forget_password); 
     Btn_login.setOnClickListener(this); 
     Btn_register.setOnClickListener(this); 
     ll_fb.setOnClickListener(this); 
     ll_google.setOnClickListener(this); 
     tv_forget_password.setOnClickListener(this); 

     // Initializing google plus api client 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this).addApi(Plus.API) 
       .addScope(Plus.SCOPE_PLUS_PROFILE).build(); 
    } 

} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 

    case R.id.btn_login: 
    // Direct Login Process 
     break; 
    case R.id.btn_login_register: 
     // Direct register process 
     finish(); 
     break; 
    case R.id.login_fb: 
     fb_clicked++; 
     loginToFacebook(); 
     getProfileInformation(); 
     if (!fb_mUserEmail.equals("")) { 
      if (fb_verified == true) { 
       fb_verified_value = "1"; 
      } else { 
       fb_verified_value = "0"; 
      } 
      new FacebookAsynTask().execute(); 
     } 
     break; 
    case R.id.login_google: 
     google_clicked++; 
     signInWithGplus(); 
    // getGoogleProfileInformation(); 
     if (!google_email.equals("")) { 
      if (google_verified == true) { 
       google_verified_value = "1"; 
      } else { 
       google_verified_value = "0"; 
      } 
      new GoogleAsynTask().execute(); 
     } 
     break; 
    case R.id.tv_login_forget_password: 
     break; 

    } 
} 

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

protected void onStart() { 
    super.onStart(); 
    mGoogleApiClient.connect(); 
} 

protected void onStop() { 
    super.onStop(); 
    if (mGoogleApiClient.isConnected()) { 
     mGoogleApiClient.disconnect(); 
    } 
} 

/** LOGIN TO 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) { 
     facebook.setAccessToken(access_token); 
     Log.d("FB Sessions", "" + facebook.isSessionValid()); 
     Toast.makeText(LoginActivity.this, "FIRST CASE", Toast.LENGTH_SHORT) 
       .show(); 
     getProfileInformation(); 
    } 

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

    if (!facebook.isSessionValid()) { 
     facebook.authorize(this, 
       new String[] { "email", "publish_actions" }, 
       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(); 
         Toast.makeText(LoginActivity.this, "SECOND CASE", 
           Toast.LENGTH_SHORT).show(); 
         getProfileInformation(); 

         // Making Login button invisible 

        } 

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

        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); 
    if (fb_clicked != 0) { 
     facebook.authorizeCallback(requestCode, resultCode, data); 
     fb_clicked = 0; 
    } 
    else if (google_clicked != 0) { 

     if (requestCode == RC_SIGN_IN) { 
      if (resultCode != RESULT_OK) { 
       mSignInClicked = false; 
      } 

      mIntentInProgress = false; 

      if (!mGoogleApiClient.isConnecting()) { 
       mGoogleApiClient.connect(); 
      } 
     } 
     google_clicked = 0; 
    } 
} 

/** 
* Get Profile information by making request to Facebook Graph API 
* */ 
public void getProfileInformation() { 
    try { 

     JSONObject profile = Util.parseJson(facebook.request("me")); 
     Log.e("Profile", "" + profile); 
     fb_mUserId = profile.getString("id"); 
     fb_verified = profile.getBoolean("verified"); 
     fb_mUserToken = facebook.getAccessToken(); 
     fb_mUserName = profile.getString("name"); 
     fb_mUserEmail = profile.getString("email"); 

     runOnUiThread(new Runnable() { 

      public void run() { 

       Log.e("FaceBook_Profile", "" + fb_mUserId + "\n" 
         + fb_mUserToken + "\n" + fb_mUserName + "\n" 
         + fb_mUserEmail); 
      } 
     }); 

    } catch (FacebookError e) { 

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

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

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

     e.printStackTrace(); 
    } 
} 

/** AsyncTask of Direct Login */ 


class FacebookAsynTask extends AsyncTask<Void, Void, Void> { 

} 

/** GOOGLE's CODE STARTS */ 
/** 
* Sign-in into google 
* */ 
private void signInWithGplus() { 
    if (!mGoogleApiClient.isConnecting()) { 
     mSignInClicked = true; 
     resolveSignInError(); 
    } 
} 

/** 
* Method to resolve any signin errors 
* */ 
private void resolveSignInError() { 
    if (mConnectionResult.hasResolution()) { 
     try { 
      mIntentInProgress = true; 
      mConnectionResult.startResolutionForResult(this, RC_SIGN_IN); 
     } catch (SendIntentException e) { 
      mIntentInProgress = false; 
      mGoogleApiClient.connect(); 
     } 
    } 
} 

@Override 
public void onConnectionFailed(ConnectionResult result) { 
    if (!result.hasResolution()) { 
     GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(), this, 
       0).show(); 
     return; 
    } 

    if (!mIntentInProgress) { 
     // Store the ConnectionResult for later usage 
     mConnectionResult = result; 

     if (mSignInClicked) { 
      // The user has already clicked 'sign-in' so we attempt to 
      // resolve all 
      // errors until the user is signed in, or they cancel. 
      resolveSignInError(); 
     } 
    } 

} 

@Override 
public void onConnected(Bundle arg0) { 
    mSignInClicked = false; 
    Toast.makeText(this, "User is connected!", Toast.LENGTH_LONG).show(); 

    // Get user's information 
    getGoogleProfileInformation(); 

    // Update the UI after signin 
    // updateUI(true); 

} 

@Override 
public void onConnectionSuspended(int arg0) { 
    mGoogleApiClient.connect(); 
    // updateUI(false); 
} 

/** 
* Fetching user's information name, email, profile pic 
* */ 
private void getGoogleProfileInformation() { 
    try { 
     if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) { 
      Person currentPerson = Plus.PeopleApi 
        .getCurrentPerson(mGoogleApiClient); 
      google_name = currentPerson.getDisplayName(); 
      google_id = currentPerson.getId(); 
      google_verified = currentPerson.isVerified(); 
      String personPhotoUrl = currentPerson.getImage().getUrl(); 
      String personGooglePlusProfile = currentPerson.getUrl(); 
      google_email = Plus.AccountApi.getAccountName(mGoogleApiClient); 

      Log.e(TAG, "Name: " + google_name + ", plusProfile: " 
        + personGooglePlusProfile + ", email: " + google_email 
        + ", Image: " + personPhotoUrl); 

      // by default the profile url gives 50x50 px image only 
      // we can replace the value with whatever dimension we want by 
      // replacing sz=X 

     } else { 
      Toast.makeText(getApplicationContext(), 
        "Person information is null", Toast.LENGTH_LONG).show(); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

class GoogleAsynTask extends AsyncTask<Void, Void, Void> { 
} 

Sarebbe bello se qualcuno mi aiuta in esso.

Grazie.

+0

* ottengo l'errore in questi metodi * -> quale errore? – 2Dee

+0

Eccezione puntatore nullo. –

+0

NullPointerException registra normalmente una linea in cui le cose vanno male ... – Aster

risposta

5

Ho risolto il mio problema io stesso ieri con l'aggiunta di poche righe in onClick parte

if (mGoogleApiClient.isConnected()) { 
      getProfileInformation(); 
     } else { 
      signInWithGplus(); 
      getProfileInformation(); 
     } 
} 
+0

Sir sto avendo AsyncFacebookRunner errore deprecato su come risolvere questo problema. Ho allegato ...... compila 'com.facebook.android:facebook-android-sdk:4.6.0'..... al mio gradle per le app. – Abhijeet

4

Sembra che se si chiama signInWithGplus() la prima volta, proverà ad accedere a mConnectionResult che è nullo a quel punto.

Il motivo è perché lo stai solo impostando in onConnectionFailed() che non sarebbe stato chiamato.

Problemi correlati