我正在开发一个统一游戏,玩家在游戏中构建一个城市,用户进化数据保存在服务器上。考虑到这一点,我需要检测玩家何时在不同的设备上连接,为他提供自己的城市(而不是一个新的)。实现这个目标的最佳方法是什么,如果可能的话,它不需要玩家的操作,比如点击登录按钮或接受权限?
目前,我只为Android开发,我的理解是,我需要应用程序为服务器提供一个TokenId,它可以对其进行验证(并检索相关的播放器id)。我该怎么做?我正在尝试使用Google游戏(统一插件),但它似乎有很多我不需要的功能。此外,也可能是因为这些特性,在我第一次尝试中,我向用户询问了对以下内容的权限:
我玩过其他的游戏,连接谷歌的Play帐户,不要求这样的权限,只需说“欢迎XXX”。有人能给我一些怎么做的建议吗?
发布于 2018-04-28 22:27:25
实现这个目标的最佳方法是什么,如果可能的话,它不需要玩家的操作,比如点击登录按钮或接受权限?
未经允许,无法在不同设备上检测到同一个用户。您必须有一种方法来检测那些不同设备上常见的东西,以确定它是否是同一个用户。
在这种情况下,唯一可以这样做的信息是在设备上注册的帐户,它需要许可。没别的办法了。这可能是唯一的办法。
这是唯一需要的权限,可以很容易地added到您的团结项目。不需要插件:
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
获取与设备绑定的帐户或电子邮件,并使用WWW
或UnityWebRequest
API确定其是否位于服务器上,然后提取保存在该帐户上的数据。
下面是如何使用C#获取Android设备上的所有帐户
string[] getAllEmailAccounts()
{
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaClass ACManager = new AndroidJavaClass("android.accounts.AccountManager");
AndroidJavaObject ACManagerAct = ACManager.CallStatic<AndroidJavaObject>("get", currentActivity);
AndroidJavaObject accounts = ACManagerAct.Call<AndroidJavaObject>("getAccountsByType", "com.google");
AndroidJavaObject[] accountArray = AndroidJNIHelper.ConvertFromJNIArray<AndroidJavaObject[]>(accounts.GetRawObject());
string[] accountName = new string[accountArray.Length];
for (int i = 0; i < accountName.Length; i++)
{
accountName[i] = accountArray[i].Get<string>("name");
}
return accountName;
}
通过这样做,您将避免使用Google游戏插件。
https://stackoverflow.com/questions/50081354
复制相似问题