Каков наилучший способ достичь этого и, если возможно, тот, который не
требовать действия от игрока, такие как нажатие на кнопку входа или
принимать разрешения?
Вы не можете обнаружить одного и того же пользователя на разных устройствах без разрешения. У вас должен быть способ обнаружить что-то общее на этих разных устройствах, чтобы определить, является ли это один и тот же пользователь.
В этом случае единственной информацией, которая может сделать это, является учетная запись, зарегистрированная на устройстве, и для требуется разрешение . Другого пути нет. Это, возможно, единственный способ сделать это.
Это единственное разрешение, которое может быть легко добавлено в ваш проект Unity. Не требуется никаких плагинов:
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
Получите учетную запись или электронную почту, привязанную к устройству, и определите, находится ли она на сервере с API WWW
или UnityWebRequest
, затем извлеките данные, сохраненные в этой учетной записи.
Вот как получить все учетные записи на устройстве Android с помощью C # :
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 Play Games только для этого.