我想将 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 上的状态:
我确实在 Google Cloud Console 和 OAuth 2.0 客户端 ID 中创建了 OAuth 同意屏幕。另外,在 Google Play Console 的游戏服务、凭据、Android 下,我引用了已发布的 OAuth 内容。 在 Google Cloud Console 中,在应用程序注册阶段,我的范围是:
在我的代码中,我有一个按钮(我知道,不是最终的按钮),它会触发打印以下代码:
(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:这不起作用。不知怎的,我不明白这个(嘿,你已登录)-弹出窗口。
如果您需要任何其他代码/信息,我很乐意为您提供。
看来直接在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" />
我也有同样的问题。这就是我在搜索了几个小时后从字面上解决它的方法。 最后一步对我来说是最重要的。(一定要尝试一下)
第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.**