Flutter 中的 Google Play 游戏服务返回 null

问题描述 投票:0回答:2

我想将 Google Play 游戏服务与 Flutter 结合使用。具体来说,我想使用 SaveGames。

为此,我使用这个包:https://pub.dev/packages/games_services

我像这样将它导入到我的 pubspec.yaml 中(oc 我有比这更多的依赖项):

dependencies:
  games_services: ^4.0.0

/android/build.gradle 中的重要部分如下所示:

buildscript {
    ext.kotlin_version = '1.9.0'
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.3.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.google.gms:google-services:4.3.13'
    }
}

/android/app/build.gradle 中的依赖项如下所示:

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation "com.google.android.gms:play-services-games-v2:+"
}

在 AndroidManifest.xml 的应用程序级别,我添加了以下内容:

    <meta-data
        android:name="com.google.android.gms.games.APP_ID"
        android:value="[Here is my number from Google Play Console, only numbers, pretty sure it is the correct one]" />
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />

这是 Google Play Console 上的状态:

enter image description here

我确实在 Google Cloud Console 和 OAuth 2.0 客户端 ID 中创建了 OAuth 同意屏幕。另外,在 Google Play Console 的游戏服务、凭据、Android 下,我引用了已发布的 OAuth 内容。 在 Google Cloud Console 中,在应用程序注册阶段,我的范围是:

enter image description here

在我的代码中,我有一个按钮(我知道,不是最终的按钮),它会触发打印以下代码:

(await GameAuth.signIn()).toString()

我收到 null。

这个总是假的:

await GameAuth.isSignedIn

此外,每当我调用该行代码时,我都会得到此调试控制台输出。

I/PlayService( 4730): isAuthenticated: false toString: com.google.android.gms.games.AuthenticationResult@36a8a74
I/signin  ( 4730): success

TL;DR:这不起作用。不知怎的,我不明白这个(嘿,你已登录)-弹出窗口。

如果您需要任何其他代码/信息,我很乐意为您提供。

flutter google-play-games
2个回答
0
投票

看来直接在manifest中添加id是不行的。所以这是错误的

<meta-data android:name="com.google.android.gms.games.APP_ID"
    android:value="app_id" />

通过在 android/app/src/main/res/values/strings.xml 文件夹中添加 strings.xml 文件夹来修复它,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_id">1111111111</string>
</resources>

然后在清单中添加对此字符串的引用:

   <meta-data
            android:name="com.google.android.gms.games.APP_ID"
            android:value="@string/app_id" /> 

0
投票

我也有同样的问题。这就是我在搜索了几个小时后从字面上解决它的方法。 最后一步对我来说是最重要的。(一定要尝试一下)

第1步: 在我的 android/gradle.build 中我做了一些更改。

    buildscript {
    ext.kotlin_version = '1.5.31' //changed this version
    repositories {
        google()
        mavenCentral()
    }

    
   dependencies {
        classpath 'com.android.tools.build:gradle:7.3.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.google.gms:google-services:4.4.2'//used this version
    }
}

//rest of the code

第2步: 在我的 android/app/gradle.build 中我做了这些更改

plugins {
    id "com.android.application"
    id "kotlin-android"
    id 'com.google.gms.google-services' //added this line
    // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
    id "dev.flutter.flutter-gradle-plugin"
}

def localProperties = new Properties()
def localPropertiesFile = rootProject.file("local.properties")
if (localPropertiesFile.exists()) {
    localPropertiesFile.withReader("UTF-8") { reader ->
        localProperties.load(reader)
    }
}

def flutterVersionCode = localProperties.getProperty("flutter.versionCode")
if (flutterVersionCode == null) {
    flutterVersionCode = "1"
}

def flutterVersionName = localProperties.getProperty("flutter.versionName")
if (flutterVersionName == null) {
    flutterVersionName = "1.0"
}

android {
    namespace = "com.gulsoft.infinite_tic_tac_toe"
    compileSdk = flutter.compileSdkVersion
    ndkVersion = flutter.ndkVersion

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId = "com.gulsoft.infinite_tic_tac_toe"
        // You can update the following values to match your application needs.
        // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
        minSdk = flutter.minSdkVersion
        targetSdk = flutter.targetSdkVersion
        versionCode = flutterVersionCode.toInteger()
        versionName = flutterVersionName
    }

    buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so flutter run --release works.
            signingConfig = signingConfigs.debug
        }


    }
}


//Removed dependencies from this place

flutter {
    source = "../.."
}

//added these
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'

第3步: 添加了 google-services.json 文件,该文件是在 firebase 您的 sha 指纹和/或 google cloud 中创建的。创建它并将其添加到 android/app 目录

第 4 步:(最后和小鬼) 在您的 android/app/src/main/android.manisfest 文件中添加这些。

        <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" />
        <meta-data
            android:name="com.google.android.gms.games.UNITY_CLIENT_ID"
            android:value="@string/default_web_client_id" />

在你的 android/app/src/main/res/value 中创建一个 string.xml 文件 在那里添加这两个信息

<resources>
    <string name="app_id">add-your-app-id-here</string>
    <string name="default_web_client_id">add-your-web-client-id-here</string>
</resources>

**Make Sure you dont create any integer.xml file for the google_play_services_version as that will be fetched automatically from google-services.json.**
© www.soinside.com 2019 - 2024. All rights reserved.