我正在为Android创建一个游戏。每个用户都需要经过身份验证。
目前,当新用户启动游戏时,它会从我的服务器请求识别码,并将其存储到SharedPreferences。下次用户启动游戏时,它将使用存储的识别码进行身份验证。问题是,当用户清除这个应用程序的数据时,他没有办法拿回他的ID,所以他永远失去了他的进度。
是否有一种方法,如何生成像识别码一样的东西,这是唯一的,总是相同的一个玩家使用Firebase Play游戏auth方法?
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
.requestServerAuthCode("MyCID")
.build();
mAuth = FirebaseAuth.getInstance();
super.onCreate(savedInstanceState);
final FirebaseAuth auth = FirebaseAuth.getInstance();
AuthCredential credential = PlayGamesAuthProvider.getCredential("MyCID");
auth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
currentUser = auth.getCurrentUser();
} else {
Toast.makeText(MainActivity.this, "Authentication failed.",
Toast.LENGTH_SHORT).show();
}
}
});
if (currentUser == null) {
cu = "NO UID";
} else {
cu = currentUser.getUid();
}
我尝试了这段代码(其中是mycid:我使用了下图中的CID),但没有显示Google Play Games弹出窗口,我得到了身份验证失败的toast和cu被设置为“no UID”。
有人能解释一下这是怎么工作的吗?
编辑
我需要运行一个函数来显示这个对话框吗?我是否遗漏了什么,或者只是我在google play控制台中错误地配置了游戏?
我的当前代码:链接
你跳过了一个重要的步骤。Firebase文档通常很好,但游戏登录描述得很差。
您完成了第一步:您需要设置GoogleSignInOptions
,但是您没有将它们传递给GoogleSignInClient
。
>
在oncreate
中创建客户端:
private static final int RC_SIGN_IN = 543;
private GoogleSignInClient mGoogleSignInClient;
public void onCreate(Bundle savedInstancestate) {
super.onCreate(savedInstancestate)
// ...
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
.requestServerAuthCode("MyCID")
.build();
mGoogleSignInClient= GoogleSignIn.getClient(this, gso)
}
private void signIn() {
Intent signInIntent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(signInIntent, RC_SIGN_IN);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Result returned from launching the Intent from
GoogleSignInApi.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try {
// Google Sign In was successful, authenticate with Firebase
GoogleSignInAccount account = task.getResult(ApiException.class);
firebaseAuthWithGoogle(account);
} catch (ApiException e) {
// Google Sign In failed, update UI appropriately
Log.w(TAG, "Google sign in failed", e);
}
}
}
最后,您的html" target="_blank">代码开始发挥作用。现在我们有了GoogleSigninAccount
,调用PlayGamesAuthProvider.getCredential(...)
需要它。你在这里传递了你的客户身份,但那是错误的。它是这样工作的:你把你的客户ID给谷歌,只是为了告诉他们你是谁(或哪个应用程序)。他们会让用户登录并给你一个特殊的令牌(“ID令牌”),然后Firebase可以使用该令牌从Google Play Games中获取用户的信息。这就是你需要给Firebase的标记:
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId());
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// Sign in success, update UI with the signed-in user's information
Log.d(TAG, "signInWithCredential:success");
FirebaseUser user = mAuth.getCurrentUser();
updateUI(user);
} else {
// If sign in fails, display a message to the user.
Log.w(TAG, "signInWithCredential:failure", task.getException());
Snackbar.make(findViewById(R.id.main_layout), "Authentication Failed.", Snackbar.LENGTH_SHORT).show();
updateUI(null);
}
// ...
}
});
}
希望能有所帮助!您可以在这里和这里找到文档中引用的整个代码(这些文件显示了文档中的代码片段)。
我想在我的LibGDX Android游戏中使用Google Play Game Services API的成就和排行榜。我所做的唯一一件事就是从游戏服务开发者网站上获取运行的示例。我已经尝试在我的项目中使用这段代码很多天了,但仍然一无所获。我也尝试过学习本教程http://helios.hud.ac.uk/u1070589/blog/?p=202但我没有“主游戏类(从ApplicationLis
用户输入赌徒开始资金的整数值用户输入赌徒期望资金的整数值-如果赌徒的资金达到这个值,他就退出游戏用户输入要执行的试验次数的整数值-每次试验将由足够的游戏组成,要么将赌徒资金减少到零,要么将其增加到期望的资金声明一个整数变量(设置为零)来跟踪解决方案的获胜次数,显然,将由嵌套循环结构和选择结构组成,第一个循环(外循环)将循环执行所需的试玩次数设置现金等于赌注第二个循环(内循环)将模拟一张牌游戏的结果
我用Unity3d制作了一个游戏。我想在游戏中制作一个按钮,玩家可以点击这个按钮链接GooglePlay,给我的游戏打分。我需要什么插件,如何做到这一点?我刚找到这个:链接
球门 我对机器学习相当陌生,经过一些在线教育后,这是我的第一个真正的项目。这是一个叫做Ouril的游戏,在这个游戏中,你和你的对手各有六个“房子”,里面有四块起始石头。你轮流玩一个房子和分配它的石头,这可能会让你获得对手的石头。你赢得了25块石头。 该项目的目标是拥有一个经过训练的函数,可以在给定当前游戏状态的情况下预测一个动作的好坏,以便机器人可以选择最好的预测动作并进行游戏。 安装程序 我构建
我的firebase cloud函数包含受保护的路由,只有在请求头中传递有效的IdToken时才能访问这些路由。云函数API如下所示 最初,我使用Firebase身份验证创建新用户并获取IdToken 我可以使用Auth emulator UI创建新用户,但是如何生成这些用户的访问令牌呢?是否有任何APIendpoint可以返回本地保存的用户的IdToken,这样我就可以测试受保护的API,而无需
项目设置:Intellj- 我正在尝试启动并运行我的数据库。我可以单击“立即应用此脚本”按钮。 单击后,应用程序将正常启动。但当我查看默认DB和公共模式时,什么都没有。 我正在使用Intellj的集成DB工具打开DB。 该项目在GitHub上(如果更好,我也可以发布重要文件) 当我直接从控制台运行脚本时,它可以按预期工作。 如何以及在哪里可以检查脚本是否已执行以及在哪里执行?
我问这个问题的动机是,我发现了一个在图数据集上使用机器学习的有趣问题。有关于这个主题的论文。例如,“从有向图上的标记和未标记数据中学习”(周,黄,斯科普夫)。然而,我没有人工智能或机器学习的背景,所以在从事任何科学工作之前,我想为更普通的观众写一个更小的程序。 几年前,我写了一款名为Solumns的游戏。它是经典世嘉游戏《柱子》的邪恶变体。受巴斯特的启发,它暴力地选择对玩家不利的颜色组合。这很难。
我正在构建一个android应用程序,它使用Firebase作为后端,并采用模型、视图和演示者架构。然而,Firebase是一种云服务的事实使我的android应用程序中的自动测试变得复杂。到目前为止,我已经构建了大部分身份验证系统,但无法看到如何在我的应用程序中实现Firebase代码的单元测试。在端到端测试方面,我也陷入了困境。 由于测试是任何android应用程序的基础,没有it应用程序开发