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

Google Play Games Services V1🔗

Login with Google

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

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

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

Настройка Google Play Games состоит из двух этапов:

  • Подключить Google Play Games к проекту
  • Подключить Google Sign-in для авторизации в Google Play Games

Подключение Google Play Games в консоли Google Play🔗

  • Откройте Консоль разработчика Google Play
  • В списке слева выберите пункт "Игровые сервисы" (Game Services) google-play-games-services
  • Нажмите кнопку "Добавить новую игру" (Add New Game) google-play-new-game
  • Следуйте указаниям окна настройки, после чего нажмите кнопку "Сохранить"
  • В меню слева выберите пункт "Связанные приложения" (Linked apps)
  • Нажмите кнопку "Android" google-play-link-android
  • В разделе "Название пакета" (Package name) введите package name вашего приложения, после чего выберите его
  • Нажмите кнопку "Сохранить и продолжить" (Save), после чего убедить в верности чексуммы сертификата вашего приложения
  • Нажмите кнопку "Авторизовать" для завершения связывания вашего игрового проекта с вашей игрой google-play-link-auth
  • Убедитесь, что packagename и sha1 чексумма сертификаты корректны
  • Откройте раздел "Сведения об игре". Скопируйте ID вашего приложения(отображается под названием вашей игры, как указано на изображении), он понадобиться на следующем шаге google-play-game-details

Теперь вам необходимо отредактировать файл AndroidManifest.xml

В разделе <application> необходимо добавить мета-информацию, и указать ID вашего приложения, полученного на предыдущем шаге. ВНИМАНИЕ! Для того, чтобы ID воспринялся системой как строка, а не как целое число, перед ID необходимо указать служебный unicode-символ \u003. Пример для ID 987654321012

<application
...>
    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
    <meta-data android:name="com.google.android.gms.games.APP_ID" android:value="\u003987654321012"/>

Подключите службу Google Sign-In🔗

  • Откройте сайт Google Sign-In for Android
  • Перейдите сразу к пункту "2" Configure a Google API project и нажмите кнопку "Configure a Project" sign-in-configure
  • Выберите в выпадающем списке ваш проект. Если вы его там не находите, значит что-то не так. Убедитесь, что вы залогинены в Google под той же учетной записью, под которой заходите в консоль Google Play sign-in-project
  • Заполните поля package name и sha-1 чексуммы сертификата, которым вы подписываете release сборку приложения
  • После появления сообщения об успешном завершении операции, нажмите на ссылку "API Console" и перейдите в консоль Google Developers sign-in-download
  • В открывшемся окне вы увидите список OAuth клиентов. Один (Android) был сгенерирован, когда вы слинковали созданную игру Google Games с вашим проектом в консоли Google Play. Второй (Web) был сгенерирован на предыдущем шаге, во время настройки Google Sign-In. Этот ID клиента необходимо скопировать для дальнейшей настройки google-developer-console-credentials

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

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

Android:

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

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

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

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

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

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

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

    implementation "com.google.android.gms:play-services-auth:20.6.0"
    implementation "com.google.android.gms:play-services-games:23.1.0"
}

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

using MRGS;

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

        var modulesParams = new List<MRGSExternalSDKSettings>;
        modulesParams.Add(new MRGSGoogleSignInParams(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.signin.MRGSGoogleSignIn;

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

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

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

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

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

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

final bool isLoggedIn = MRGSAuthenticationGoogleSignIn.getInstance().isLoggedIn();
import games.my.mrgs.authentication.google.signin.MRGSGoogleSignIn;

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

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

// Only the object of the error will come in the answer, if it happened
MRGSAuthenticationGoogleSignIn.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.signin.MRGSGoogleSignIn;

MRGSGoogleSignIn.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.
MRGSAuthenticationGoogleSignIn.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.
MRGSAuthenticationGoogleSignIn.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.signin.MRGSGoogleSignIn;
import games.my.mrgs.utils.optional.BiConsumer;

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

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

// Returns authentication's information.
MRGSGoogleSignIn.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);
        }
    }
});

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

MRGSAuthenticationGoogleSignIn.Instance().Logout();
import games.my.mrgs.authentication.google.signin.MRGSGoogleSignIn;

MRGSGoogleSignIn.getInstance().logout();

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

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

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

MRGSAuthenticationGoogleSignIn.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.signin.MRGSGoogleSignIn;

// Call #getCurrentUser() to get current user.
final MRGSUser user = ...
// Get user's avatar.
MRGSGoogleSignIn.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