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

MyGames🔗

Login with MyGames

Login with MyGames облегчает пользователям вход в ваши приложения. Благодаря единому бренду, под которым выходят игры MY.GAMES, теперь можно легко авторизовать пользователя с помощью понятной для него платформы. Более того, регистрация нового пользователя в MY.GAMES может производиться через другие соцсети, такие как Facebook, VK, Google, поэтому пользователь может иметь единую точку входа в виде авторизации MY.GAMES.

Важно

Ниже в разделах предварительной настройки и настройки параметров MRGS все описано для iOS и Android, если вас интересует работа с MY.GAMES авторизацией на десктопе, обратитесь к разделу ниже.

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

Получение ключей и необходимых данных🔗

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

  • Client ID - уникальный идентификатор приложения в системе авторизации MY.GAMES

Для того, чтобы зарегистрировать приложение в системе и получить вышеуказанные данные, необходимо зайти на сайт MRGS, зайти в окно редактирования вашего приложения, выбрать раздел "Интеграции", и найти раздел "My.Games", в котором будет кнопка "Создать проект".

MRGS MyGames Create

После нажатия будет создан проект в системе MY.GAMES, и показаны значения ClientID и ClientSecret. Для клиента необходим лишь полученный ClientID, а ClientSecret вы можете использовать на своем сервере для взаимодействия с MY.GAMES.

MRGS MyGames Created

Использование одного проекта для всех платформ

На данный момент при стандартном подходе для каждого приложения в системе MRGS (mrgs appId) необходимо создать новое приложение в MY.GAMES по нажатию кнопки (описано выше), поэтому в итоге для каждого приложения у вас будет своя пара MyGames clientId/secret, что не всегда удобно и логично. Вы можете использовать одно приложение (пару MyGames clientId/secret) для всех платформ, для этого необходимо создать задачу на проект MRGS, указать список MRGS appId, и полученную ранее пару MyGames clientId/secret (интерфейс по добавлению этих данных вручную находится в разработке, пока можно только через task), и мы добавим их ко всем указанным приложениям.

Использование созданных ранее проектов

В случае, если у вас уже есть зарегистрированный проект в системе MY.GAMES, и вы хотите использовать его для авторизации, вам необходимо добавить ключи на сайт MRGS. Для этого необходимо создать задачу на проект MRGS, указать MRGS appId, Sezam ClientId, Sezam Secret (интерфейс по добавлению этих данных вручную находится в разработке, пока можно только через task). Обратите внимание, что ClientId и Secret необходимы именно из системы авторизации Sezam, они не равны MyGamesID/MyGames AppID (GMRID) и тд. Чтобы получить Sezam ClientId, Sezam Secret, необходимо обратиться к коллегам из MY.GAMES (интерфейс по отображению этих данных на сайте разработчика MY.GAMES находится в разработке, о статусе уточняйте у коллег из MY.GAMES)

Настройка проекта🔗

Для того, чтобы авторизация работала корректно, необходимо добавить некоторые изменения в проект:

Для Unity

Для iOS:

Необходимо добавить новую URL-схему для открытия приложения извне в Info.plist приложения. Новую схему открытия приложения нужно добавить, чтобы браузер мог вернуть пользователя обратно в ваше приложение. Схема, которую необходимо добавить, выглядит так: mygms-<BUNDLE_ID>, где BUNDLE_ID - идентификатор пакета (например, если BUNDE_ID - games.my.mrgs.testapp, то схема, которую необходимо добавить - mygms-games.my.mrgs.testapp). Подробно про добавление URL-схем в сгенерированном проекте написано в данной статье, но в Unity есть более простой метод добавления данных в plist приложения. Для этого добавьте код в Unity post build process:

[PostProcessBuild]
public static void PostProcessBuild(BuildTarget target, string path)
{
    string plistPath = path + "/Info.plist";
    PlistDocument plist = new PlistDocument();
    plist.ReadFromString(File.ReadAllText(plistPath));
    PlistElementDict rootDict = plist.root;

    // Добавление URL-схемы
    PlistElementArray appSchemes = rootDict.CreateArray("CFBundleURLTypes");
    PlistElementDict appSchemesDict = appSchemes.AddDict();
    appSchemesDict.SetString("CFBundleURLName", "");
    PlistElementArray appSchemesArray = appSchemesDict.CreateArray("CFBundleURLSchemes");                
    appSchemesArray.AddString("<YOUR_NEW_SCHEME>"); // Где YOUR_NEW_SCHEME - новая схема вашего приложения, например, mygms-mrgs.test.app

    File.WriteAllText(plistPath, plist.WriteToString());
}

Или измените уже существующий код добавления свойств в Info.plist приложения, если он у вас есть.

Для iOS

Необходимо добавить новую URL-схему для открытия приложения извне в Info.plist приложения. Новую схему открытия приложения нужно добавить, чтобы браузер мог вернуть пользователя обратно в ваше приложение. Схема, которую необходимо добавить, выглядит так: mygms-<BUNDLE_ID>, где BUNDLE_ID - идентификатор пакета (например, если BUNDE_ID - games.my.mrgs.testapp, то схема, которую необходимо добавить - mygms-games.my.mrgs.testapp). Подробно про добавление URL-схем в проекте написано в данной статье.

С помощью UI:

Для добавления URL-схемы необходимо:

  • Зайдите в Info.plist вашего приложения
  • Добавьте строку «URL types»
  • Разверните первый элемент («Item0»), добавьте строку «URL identifier» и добавьте значение с идентификатором своего приложения (например, com.company.appname).
  • Добавьте строку в первый элемент («item0») в «URL types» и назовите его «URL Schemes» и добавьте новый элемент (нужную URL-схему) в «URL Schemes»

В итоге получится такая структура:

Url schemes

В виде XML:

Добавьте в ваш Info.plist следующие данные:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>YOUR_NEW_SCHEME</string>
        </array>
    </dict>
</array>

Note: для URL-схем, если у вас уже есть такая структура в plist'е с другими схемами, то можно просто добавить еще один элемент в массив схем (CFBundleURLSchemes)

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

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

iOS:

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

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

Через Package collection

  • В Xcode выберите File > Add Packages
  • Выберите «+» > "Add Swift Package Collection"
  • Вставьте URL: https://mrgs-nexus.my.games/repository/ios-sdks/MRGSPackageCollection.json
  • Выберите модуль MRGSAuthentication из "MRGS Package Collection".
  • Или вы можете выбрать пакет «MRGS» из "MRGS Package Collection" (содержит все модули mrgs в качестве продуктов), а затем выбрать только продукт "MRGS/Authentication".

Отдельными пакетами

  • В Xcode выберите File > Add Packages
  • В строке поиска в правом верхнем углу вставьте URL: https://mrgs-gitea.my.games/mrgs/mrgsauthentication-ios-sdk.git
  • Добавьте модуль в свой проект
  • Или вы можете вставить URL https://mrgs-gitea.my.games/mrgs/ios-sdks.git, чтобы подключить пакет "MRGS", который содержит все модули mrgs в качестве продуктов, а затем выбрать только продукт "MRGS/Authentication".

Шаг 2. Добавьте поддержку категорий ObjectiveC

  • В настройках проекта установите флаг -ObjC в поле "Other linker Flags".
  • Импортируйте модуль в коде: @import MRGServiceKit; или @import MRGSAuthentication; или #import <MRGSAuthentication/MRGSAuthentication.h>

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

В вашем podfile добавьте источники в начало файла:

source 'https://github.com/CocoaPods/Specs.git' # For main repo
source 'https://mrgs-gitea.my.games/mrgs/cocoapods-specs.git'  # For MRGS repo

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

В target добавьте последнюю версию MRGSAuthentication:

Чтобы добавить через subspecs:

target 'MyProject' do
    pod 'MRGS', '~> 5.0.0', :subspecs => ['Authentication']
end

Для добавления через отдельные модули:

target 'MyProject' do
    pod 'MRGSAuthentication', '~> 5.0.0'
end

Чтобы добавить все модули mrgs:

target 'MyProject' do
    pod 'MRGS/AllKits', '~> 5.0.0'
end

Шаг 3. Установите зависимости

  • Выполните pod install (или pod install --repo-update если необходимо)
  • Импортируйте модуль в коде: @import MRGServiceKit; или @import MRGSAuthentication; или #import <MRGSAuthentication/MRGSAuthentication.h>

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

Добавьте зависимость в ваш Cartfile:

binary "https://mrgs-nexus.my.games/repository/ios-sdks/MRGSAuthentication/MRGSAuthentication.json" ~> 5.0.0

Шаг 2. Установите зависимости

  • Выполните carthage update --use-xcframeworks
  • Добавьте загруженные фреймворки в свой проект (убедитесь, что опция "do not embed" включена)
  • В настройках проекта установите флаг -ObjC в поле "Other linker Flags".
  • Импортируйте модуль в коде: @import MRGServiceKit; или @import MRGSAuthentication; или #import <MRGSAuthentication/MRGSAuthentication.h>
  • Загрузите последнюю версию библиотеки. Распакуйте архив.
  • Добавьте MRGSAuthentication.xcframework из скачанного архива в ваш проект (Перетащите библиотеки в раздел "Linked frameworks and Libraries") (для совместимости в архиве также находится MRGSAuthentication.framework - fat framework старого вида)

  • В настройках проекта установите флаг -ObjC в поле "Other linker Flags".

  • Импортируйте модуль в коде: @import MRGSAuthentication; или #import <MRGSAuthentication/MRGSAuthentication.h>
  • Также, вы можете добавить из архива файлы MRGServiceKit.h и module.modulemap в свой проект, либо в настройках проекта укажите путь до них в разделе Build Settings -> Header search paths. Теперь вместо импорта каждого из наших фреймворков по отдельности, вы можете импортировать только один заголовочный файл: @import MRGServiceKit;

Android:

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

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

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

    implementation "games.my.mrgs:authentication:$mrgsVersion"
}

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

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

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

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

Далее нужно передать в MRGS все полученные значения, то есть ClientID. Для этого, при старте SDK MRGS необходимо добавить соответствующую настройку в параметрах внешних SDK:

using MRGS;

public class MasterController : MonoBehaviour
{
    void Awake()
    {
        // Configuring MRGS Parameters
        // ...

        var modulesParams = new List<MRGSExternalSDKSettings>
        modulesParams.Add(new MRGSMyGamesParams("<MYGAMES_CLIENT_ID>")

        // Configuring External SDKs and initializing MRGS
        // ...

        MRGService.Instance.Initialize(serviceParams, sdkParams)
    }
}
@import MRGService;

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //Настройка параметров MRGS
    // ...
    //Настройка Внешних SDK

    MRGSMyGamesParams* mygamesLoginParams = [[MRGSMyGamesParams alloc] initWithClientId:@"CLIENT_ID"];

    NSArray *externalParams = @[ ..., mygamesLoginParams];
    [MRGService startWithServiceParams:<params> externalSDKParams:externalParams delegate:nil];
}
import java.util.ArrayList;
import java.util.List;

import games.my.mrgs.MRGSModuleParams;
import games.my.mrgs.MRGService;
import games.my.mrgs.authentication.MRGSMyGamesAuthParams;

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

        // Setting MRGService
        final MRGServiceParams serviceParams = ...;
        // Setting External SDKs
        final List<MRGSModuleParams> moduleParams = new ArrayList<>();
        moduleParams.add(MRGSMyGamesAuthParams.init("<CLIENT_ID>"));

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

Авторизация через VKPlay🔗

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

var myGamesParams = new MRGSMyGamesParams("<CLIENT_ID>")
{
    CustomHost = "vkplay.ru",
};
MRGSMyGamesParams* mygamesLoginParams = [[MRGSMyGamesParams alloc] initWithClientId:@"CLIENT_ID"];
mygamesLoginParams.customHost = @"vkplay.ru";
import games.my.mrgs.authentication.MRGSMyGamesAuthParams;

final MRGSMyGamesAuthParams myGamesAuthParams = MRGSMyGamesAuthParams.init("<CLIENT_ID>");
myGamesAuthParams.setHost("vkplay.ru");

DEV окружение🔗

Для включения/выключения DEV окружения (использовать url адреса которые ведут на сервера с тестовой средой), достаточно передать в конфиг следующий параметр:

var myGamesParams = new MRGSMyGamesParams("<CLIENT_ID>")
{
    UseDevEnvironment = true
};
MRGSMyGamesParams* mygamesLoginParams = [[MRGSMyGamesParams alloc] initWithClientId:@"CLIENT_ID"];
mygamesParams.useDevEnvironment = YES;
import games.my.mrgs.authentication.MRGSMyGamesAuthParams;

final MRGSMyGamesAuthParams myGamesAuthParams = MRGSMyGamesAuthParams.init("<CLIENT_ID>");
myGamesAuthParams.setDevEnvironment(true);

Тестовая среда доступна только из под корпоративного VPN

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

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

Делегат🔗

Перед началом работы с API, необходимо установить и реализовать делегат, принимающий обратные вызовы:

// Setting
// 'this' conforms to 'IMRGSAuthenticationDelegate' protocol
MRGSAuthenticationMyGames.Instance.Delegate = this;

// Implementation
// The method that is called when the user has logged out of the social network remotely, or his session has ended.
public void OnAuthenticationProviderDidLogoutUser(MRGSAuthentication provider, MRGSAuthenticationUser user){
    Debug.Log("MRGSAuthentication<Unity> - OnAuthenticationProviderDidLogoutUser: " + user + "\nNetwork: " + provider.SocialId().ToString());
}
// Установка
[MRGSAuthenticationMyGames sharedInstance].delegate = self;

//Реализация
// Метод, который вызывается, когда пользователь удаленно вышел из социальной сети, или его сессия закончилась.
- (void)authenticationProvider:(id<MRGSAuthentication>)provider didLogoutUser:(MRGSAuthenticationUser *)user{
    NSLog(@"User did logout: \n%@", user);
}

// Метод, который вызывается в случае необходимости отображения контроллера для авторизации пользователя.
- (void)shouldPresentAuthorizationController:(UIViewController *)viewController {
    UIViewController *rootVC = [UIApplication sharedApplication].keyWindow.rootViewController;
    [rootVC presentViewController:viewController animated:YES completion:nil];
}
import androidx.annotation.NonNull;

import games.my.mrgs.authentication.MRGSAuthentication.OnExternalLogoutListener;
import games.my.mrgs.authentication.mygames.MRGSMyGames;

// Set a listener
MRGSMyGames.getInstance().setOnExternalLogoutListener(new OnExternalLogoutListener() {
    @Override
    public void onUserLogout(@NonNull String socialId) {
        // Handel result.
    }
});

Статус🔗

Затем, необходимо проверить статус авторизации (залогинен ли пользователь):

bool isLoggedIn = MRGSAuthenticationMyGames.Instance.IsLoggedIn();
BOOL isLoggedIn = [[MRGSAuthenticationMyGames sharedInstance] isLoggedIn];
import games.my.mrgs.authentication.mygames.MRGSMyGames;

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

Вход🔗

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

// If error occured, error object will be non-null
MRGSAuthenticationMyGames.Instance.Login((MRGSError error) => {
    if (error == null) {
        // Auth success
    } 
});

// The response will include an object describing the user and the token, and an error object, if any.
MRGSAuthenticationMyGames.Instance.Login((MRGSAuthenticationCredential credentials, MRGSError error) => {
    Debug.Log("MRGSAuthenticationMyGames:\nCredentials: " + credentials + "\nError:\n" + error);
    if (error == null) {
        // Auth success
    }
});
// В ответе придет только объект ошибки, если она случилась
[[MRGSAuthenticationMyGames sharedInstance] login:^(NSError *error) {
    if (!error) {
        // Auth success
    }
}];

// В ответе придет объект, описывающий пользователя и токен, и объект ошибки, если она случилась
[[MRGSAuthenticationMyGames sharedInstance] loginWithCompletionHandler:^(MRGSAuthenticationCredential *credentials, NSError *error) {
    NSLog(@"Result - %@. Error - %@", credentials, error);
    if (!error) {
        // Auth success
    }
}];
import android.app.Activity;

import androidx.annotation.NonNull;

import games.my.mrgs.MRGSError;
import games.my.mrgs.authentication.MRGSCredentials;
import games.my.mrgs.authentication.MRGSLoginCallback;
import games.my.mrgs.authentication.mygames.MRGSMyGames;

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

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

Для MyGames дополнительные разрешения недоступны, поэтому данный метод будет работать так же, как метод выше.

var scopes = new List<string>();

MRGSAuthenticationMyGames.Instance.Login(scopes, (MRGSAuthenticationCredential credentials, MRGSError error) => {
    Debug.Log("MRGSAuthenticationMyGames:\nCredentials: " + credentials + "\nError:\n" + error);
    if (error == null) {
        // Auth success
    }
});
[[MRGSAuthenticationMyGames sharedInstance] loginWithScopes:@[] completionHandler:^(MRGSAuthenticationCredential *credentials, NSError *error) {
    NSLog(@"Result - %@. Error - %@", credentials, error);
}];
import android.app.Activity;

import androidx.annotation.NonNull;

import java.util.Arrays;

import games.my.mrgs.MRGSError;
import games.my.mrgs.authentication.MRGSCredentials;
import games.my.mrgs.authentication.MRGSLoginCallback;
import games.my.mrgs.authentication.mygames.MRGSMyGames;

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

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

Повторный вызов Login

При повторном вызове метода авторизации, браузер подтянет данные из cookie и пользователь увидит свою текущую сессию и кнопку continue. Начиная с версии MRGS 6.3.0, можно принудительно игнорировать текущую сессию, чтобы пользователь проделал весь путь авторизации с нуля.

MRGSAuthenticationMyGames.Instance.IgnoreCachedSession = true;
// Then call the login method. 
[MRGSAuthenticationMyGames sharedInstance].ignoreCachedSession = YES;
// Then call the login method. 
import games.my.mrgs.authentication.mygames.MRGSMyGames;

MRGSMyGames.getInstance().setIgnoreCachedSession(true);
// Then call the login method. 

Статус авторизации🔗

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

// The information about the user, identifier, name, email, etc.
MRGSAuthenticationMyGames.Instance.GetCurrentUser((MRGSAuthenticationUser user, MRGSError error) => {
    Debug.Log("MRGSAuthenticationMyGames:\User: " + user + "\nError:\n" + error);
    if (error == null) {
        // Work with user data
    }
});

// Information about the token, lifetime, etc.
MRGSAuthenticationMyGames.Instance.GetAccessToken((MRGSAuthenticationAccessToken token, MRGSError error) => {
    Debug.Log("MRGSAuthenticationMyGames:\Token: " + token + "\nError:\n" + error);
    if (error == null) {
        // Work with token info
    }
    else if (error.Code == (int)MRGSAuthenticationErrorCode.ConnectionFailed)
    {
        // No network, try later     
    }
    else
    {
        // Logout user from app (MRGS will logout automatically in SDK)
    }
});
// Возвращается объект, объединяющий в себе информацию о пользователе(идентификатор, имя, email, и др) и о токене.
[[MRGSAuthenticationMyGames sharedInstance] getCredentials:^(MRGSAuthenticationCredential *credentials, NSError *error) {
    NSLog(@"Result - %@. Error - %@", credentials, error);
    if(!error){
        // Credentials data work
    }
}];

// Возвращается отдельно информация о пользователе, идентификатор, имя, email, и др.
[[MRGSAuthenticationMyGames sharedInstance] getCurrentUser:^(MRGSAuthenticationUser *user, NSError *error) {
    NSLog(@"User - %@. Error - %@", user, error);
    if(!error){
        // User data work
    }
}];

// Возвращается отдельно информация о токене, времени жизни и др.
[[MRGSAuthenticationMyGames sharedInstance] getAccessToken:^(MRGSAuthenticationAccessToken *token, NSError *error) {
    if (!error) {
        NSLog(@"getAccessToken result - %@", token);
    } else {
        NSLog(@"getAccessToken error - %@", error);
    }
}];
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.mygames.MRGSMyGames;
import games.my.mrgs.utils.optional.BiConsumer;

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

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

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

Выход🔗

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

MRGSAuthenticationMyGames.Instance.Logout();
[[MRGSAuthenticationMyGames sharedInstance] logout];
import games.my.mrgs.authentication.mygames.MRGSMyGames;

MRGSMyGames.getInstance().logout();

Сокрытие упоминания бренда MY.GAMES🔗

На самом деле, это только убирает все визуальные упоминания бренда MY.GAMES, все сетевые запросы будут совершать на тот же адрес. Визуальное сокрытие достигается путем: отключения возможности запустить авторизацию в браузере (теперь она будет проходить только через WebView) и сокрытие всех кнопок для авторизации через другие социальные сети. Для того чтобы включить данный режим, достаточно вызвать функцию перед тем как запустить авторизацию:

MRGSAuthenticationMyGames.Instance.ShouldHideBrandOccurrences = true;
[MRGSAuthenticationMyGames sharedInstance].shouldHideBrandOccurrences = YES;
import games.my.mrgs.authentication.mygames.MRGSMyGames;

MRGSMyGames.getInstance().setHideBrandOccurrences(true);

MyGames Desktop🔗

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

Перед началом работы, убедитесь, что приложение корректно настроено на сайте MRGS, а именно добавили идентификатор MyGames AppID (GMRID) или SteamID. Подробнее про настройку можно почитать в разделе Unity Desktop. При корректной настройке MRGS автоматически получит необходимые ключи валидации для авторизации MyGames. Дополнительных настроек ни на сервере, ни на клиенте не требуется.

Особенности работы MyGames авторизации на десктопе🔗

При запуске игры из ИЦ MY.GAMES, пользователь уже залогинен в ИЦ, поэтому как таковой авторизации нет, мы лишь получаем специальный токен и валидируем его на сервере MY.GAMES, проверяя, что пользователь настоящий и ничего не подделывал. Затем мы получаем данные пользователя. Поэтому на старте приложения автоматически делаем проверку данных и получаем информацию о пользователе.

Все стандартные методы API авторизации, описанные выше, работают как обычно. С помощью них можно проверить, залогинен ли пользователь, получить необходимую информацию о нем, и другое.

MY.GAMES ИЦ рекомендует не давать пользователю играть, если его сессия не подтверждена сервером. Таким образом, на каждом старте можно вызывать метод логина (дополнительного запроса не будет, мы уведомим вас как только будет закончена операция подтверждения, начатая раньше) и получить информацию о результате в callback. Второй вариант - можно на старте проверить, залогинен ли пользователь, с помощью стандартных методов API авторизации. В случае, если пользователь не залогинен (например, мы не успели получить ответ от сервера), вы можете вызвать метод логина и дождаться результата. Но в случае, если пользователь залогинен (IsLoggedIn() == true), нужно следить за делегатом, который уведомит в случае, если пользователь будет разлогинен (то есть не получится провалидировать информацию о нем).


Последнее обновление: 2025-01-21
Дата создания: 2020-05-28