Не удалось войти. Проверьте подключение к сети и повторите попытку
Я пытаюсь сделать простую игру с Google Play Games Services, но мне не удалось войти в Google Play Games.
Я понимаю это :
не удалось войти. Проверьте подключение к сети и повторите попытку.
у меня есть класс MainActivity, и три fragmenets (MainFragment, GameFragment и ResultFragment).
MainFragment является фрагментом для главного меню, где используйте кнопку have, чтобы нажать начать игру.
авторизации?
я связал и авторизовал свою игру с SHA-1 в консоли разработчика Google Play.
когда я использую Android Studio, мое имя пакета выглядит примерно так: aplikacijezaandroid.thebuttonchallenge, и я добавил две версии приложений в связанных приложениях на консоли разработчика Google Play.
Итак, у меня есть com.aplikacijezaandroid.thebuttonchallenge, и aplikacijezaandorid.thebuttonchallenge
ID приложения?
я добавил идентификатор приложения и идентификатор таблицы лидеров в строки.xml и я добавили метатег в манифест Android.
я добавил разрешение на интернет в AndroidManifest.в XML
испытания?
Я тестирую и отлаживаю приложение из Android Studio с физическим устройством и ofc есть мой собственный gmail, добавленный в качестве тестового пользователя в консоли разработчика Google Play.
вот мой AndroidManifest.в XML
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="aplikacijezaandroid.thebuttonchallenge" >
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/app_id"/>
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version"/>
</application>
здесь MainActivity класс:
public class MainActivity extends Activity implements MainMenuFragment.Listener,
GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener,
GameFragment.Listener, ResultFragment.Listener {
//Fragments
MainMenuFragment mMainFragment;
GameFragment mGameFragment;
ResultFragment mResultFragment;
// Client used to interact with Google APIs
private GoogleApiClient mGoogleApiClient;
// Are we currently resolving a connection failure?
private boolean mResolvingConnectionFailure = false;
// Has the user clicked the sign-in button?
private boolean mSignInClicked = false;
// Automatically start the sign-in flow when the Activity starts
private boolean mAutoStartSignInFlow = true;
// request codes we use when invoking an external activity
private static final int RC_RESOLVE = 5000;
private static final int RC_UNUSED = 5001;
private static final int RC_SIGN_IN = 9001;
//Debug
private String TAG = "IGRA";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Create the Google API Client with access to Plus and Games
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(Plus.API).addScope(Plus.SCOPE_PLUS_LOGIN)
.addApi(Games.API).addScope(Games.SCOPE_GAMES)
.build();
//Fragments
mMainFragment = new MainMenuFragment();
mGameFragment = new GameFragment();
mResultFragment = new ResultFragment();
// listen to fragment events
mMainFragment.setListener(this);
mGameFragment.setListener(this);
mResultFragment.setListener(this);
//Treba dodati listenere
// add initial fragment (welcome fragment)
if (savedInstanceState == null) {
getFragmentManager().beginTransaction().add(R.id.container, mMainFragment).commit();
}
}
// Switch UI to the given fragment
void switchToFragment(Fragment newFrag) {
getFragmentManager().beginTransaction().replace(R.id.container, newFrag)
.commit();
}
private boolean isSignedIn() {
return (mGoogleApiClient != null && mGoogleApiClient.isConnected());
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart(): connecting");
mGoogleApiClient.connect();
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop(): disconnecting");
if (mGoogleApiClient.isConnected()) {
mGoogleApiClient.disconnect();
}
}
@Override
public void onStartGameRequested() {
startGame();
}
@Override
public void onShowAchievementsRequested() {
}
@Override
public void onShowLeaderboardsRequested() {
}
void startGame(){
switchToFragment(mGameFragment);
}
public void onEnteredScore(int finalScore){
mResultFragment.setFinalScore(finalScore);
// push those accomplishments to the cloud, if signed in
pushAccomplishments(finalScore);
// switch to the exciting "you won" screen
switchToFragment(mResultFragment);
}
private void pushAccomplishments(int finalScore) {
if (!isSignedIn()) {
// can't push to the cloud, so save locally
// mOutbox.saveLocal(this);
Log.d(TAG, "can't push to the cloud, so save locally");
return;
}
Games.Leaderboards.submitScore(mGoogleApiClient, getString(R.string.number_guesses_leaderboard),
finalScore);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onConnected(Bundle bundle) {
Log.d(TAG, "onConnected(): connected to Google APIs");
// Show sign-out button on main menu
//mMainFragment.setShowSignInButton(false);
// Show "you are signed in" message on win screen, with no sign in button.
//mWinFragment.setShowSignInButton(false);
// Set the greeting appropriately on main menu
Player p = Games.Players.getCurrentPlayer(mGoogleApiClient);
String displayName;
if (p == null) {
Log.w(TAG, "mGamesClient.getCurrentPlayer() is NULL!");
displayName = "???";
} else {
displayName = p.getDisplayName();
}
mMainFragment.setGreeting("Hello, " + displayName);
// if we have accomplishments to push, push them
/*if (!mOutbox.isEmpty()) {
pushAccomplishments();
Toast.makeText(this, getString(R.string.your_progress_will_be_uploaded),
Toast.LENGTH_LONG).show();
}*/
}
@Override
public void onWinScreenDismissed() {
switchToFragment(mMainFragment);
}
@Override
public void onWinScreenSignInClicked() {
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (requestCode == RC_SIGN_IN) {
mSignInClicked = false;
mResolvingConnectionFailure = false;
if (resultCode == RESULT_OK) {
mGoogleApiClient.connect();
} else {
BaseGameUtils.showActivityResultError(this, requestCode, resultCode,
R.string.signin_failure, R.string.signin_other_error);
}
}
}
@Override
public void onConnectionSuspended(int i) {
Log.d(TAG, "onConnectionSuspended(): attempting to connect");
mGoogleApiClient.connect();
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.d(TAG, "onConnectionFailed(): attempting to resolve");
if (mResolvingConnectionFailure) {
Log.d(TAG, "onConnectionFailed(): already resolving");
return;
}
if (mSignInClicked || mAutoStartSignInFlow) {
mAutoStartSignInFlow = false;
mSignInClicked = false;
mResolvingConnectionFailure = true;
if (!BaseGameUtils.resolveConnectionFailure(this, mGoogleApiClient, connectionResult,
RC_SIGN_IN, getString(R.string.signin_other_error))) {
mResolvingConnectionFailure = false;
}
}
// Sign-in failed, so show sign-in button on main menu
mMainFragment.setGreeting(getString(R.string.signed_out_greeting));
//mMainMenuFragment.setShowSignInButton(true);
// mWinFragment.setShowSignInButton(true);
}
6 ответов
Я решил эту проблему, поэтому я опубликую ответ.
я переместил идентификатор приложения и идентификатор таблицы лидеров из строк.XML для идентификаторов.xml в папке значения.
Я удалил все идентификаторы клиентов и снова добавил идентификаторы клиентов для хранилища ключей отладки и выпуска хранилища ключей.
в моем случае проблема заключалась в том, что одна из учетных записей gmail (из двух) не была добавлена в учетные записи тестировщиков в play store и была учетной записью по умолчанию для моего устройства.
Я удалил учетную запись, чтобы сделать другую учетную запись (учетную запись тестировщиков в playstore) по умолчанию и добавил ее обратно, и она начала работать
Если вы не опубликовали свое приложение / игру: после того, как вы сделали каждый обычный шаг, убедитесь, что вы тестируете приложение/игру с устройством имеет только тестовую учетную запись/С. Я проверил каждый шаг несколько раз и закончил с этой странной проблемой. Наконец, я протестировал свое приложение с помощью устройства, которое имеет только тестовую учетную запись, добавленную на консоли разработчика. Это сработало. Надеюсь, это поможет кому-то еще.
в моем случае.Я установил одну тестовую учетную запись,но у моего устройства есть учетная запись по умолчанию, которая является другой, поэтому я получил эту ошибку.Моя ошибка, но почему google не может дать нам более очевидный отчет об ошибке?
вот как я это понял.Весь мой тест был в отладочной версии с использованием тестовой учетной записи. Я удаляю проект как в консоли Google play develper, так и в консоли Google Api.И воссоздать один, как упоминалось другими в stackoverflow.Но это не помогает.Я переделываю это и заканчиваю флюгер.
Я проверил найденные в журнале эти же слова:
03-09 16:15:39.897: E / GameAgent (1225): невозможно получить приложение xxxxxxx из сети 03-09 16:15: 39.902: E/GameAgent(1225): идентификатор приложения xxxxxxx не связан с пакетом com.gyj.паб.gpgsDemo. Проверьте идентификатор приложения в манифесте. 03-09 16: 15: 39.906: E/CheckGameplayAcl(23917): невозможно загрузить метаданные для игры 03-09 16:15: 39.906: W/SignInActivity(23917): onSignInFailed()...
один более того, я проверил все 3 элемента ниже, решите, соответствует ли клиент apk конфигурации консоли Google Play Deverloper. 1.имя пакета .Это одно и то же. 2.Сертификация отпечаток SHA1.(отладка и выпуск). 3.тестовая учетная запись.
даже в то время я не понимал,что я не ввел учетную запись во время моих тестов, как устройство знает, какая учетная запись присутствует для входа? Я попробовал другую учетную запись.Я добавил эту учетную запись, которая была установлена в sonsole в качестве тестовой учетной записи устройство, перехваченное приложением TypeANumber.Он показал мне вид, чтобы выбрать один из двух счетов.Внезапно я понял.
в моем случае я добавляю только идентификатор клиента выпуска в Google Play Console. Когда я запускаю свое приложение с помощью кнопки "выполнить как", отображается ошибка сетевого подключения.Но когда я запускаю apk, созданный подписанным, он работает хорошо. Итак, добавьте идентификатор клиента отладки, если вы хотите запустить приложение внутри AS.
для меня это то, что мой проект SHA1 не совпадает с тем, что находится в консоли API.
1. Я проверил свой через этой.
2. Пошел в https://console.developers.google.com и на страницу "учетные данные" моего проекта.
3. Нажал на кнопку редактирования (значок карандаша) и наклеил на SHA1
4. Работал в течение