2015-07-03 10 views
12

Hem Facebook hem de Google Plus'ı aynı etkinlikle entegre etmem gerekiyor ancak başarılı olamıyorum. Her iki projede de çalıştım ve gayet iyi çalışıyorlar ama her iki projeyi de eklediğimde uygulamam çöküyor. Ben de onları özel düğmelerle denedim ama onlar da çalışmıyorlar. Şu anda Facebook bölümüm çalışıyor, ancak giriş sırasında Google'ın düğmesini tıkladığımda hata alıyorum. Ben bu yöntemlerde hata alıyorum: Ben bu sınıfta uygulanması ediyorumGoogle Plus ve Facebook Kimlik Doğrulaması, Android projesinin aynı etkinliğinde nasıl bir araya getirilir?

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

ve

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

: kimse bundan bana yardım ederse

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> { 
} 

harika olurdu.

Teşekkürler.

+0

yılında birkaç satır ekleyerek sorunumu kendim dün çözdük? – 2Dee

+0

Boş İşaretçi İstisnası. –

+0

NullPointerException, normalde, işlerin yanlış gittiği bir satırı günlüğe kaydeder ... – Aster

cevap

5

Ben onClick parçası

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

Bayım AsyncFacebookRunner'a sahip olmaktan nasıl vazgeçtiğinizi bu hatayı nasıl giderdim. Ekledim ...... uygulama düzeyimdeki "com.facebook.android:facebook-android-sdk:4.6.0'..." derledim. – Abhijeet

4

İlk defa signInWithGplus() numaralı telefonu arayarak, o noktada boş olan mConnectionResult'a erişmeyi deneyebilirsiniz.

Bunun nedeni, yalnızca çağrılmamış olan onConnectionFailed()'da ayarlandığınız içindir. > Hata - Ben * Bu yöntemlerde hata alıyorum *

İlgili konular