Определить одного и того же пользователя на разных устройствах Android - PullRequest
0 голосов
/ 29 апреля 2018

Я работаю над игрой Unity, где игрок строит город, а данные об эволюции пользователя хранятся на сервере. Имея это в виду, мне нужно определить, когда игрок подключается к другому устройству, чтобы предоставить ему свой город (а не новый). Каков наилучший способ добиться этого и, если возможно, такой, который не требует от игрока каких-либо действий, таких как нажатие кнопки входа или принятие разрешений?

На данный момент я занимаюсь разработкой только для Android, и я понимаю, что мне нужно приложение, чтобы предоставить серверу TokenId, который он может проверить (и получить соответствующий идентификатор игрока). Как мне это сделать? Я пытаюсь использовать Google Play Games (плагин для Unity), но, похоже, в нем много функций, которые мне не нужны. Кроме того, и, вероятно, из-за этих функций, в первой попытке я попросил у пользователя разрешения на:

  • Знай, кто ты есть в Google
  • Управляйте своей игровой активностью в этой игре

Я играл в другие игры, которые связаны с учетной записью Google Play и не запрашивают такие разрешения, просто скажите «Добро пожаловать, XXX». Кто-нибудь может дать мне несколько советов, как это сделать?

1 Ответ

0 голосов
/ 29 апреля 2018

Каков наилучший способ достичь этого и, если возможно, тот, который не требовать действия от игрока, такие как нажатие на кнопку входа или принимать разрешения?

Вы не можете обнаружить одного и того же пользователя на разных устройствах без разрешения. У вас должен быть способ обнаружить что-то общее на этих разных устройствах, чтобы определить, является ли это один и тот же пользователь.

В этом случае единственной информацией, которая может сделать это, является учетная запись, зарегистрированная на устройстве, и для требуется разрешение . Другого пути нет. Это, возможно, единственный способ сделать это.

Это единственное разрешение, которое может быть легко добавлено в ваш проект 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 только для этого.

...