Перейти к содержанию

Google Play Games Services V2🔗

Login with Google

Google Play Games Services V2 - набор сервисов, который позволяет вашим пользователям авторизоваться, отслеживать свои лучшие результаты в таблице лидеров, сравнивать их достижения, приглашать друзей сыграть в игру. Приложения могут включать любые или все из следующих функций, поддерживаемых Google Play Games:

  • Рейтинги — сравнивает оценки с друзьями игрока и с другими игроками со всего мира
  • Достижения — очки присуждаются игрокам в составе системы отслеживания достижений Google Play Games. Игроки могут зарабатывать очки, выполняя определённые внутриигровые задачи. Игроки не могут использовать раздел для чего-либо иного, кроме как оценить прогресс в играх. Он был разработан так, чтобы игроки могли общаться и конкурировать друг с другом.

Важно

Основные отличия от Google Play Games Services V1 в том что:

  • Авторизация пользователя происходит в момент запуска приложения.
  • Отсутствует API для возможности разлогинить пользователя.
  • Отсутствует API для получения клиентского токена.
  • Отсутствует API для авторизации через Google Sign In.

Предварительная настройка🔗

С предварительной настройкой можно ознакомиться в разделе GoogleSignIn - Предварительная настройка

Добавление зависимостей🔗

Далее необходимо добавить в проект MRGS SDK:

Unity:

Добавление в проект (общая инструкция)

Шаг 1. Добавьте источники

Для того, чтобы добавить MRGS в проект через Unity Package Manager (доступно с Unity 2018+) просто добавьте в файл Packages/manifest.json раздел scopedRegistries, добавив в него следующую запись:

{
    "dependencies": {
        ...
    },
    "scopedRegistries": [
            {
                "name": "MRGS",
                "url": "https://mrgs-nexus.my.games/repository/mrgs-uninty-plugins/",
                "scopes": [
                    "games.my.mrgs"
                ]
            }
    ]
}

Альтернативно, можно нажать Edit -> Project Settings -> Package Manager -> '+' in scoped registry section, и заполнить поля в соответствии с данными выше.

Шаг 2. Добавьте зависимость

  • Нажмите Window -> Package Manager -> select 'Packages: MyRegistries' from dropdown list, выберите пакет MRGSAuthenticationGoogleGames из списка, затем нажмите "Install"
  • Импортируйте модуль: using MRGS;
  • Загрузите последнюю версию библиотеки. Распакуйте архив.
  • (Для интеграции unitypackage) В Unity нажмите Assets -> Import Package -> Custom Package, и выберите пакет games.my.mrgs.authenticationgooglegames.unitypackage из скачанного архива.
  • (Для интеграции tgz) В Unity нажмите Window -> Package Manager -> '+' -> Add package from tarball, и выберите пакет games.my.mrgs.authenticationgooglegames-<version>.tgz из скачанного архива.
  • Импортируйте модуль: using MRGS;

Android:

Добавление в проект

Добавьте зависимость в build.gradle файл:

dependencies {
    def mrgsVersion = "6.x.x"

    implementation "games.my.mrgs:authentication-google-play:$mrgsVersion"
}

Скопируйте файлы MRGSAuthentication.aar и MRGSAuthenticationGoogleGames.aar в директорию libs вашего проекта. Добавьте необходимые зависимости в файл build.gradle

dependencies {
    //...
    implementation(name: 'MRGSAuthentication', ext:'aar')
    implementation(name: 'MRGSAuthenticationGoogleGames', ext:'aar')

    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'androidx.browser:browser:1.5.0'

    implementation "com.google.android.gms:play-services-games-v2:17.0.0"
}

Настройка параметров MRGS🔗

Теперь вам необходимо указать полученный Web Client Id при инициализации MRGS

using MRGS;

public class MasterController : MonoBehaviour
{
    void Awake()
    {
        // Setting up mrgs params
        // ...

        var modulesParams = new List<MRGSExternalSDKSettings>;
        modulesParams.Add(new MRGSGooglePlayGamesParams(WEB_CLIENT_ID));
        // Setting up external sdk params
        // ...
        IMRGSServerDataDelegate loadDelegate =...
        MRGService.Instance.Initialize(serviceParams, modulesParams, loadDelegate);
    }
}
import games.my.mrgs.MRGServiceParams;
import games.my.mrgs.MRGSModuleParams;
import games.my.mrgs.MRGService;
import games.my.mrgs.authentication.google.play.MRGSGooglePlayGames;

public class YourApplicationClass extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        final MRGServiceParams serviceParams = ...;
        final List<MRGSModuleParams> moduleParams = ...;
        // Setting External SDKs
        final MRGSGooglePlayGamesParams googlePlayGamesParams = MRGSGooglePlayGamesParams.init("GOOGLE_CLIENT_ID");
        moduleParams.add(googlePlayGamesParams);

        MRGService.service(context, serviceParams, moduleParams);
    }
}

Работа с MRGSAuthentication интерфейсом🔗

Для работы с Google Play Games воспользуйтесь классом MRGSAuthenticationGoogleGames. Обращаем внимание, что данный класс реализует основной интерфейс MRGSAuthentication, то есть имеет все методы этого интерфейса. Далее описана стандартная реализация интерфейса MRGSAuthentication:

Проверка статуса авторизации (залогинен ли пользователь):

final bool isLoggedIn = MRGSAuthenticationGoogleGames.Instance.IsLoggedIn();
import games.my.mrgs.authentication.google.play.MRGSGooglePlayGames;

final boolean isLoggedIn = MRGSGooglePlayGames.getInstance().isLoggedIn();

Для обычного входа воспользуйтесь одним из методов:

// В ответе придет только объект ошибки, если она случилась
MRGSAuthenticationGoogleGames.Instance.Login((MRGSError error) => {
    if (!error) {
        // Auth success
    }
});
import android.app.Activity;

import androidx.annotation.NonNull;

import games.my.mrgs.MRGSError;
import games.my.mrgs.authenticationMRGSCredentials;
import games.my.mrgs.authentication.MRGSLoginCallback;
import games.my.mrgs.authentication.google.play.MRGSGooglePlayGames;

MRGSGooglePlayGames.getInstance().login(activity, new MRGSLoginCallback() {
    @Override
    public void onSuccess(@NonNull MRGSCredentials credentials) {
        // Handle result.
    }

    @Override
    public void onError(@NonNull MRGSError error) {
        // Handle error.
    }
});

Чтобы получить всю информацию о текущем состоянии авторизации, информацию пользователя, статусе авторизации, воспользуйтесь методами:

//An object is returned that combines information about the user (identifier, name, email, etc.) and about the token.
MRGSAuthenticationGoogleGames.Instance.GetCredentials((MRGSAuthenticationCredential credentials, MRGSError error) => {
    string resultDescription = "getCredentials:\nCredentials: " + credentials + "\nError:\n" + error;
    MRGSLog.getInstance().addLog("MRGSAuthentication<Unity> - AppleGameCenter " + resultDescription);
    if (!error) {
        // Credentials data work
    }
});

//Information about the user, identifier, name, email, etc. is returned separately.
MRGSAuthenticationGoogleGames.Instance.GetCurrentUser((MRGSAuthenticationUser user, MRGSError error) => {
    string resultDescription = "getCurrentUser:\User: " + user + "\nError:\n" + error;
    MRGSLog.getInstance().addLog("MRGSAuthentication<Unity> - AppleGameCenter " + resultDescription);
    if (!error) {
        // User data work
    }
});
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import games.my.mrgs.MRGSError;
import games.my.mrgs.authentication.MRGSAccessToken;
import games.my.mrgs.authentication.MRGSAuthentication;
import games.my.mrgs.authentication.MRGSUser;
import games.my.mrgs.authentication.google.play.MRGSGooglePlayGames;
import games.my.mrgs.utils.optional.BiConsumer;

// Returns user's information.
MRGSGooglePlayGames.getInstance().getCurrentUser(new MRGSAuthentication.UserCallback() {
    @Override
    public void onSuccess(@NonNull final MRGSUser user) {
    }

    @Override
    public void onError(@NonNull MRGSError error) {
    }
});

// Returns authentication's information.
MRGSGooglePlayGames.getInstance().getAccessToken(new BiConsumer<MRGSAccessToken, MRGSError>() {
    @Override
    public void accept(@Nullable MRGSAccessToken accessToken, @Nullable MRGSError error) {
        if (error != null) {
            Log.d("MRGSAuthentication", "AccessToken error: " + error.getErrorText());
        } else {
            Log.d("MRGSAuthentication", "AccessToken success: " + accessToken);
        }
    }
});

Для того, чтобы "выйти" из аккаунта пользователя, воспользуйтесь методом:

MRGSAuthenticationGoogleGames.Instance.Logout();
import games.my.mrgs.authentication.google.play.MRGSGooglePlayGames;

MRGSGooglePlayGames.getInstance().logout();

Важно

Данная функция лишь только удаляет кэш, поскольку Google Play Games Services V2 не поддерживает функцию "выхода", то есть фактически пользователь остается залогинен. Единственная возможность выйти - это зайти в приложение Play Games, выбрать нужное приложение и отозвать доступ.

Дополнительные возможности Google Play Games🔗

Также, MRGSAuthenticationGoogleGames (MRGSGooglePlayGames на Android) предлагает вам несколько дополнительных возможностей

Для того, чтобы получить аватарку пользователя с заданным идентификатором, воспользуйтесь методом:

MRGSAuthenticationGoogleGames.Instance.GetAvatar("required_user_id", MRGSAuthenticationPhotoSize.Small, (Texture2D avatar, MRGSError error) => {
    if(error == null){
        // Operation completed successfully
    }
});
import android.graphics.Bitmap;

import androidx.annotation.NonNull;

import games.my.mrgs.MRGSError;
import games.my.mrgs.authentication.MRGSAvatarCallback;
import games.my.mrgs.authentication.MRGSUser;
import games.my.mrgs.authentication.google.play.MRGSGooglePlayGames;

// Call #getCurrentUser() to get current user.
final MRGSUser user = ...
// Get user's avatar.
MRGSGooglePlayGames.getInstance().getUserAvatar(user, new MRGSAvatarCallback() {
    @Override
    public void onSuccess(@NonNull Bitmap bitmap) {
        // Handle result.
    }

    @Override
    public void onError(@NonNull MRGSError error) {
        // Handle error.
    }
});

Работа с достижениями🔗

Работа с достижениями описана в разделе Основные интерфейсы - Работа с достижениями игрока - (Achievements).


Последнее обновление: 2023-10-25
Дата создания: 2020-05-28