В моем приложении Android я хочу интегрировать службы Google+. Для этого я ссылался на ссылку quick start guide по этой ссылке, я сделал все шаги, но у меня возникла проблема при выполнении 3-го шага (a, b, c points) «Создать идентификатор клиента OAuth 2.0». Поскольку разработчик Google изменил весь дизайн консоли я не получаю от того, где я получу идентификатор OAuth clien? Я сделал другие шаги правильно. Я ссылался на PlusSampleActivity
, который снабжен AndroidSDK, и я использую библиотеку google-play-services_lib
, но эта демонстрация работает неправильно. Когда я пытаюсь войти в систему, он открывает диалоговое окно для выбора gmailID после выбора, когда я иду дальше, он не выполняет вход в систему и не сообщает сообщение «Внутренняя ошибка». Пожалуйста, помогите решить эту проблему. Я ссылался на многие ссылки, но большинство из них, возможно, использует старую библиотеку play-service, поэтому я не мог получить много информации об этом. Я также рассмотрел множество вопросов о stackoverflow по этой проблеме, но они не соответствуют моим требованиям. Я также пытался отладить мой код, но Error log
не показывает никаких сообщений об этом. Если кто-нибудь знает хороший пример учебника или решение для этой проблемы, пожалуйста, помогите мне решить его. Спасибо.Android - проблема интеграции с Google+ «Внутренняя ошибка произошла»
Код:
package com.google.android.gms.samples.plus;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.plus.PlusClient;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Intent;
import android.content.IntentSender;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
public class SignInActivity extends Activity implements OnClickListener,
PlusClient.ConnectionCallbacks, PlusClient.OnConnectionFailedListener,
PlusClient.OnAccessRevokedListener {
private static final int DIALOG_GET_GOOGLE_PLAY_SERVICES = 1;
private static final int REQUEST_CODE_SIGN_IN = 1;
private static final int REQUEST_CODE_GET_GOOGLE_PLAY_SERVICES = 2;
private TextView mSignInStatus;
private PlusClient mPlusClient;
private SignInButton mSignInButton;
private View mSignOutButton;
private View mRevokeAccessButton;
private ConnectionResult mConnectionResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sign_in_activity);
mPlusClient = new PlusClient.Builder(this, this, this)
.setActions(MomentUtil.ACTIONS)
.build();
mSignInStatus = (TextView) findViewById(R.id.sign_in_status);
mSignInButton = (SignInButton) findViewById(R.id.sign_in_button);
mSignInButton.setOnClickListener(this);
mSignOutButton = findViewById(R.id.sign_out_button);
mSignOutButton.setOnClickListener(this);
mRevokeAccessButton = findViewById(R.id.revoke_access_button);
mRevokeAccessButton.setOnClickListener(this);
}
@Override
public void onStart() {
super.onStart();
mPlusClient.connect();
}
@Override
public void onStop() {
mPlusClient.disconnect();
super.onStop();
}
@Override
public void onClick(View view) {
switch(view.getId()) {
case R.id.sign_in_button:
int available = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if (available != ConnectionResult.SUCCESS) {
showDialog(DIALOG_GET_GOOGLE_PLAY_SERVICES);
return;
}
try {
mSignInStatus.setText(getString(R.string.signing_in_status));
mConnectionResult.startResolutionForResult(this, REQUEST_CODE_SIGN_IN);
} catch (IntentSender.SendIntentException e) {
// Fetch a new result to start.
mPlusClient.connect();
}
break;
case R.id.sign_out_button:
if (mPlusClient.isConnected()) {
mPlusClient.clearDefaultAccount();
mPlusClient.disconnect();
mPlusClient.connect();
}
break;
case R.id.revoke_access_button:
if (mPlusClient.isConnected()) {
mPlusClient.revokeAccessAndDisconnect(this);
updateButtons(false /* isSignedIn */);
}
break;
}
}
@Override
protected Dialog onCreateDialog(int id) {
if (id != DIALOG_GET_GOOGLE_PLAY_SERVICES) {
return super.onCreateDialog(id);
}
int available = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if (available == ConnectionResult.SUCCESS) {
return null;
}
if (GooglePlayServicesUtil.isUserRecoverableError(available)) {
return GooglePlayServicesUtil.getErrorDialog(
available, this, REQUEST_CODE_GET_GOOGLE_PLAY_SERVICES);
}
return new AlertDialog.Builder(this)
.setMessage(R.string.plus_generic_error)
.setCancelable(true)
.create();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_SIGN_IN
|| requestCode == REQUEST_CODE_GET_GOOGLE_PLAY_SERVICES) {
if (resultCode == RESULT_OK && !mPlusClient.isConnected()
&& !mPlusClient.isConnecting()) {
// This time, connect should succeed.
mPlusClient.connect();
}
}
}
@Override
public void onAccessRevoked(ConnectionResult status) {
if (status.isSuccess()) {
mSignInStatus.setText(R.string.revoke_access_status);
} else {
mSignInStatus.setText(R.string.revoke_access_error_status);
mPlusClient.disconnect();
}
mPlusClient.connect();
}
@Override
public void onConnected(Bundle connectionHint) {
String currentPersonName = mPlusClient.getCurrentPerson() != null
? mPlusClient.getCurrentPerson().getDisplayName()
: getString(R.string.unknown_person);
mSignInStatus.setText(getString(R.string.signed_in_status, currentPersonName));
updateButtons(true /* isSignedIn */);
}
@Override
public void onDisconnected() {
mSignInStatus.setText(R.string.loading_status);
mPlusClient.connect();
updateButtons(false /* isSignedIn */);
}
@Override
public void onConnectionFailed(ConnectionResult result) {
mConnectionResult = result;
updateButtons(false /* isSignedIn */);
}
private void updateButtons(boolean isSignedIn) {
if (isSignedIn) {
mSignInButton.setVisibility(View.INVISIBLE);
mSignOutButton.setEnabled(true);
mRevokeAccessButton.setEnabled(true);
} else {
if (mConnectionResult == null) {
// Disable the sign-in button until onConnectionFailed is called with result.
mSignInButton.setVisibility(View.INVISIBLE);
mSignInStatus.setText(getString(R.string.loading_status));
} else {
// Enable the sign-in button since a connection result is available.
mSignInButton.setVisibility(View.VISIBLE);
mSignInStatus.setText(getString(R.string.signed_out_status));
}
mSignOutButton.setEnabled(false);
mRevokeAccessButton.setEnabled(false);
}
}
}