登录失败。请检查您的网络连接并重试

2023-12-29

我正在尝试使用 Google Play 游戏服务制作简单的游戏,但无法登录 Google Play 游戏。

我明白了error:

登录失败。请检查您的网络连接,然后重试。

我有 MainActivity 和三个片段(MainFragment、GameFragment 和 ResultFragment)。

MainFragment是主菜单的片段,其中使用有按钮来单击来开始游戏。

授权?

我已在 Google Play 开发者控制台中使用 SHA-1 链接并授权我的游戏。

当我使用 Android Studio 时,我的包名称类似于:aplikacijezaandroid.thebuttonchallenge,并且我在 Google Play 开发者控制台上的链接应用程序中添加了两个应用程序版本。

所以我有 com.aplikacijezaandroid.thebuttonchallenge 和 aplikacijezaandorid.thebuttonchallenge

App ID?

我将应用程序 id 和排行榜 id 添加到 strings.xml 中,并将元标记添加到 Android Manifest 中。

我在 AndroidManifest.xml 中添加了 Internet 权限

Testing?

我使用物理设备从 Android Studio 测试和调试应用程序,并且在 Google Play 开发者控制台中添加了我自己的 gmail 作为测试用户。

这是我的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>

Here is 主要活动 class:

 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);
}

我已经解决了这个问题,所以我将发布答案。

我已将应用程序 ID 和排行榜 ID 从 strings.xml 移至 Values 文件夹中的 ids.xml。

我已删除所有客户端 ID,并再次添加用于调试密钥库和发布密钥库的客户端 ID。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

登录失败。请检查您的网络连接并重试 的相关文章

随机推荐

  • 有没有办法用一种类型声明多个函数参数?

    我对编程很陌生 无法真正理解为什么我不能只声明参数 类型与我处理普通变量的方式相同 并且必须一次又一次地声明类型 我的意思是 为什么我必须 Func int a int b float c 代替 Func int a b float c 当
  • 如何将 Syntastic 设置为 python3 检查器而不是 python2

    在 MacVim 中 我将以下代码保存为 test py print Hello world python2 这对于 python3 来说显然是错误的 但是 我运行 w 保存文件后 没有错误消息 以下是 vimrc 的一部分 都是关于 Sy
  • 如何在 Xamarin.android 中更改输入光标颜色

    在我的应用程序中需要更改 xamarin android 条目默认颜色 在我的应用程序中 背景图像是黑色 xamarin android 中条目的默认颜色也是相同的颜色 因此需要设置不同的颜色 请就此提出任何想法 我正在尝试以下代码 但没有
  • 在 Azure 自动化 Runbook 中执行时 Set-AzureRmContext 错误

    Update 似乎其他人也遇到了同样的问题reported https feedback azure com forums 246290 automation suggestions 16304161 add azurermaccount
  • 如何将 .sql 文件加载到 Scala?

    我有一个很长的 SQL 查询存储在 data sql 文件中 我想在我的 Scala 代码中执行这个文件 对于 sqlQuery 字符串 我使用 Spark sql sqlQuery 来执行 sql 但是对于 sql 文件 我应该如何执行它
  • 如何制作倒置的边框半径(反应本机)?

    我怎样才能在react native中做出这样的形状 在CSS中 解决方案之一是使用 webkit mask image 但我不知道如何在react native中做到这一点 倒边界半径 https i stack imgur com Yj
  • Realm Cocoa:通过 PK 查找多个对象

    潜伏已久 第一次提问 我在一个项目中使用 Realm Cocoa 来自 Realm io 并且正在努力通过 PK 执行搜索 假设我有一个名为RLMFoo它有一个主键称为bar 我还有一个 PK 列表 假设存储在一个数组中 NSArray p
  • 面试题:在php中,是123==0123吗?

    我已经回答了 这是假的 然后他问为什么 我无法回答 有人能回答吗 我很有兴趣学习它 这段代码 var dump 123 var dump 0123 会给你 int 123 int 83 这是因为0123是八进制表示法 因为0在开始时 whi
  • Erlang 和 JavaScript MD5 摘要匹配

    在这里测试 MD5 的 Javascript 实现 http www webtoolkit info javascript md5 htmlhttp www webtoolkit info javascript md5 html http
  • 分布式深度优先搜索

    我尝试在 C 中实现深度优先搜索 但我不太确定如何以分布式计算方式执行此操作 如果你们能帮我解决这个问题 我将非常感激 你可以在下面找到我的 DFS 代码 public class DFS static List
  • 在react-router :id中使用百分号(%)

    我正在尝试在react router id 中使用百分号 当使用 在 URI 中被禁止 我必须手动编码我的 URI 才能使用这个百分号 因此 使用 Link 时 我使用encodeURI 函数对 URI 进行编码 在我的页面的源代码中 我可
  • onLongPress 未按预期工作

    我有一个表面视图 使用以下代码在其上实现手势检测 surfaceview setOnTouchListener new OnSwipeTouchListener this public class OnSwipeTouchListener
  • 如果 div 为空,则忽略边距

    我有 2 个 DIV 彼此相邻水平对齐 并使用包装器居中 我使用 margin right 将 DIV2 与 DIV1 分开 DIV2 可能没有内容 如果 DIV2 没有内容 我希望忽略边距 而 DIV1 单独居中 这是我的CSS div1
  • 无法找到“org.springframework.mail.javamail.JavaMailSender”类型的 bean

    我在用spring boot 2 0 7 Release and spring boot starter mail 2 0 7 Release 我正在自动装配javaMailsender在尝试部署时 在 Windows 上工作正常的类内部U
  • 如何在 C#.NET 4.0 中编写 WMI 提供程序?

    任何人都可以帮助我使用 C net 4 0 编写电池的 WMI 提供程序吗 有一个旧的 C 示例here http www c sharpcorner com uploadfile falkor wmiproviderguide112620
  • Python 用户定义的数据类型

    我正在用 Python 编写一个 Rogue like 游戏 并定义我的Tile班级 瓷砖可以是块状的 墙壁的或地板的 我希望能够写一些类似的东西 self state Blocked 类似于如何使用布尔值 但具有三个值 有没有一种好方法可
  • 更改 Android 录音默认输入源

    我目前正在编写一个需要录制和实时处理音频数据的应用程序 为此 我使用 AudioRecord 类 这一切都很好 除了我的主要测试设备 Galaxy Nexus 上录制音频的默认设置是从后置扬声器录制 我假设大多数手机的默认录音源是背面或底部
  • GHC 中自动专业化的传递性

    From the docs http www haskell org ghc docs 7 6 3 html users guide pragmas html idp49866112对于 GHC 7 6 你 通常甚至一开始就不需要 SPEC
  • JQuery IE 生涩幻灯片动画

    我有以下代码来动画显示 隐藏 div headerClosed headerOpen live click function this next slideToggle slow 这将显示并隐藏具有以下标记的 div div class d
  • 登录失败。请检查您的网络连接并重试

    我正在尝试使用 Google Play 游戏服务制作简单的游戏 但无法登录 Google Play 游戏 我明白了error 登录失败 请检查您的网络连接 然后重试 我有 MainActivity 和三个片段 MainFragment Ga