繁体   English   中英

在Android中处理Google+登录

[英]Handling Google+ logins in Android

我为用户提供了一种使用其Google+帐户登录应用程序的方法。 在Google Developers网页上的示例中,登录过程连接到Activity生命周期:用户在Activity启动时登录,在Activity关闭时注销。

该应用程序具有一个活动,可以在其中执行登录和注销功能。 不过,在其他活动中,我可能需要访问Google+服务。 为此,我还需要在每个Activity和其他方法上使用connect方法。 我认为这很不好,重复代码。 如何以良好的方式实现这一目标?

完整的登录系统看起来像这样。

public class MainActivity extends Activity implements ConnectionCallbacks, OnConnectionFailedListener {

    private GoogleApiClient googleApiClient;
    private boolean intentInProcess = false;
    private int PLUS_SIGN_IN = 63640;
    private boolean signInClicked = false;
    private ConnectionResult connectionResult;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

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

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

        googleApiClient.connect();
    }

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

        if(googleApiClient.isConnected()) {
            googleApiClient.disconnect();
        }
    }

    private void resolveSignInErrors() {
        if(connectionResult.hasResolution()) {
            try {
                intentInProcess = true;
                connectionResult.startResolutionForResult(this, PLUS_SIGN_IN);
            } catch(SendIntentException e) {
                intentInProcess = false;
                googleApiClient.connect();
            }
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == PLUS_SIGN_IN) {
            if(requestCode != RESULT_OK) {
                signInClicked = false;
            }

            intentInProcess = false;

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

    @Override
    public void onConnectionFailed(ConnectionResult result) {
        if(!intentInProcess) {
            connectionResult = result;

            if(signInClicked) {
                resolveSignInErrors();
            }
        }
    }

    @Override
    public void onConnected(Bundle connectionHint) {
        signInClicked = false;
    }

    @Override
    public void onConnectionSuspended(int cause) {
        googleApiClient.connect();
    }

    public void signOutPlus() {
        if(googleApiClient.isConnected()) {
            Plus.AccountApi.clearDefaultAccount(googleApiClient);
            googleApiClient.disconnect();
        }
    }

    public void disconnectPlus() {
        Plus.AccountApi.clearDefaultAccount(googleApiClient);
        Plus.AccountApi.revokeAccessAndDisconnect(googleApiClient).setResultCallback(new ResultCallback<Status>() {
            @Override
            public void onResult(Status result) {

            }
        });
    }
}

创建一个实现Google Play Services的基本活动,然后在需要使用Googe Google Play Services任何时候扩展该活动

恩。

public class GoogleActivity extends Activity implements ConnectionCallbacks, OnConnectionFailedListener

然后扩展

public class MainActivity extends GoogleActivity

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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