[英]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.