简体   繁体   中英

Google+ login Integration crashes android application

I am integrating Google+ Login integration in my android application. I am following this tutorial. http://www.androidhive.info/2014/02/android-login-with-google-plus-account-1/ I followed each and every step, but when I run application on my android device, the application crashes after splash screen.

Log cat shows no error in application, but shows error in google play service library. Here is the Log cat

08-12 20:33:11.091: I/Icing(1980): Storage manager: low false usage 1.76MB avail 142.75MB capacity 0.94GB
08-12 20:33:12.651: E/Icing(1980): Array storage bad crc 2710746905 vs 2358592732
08-12 20:33:12.691: E/Icing(1980): Array storage bad crc 4278960758 vs 0
08-12 20:33:13.381: E/Icing(1980): Array storage bad crc 1590354048 vs 4192529010
08-12 20:33:13.381: E/Icing(1980): Trie mmap next failed
08-12 20:33:14.001: W/Icing(1980): Docstore bad crc 0x691d1876 vs 0x6e27403b
08-12 20:33:15.511: E/Icing(1980): Array storage bad crc 2034485993 vs 0
08-12 20:33:15.511: E/Icing(1980): Trie mmap node failed
08-12 20:33:15.891: W/Icing(1980): Error while loading LangUtil; unable to load Cld2DetectLanguage: undefined symbol: IcingExtCld2DetectLanguage
08-12 20:33:16.571: I/Icing(1980): updateResources: need to parse gfv{com.google.android.gms}
08-12 20:33:16.991: I/Icing(1980): Not enough disk space for indexing trimmable
08-12 20:33:16.991: I/Icing(1980): Internal init done: storage state 1
08-12 20:33:17.151: I/Icing(1980): 3 corpora need re-polling
08-12 20:33:17.251: I/Icing(1980): Post-init done
08-12 20:33:17.261: I/Icing(1980): doRemovePackageData com.umonistudio.tile
08-12 20:33:18.231: I/Icing(1980): Indexing FDBA7D5375B5D790F9C439EE9076658C1D1E8126 from com.google.android.googlequicksearchbox 
08-12 20:33:18.261: I/Icing(1980): Indexing 1163DB23413769866189369CD48BB8356F823578 from com.google.android.gm
08-12 20:33:18.271: I/Icing(1980): Indexing 427C1771ABBC521123604E224408F07F2376CCFA from com.google.android.googlequicksearchbox
08-12 20:33:18.311: I/Icing(1980): Not enough disk space for indexing trimmable 
08-12 20:33:18.351: I/Icing(1980): Indexing done FDBA7D5375B5D790F9C439EE9076658C1D1E8126
08-12 20:33:18.361: I/Icing(1980): Not enough disk space for indexing trimmable
08-12 20:33:18.361: I/Icing(1980): Cannot sync trimmable corpus: no trimmable
08-12 20:33:18.361: E/Icing(1980): Aborting indexing of corpus 1163DB23413769866189369CD48BB8356F823578
08-12 20:33:18.361: I/Icing(1980): Indexing done 1163DB23413769866189369CD48BB8356F823578
08-12 20:33:18.371: I/Icing(1980): Not enough disk space for indexing trimmable
08-12 20:33:18.511: I/Icing(1980): Not enough disk space for indexing trimmable
08-12 20:33:18.521: I/Icing(1980): Indexing done    427C1771ABBC521123604E224408F07F2376CCFA
08-12 20:40:18.881: I/EventLogService(1980): Aggregate from 1407856218577 (log), 1407856218577 (data)
08-12 20:40:19.031: W/EventLogAggregator(1980): Unknown tag: SYSTEM_AUDIT
08-12 20:40:19.031: W/EventLogAggregator(1980): Unknown tag: faceunlock
08-12 20:40:19.031: W/EventLogAggregator(1980): Unknown tag: snet
08-12 20:40:19.031: W/EventLogAggregator(1980): Unknown tag: snet_gcore
08-12 20:43:05.201: I/MultiDex(2810): install
08-12 20:43:05.221: I/MultiDex(2810): MultiDexExtractor.load(/data/app/com.google.android.gms-1.apk, false)
08-12 20:43:05.241: I/MultiDex(2810): loading existing secondary dex files 
08-12 20:43:05.251: I/MultiDex(2810): load found 1 secondary dex files
08-12 20:43:05.271: I/MultiDex(2810): install done
08-12 20:43:05.381: I/ProviderInstaller(2810): Insert disabled by gate 'gms:security:enable_conscrypt_in_gms_application'
08-12 20:53:14.311: W/Uploader(1980): No account for auth token provided
08-12 21:10:19.131: I/EventLogService(1980): Aggregate from 1407858019039 (log), 1407858019039 (data)
08-12 21:14:49.861: I/MultiDex(5375): install
08-12 21:14:49.881: I/MultiDex(5375): MultiDexExtractor.load(/data/app/com.google.android.gms-1.apk, false)
08-12 21:14:49.901: I/MultiDex(5375): loading existing secondary dex files
08-12 21:14:49.911: I/MultiDex(5375): load found 1 secondary dex files
08-12 21:14:49.921: I/MultiDex(5375): install done
08-12 21:14:50.021: I/ProviderInstaller(5375): Insert disabled by gate 'gms:security:enable_conscrypt_in_gms_application'

Here is the the code as well

 public class Login extends Activity implements View.OnClickListener, ConnectionCallbacks, OnConnectionFailedListener {


private static final int RC_SIGN_IN = 0;
private GoogleApiClient mGoogleApiClient;
private boolean mIntentInProgress;
private boolean mSignInClicked;
private ConnectionResult mConnectionResult;

Button Login, Google, FB, TW, forgot, signup;
EditText email, pswd;
TextView invalid;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login);
    Intitialize();
    login();
    startGoogleAPI();
}

private void startGoogleAPI() {
    // TODO Auto-generated method stub
    mGoogleApiClient = new GoogleApiClient.Builder(this)
    .addConnectionCallbacks(this)
    .addOnConnectionFailedListener(this).addApi(Plus.API, null)
    .addScope(Plus.SCOPE_PLUS_LOGIN).build();
}
protected void onStart() {
    super.onStart();
    mGoogleApiClient.connect();
}

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


private void Intitialize() {
    // TODO Auto-generated method stub

    Login = (Button) findViewById(R.id.bLogin);
    Google = (Button) findViewById(R.id.btnGplus);
    FB = (Button) findViewById(R.id.btnFb);
    TW = (Button) findViewById(R.id.btnTwitter);
    signup = (Button) findViewById(R.id.button1);
    forgot = (Button) findViewById(R.id.button2);
    email = (EditText) findViewById(R.id.etLoginEmail);
    pswd = (EditText) findViewById(R.id.etLoginPassword);
    invalid = (TextView) findViewById(R.id.tvLoginInvalid);
    facebook = new Facebook(FB_APP_ID);
    mAsyncRunner = new AsyncFacebookRunner(facebook);
}

private void login() {
    // TODO Auto-generated method stub
    Login.setOnClickListener(this);
    Google.setOnClickListener(this);
    FB.setOnClickListener(this);
    TW.setOnClickListener(this);
    forgot.setOnClickListener(this);
    signup.setOnClickListener(this);

}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    switch (v.getId()) {
    case R.id.bLogin:
        if (email.getText().toString().equals("")
                || pswd.getText().toString().equals("")) {
            invalid.setText("Enter Email or Password");
        } else if (!validEmail(email.getText().toString())) {
            invalid.setText("Email is not valid");
        } else {
            String e = email.getText().toString();
            String pwd = pswd.getText().toString();
            Person p = new Person();
            p.setEmail(e);
            p.setPassword(pwd);

            //Web Api Call

        }

        break;
    case R.id.btnGplus:
        signInWithGplus();

        break;
    case R.id.btnFb:

        break;
    case R.id.btnTwitter:

        break;
    case R.id.button1:
        // sign up
        Intent i = new Intent("packageName.REGISTER");
        startActivity(i);
        break;
    case R.id.button2:
        // forgot
        Intent j = new Intent("pacageName.FORGOTPASSWORD");
        startActivity(j);
        break;
    }
}



private boolean validEmail(String email) {
    Pattern pattern = Patterns.EMAIL_ADDRESS;
    return pattern.matcher(email).matches();
}


private void signInWithGplus() {
    // TODO Auto-generated method stub
    if (!mGoogleApiClient.isConnecting()) {
        mSignInClicked = true;
        resolveSignInError();
    }
}

private void getGoogleProfileInformation() {
    try {
        if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) {
            com.google.android.gms.plus.model.people.Person currentPerson = Plus.PeopleApi
                    .getCurrentPerson(mGoogleApiClient);
            String personName = currentPerson.getDisplayName();
            String email = Plus.AccountApi.getAccountName(mGoogleApiClient);

            Person p = new Person();

            p.setUsername(personName);
            p.setEmail(email);

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

private void resolveSignInError() {
    if (mConnectionResult.hasResolution()) {
        try {
            mIntentInProgress = true;
            mConnectionResult.startResolutionForResult(this, RC_SIGN_IN);
        } catch (SendIntentException e) {
            mIntentInProgress = false;
            mGoogleApiClient.connect();
        }
    }
}
@Override
protected void onActivityResult(int requestCode, int responseCode,
        Intent intent) {
    if (requestCode == RC_SIGN_IN) {
        if (responseCode != RESULT_OK) {
            mSignInClicked = false;
        }

        mIntentInProgress = false;

        if (!mGoogleApiClient.isConnecting()) {
            mGoogleApiClient.connect();
        }
    }
}

private void signOutFromGplus() {
    if (mGoogleApiClient.isConnected()) {
        Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);
        mGoogleApiClient.disconnect();
        mGoogleApiClient.connect();
    }
}


@Override
public void onConnectionFailed(ConnectionResult result) {
    // TODO Auto-generated method stub
    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) {
    // TODO Auto-generated method stub
    mSignInClicked = false;
    getGoogleProfileInformation();
}

public void onDisconnected() {
    // TODO Auto-generated method stub
    mGoogleApiClient.connect();
}

@Override
public void onConnectionSuspended(int arg0) {
    // TODO Auto-generated method stub
    mGoogleApiClient.connect();
}

Permissions in Manifest file

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />

<meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />

If I remove this code and run the application. Then Application runs fine, but after adding this code, the app crashed after splash screen.

Any help will greatly appreciated... Thanks in advance

[[Resolved]] The error is resolved by just removing 'null' as a parameter from addApi(Plus.API) method

mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this).addApi(Plus.API)
.addScope(Plus.SCOPE_PLUS_LOGIN).build();

PS Just keep in mind that you have to generate the client ID for that email address which you are using in your android device as primary email address. This also help me in my case.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM