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

Инструкция по миграции🔗

Данный документ содержит инструкцию по обновлению MRGS SDK, в случае, когда в код или настройки проекта нужно внести какие-либо изменения.

5.x.x → 6.0.0🔗

Версия 6.0.0 содержатся обратно несовместимые изменения из-за частично переработано API: удалили @Deprecated функционал, поменяли имена функций, исправили опечатки, у публичного API изменился package, а приватное API переехало в internal.

Java packages🔗

Все классы в MRGS SDK поменяли названия package с ru.mail.mrgservice на games.my.mrgs.

MRGSMyTracker🔗

MRGSMyTracker был перенесет в свой собственный модуль и больше не поставляется с MRGService. Новый способ подключения:

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

dependencies {
    def mrgsVersion = "6.0.0"

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

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

dependencies {
    //...
    implementation(name: 'MRGSMyTracker', ext:'aar')
    implementation "com.my.tracker:mytracker-sdk:3.x.x"
}

Обновите код🔗

Основные изменения:

  • Класс MRGSMyTracker перемещен из ru.mail.mrgservice в games.my.mrgs.my.tracker.
  • Класс MRGSExternalSDKParams.MyTrackerParams переименован и перемещен в games.my.mrgs.my.tracker.MRGSMyTrackerParams.

В следующем примере показано, как может выглядеть ваше приложение до и после внесения этих изменений:

До

import ru.mail.mrgservice.MRGSExternalSDKParams;
import ru.mail.mrgservice.MRGSExternalSDKParams.MyTrackerParams;
import ru.mail.mrgservice.MRGSPlatform;
import ru.mail.mrgservice.MRGService;
import ru.mail.mrgservice.MRGServiceParams;

final MRGServiceParams serviceParams
        = MRGServiceParams.init(<MRGS_APP_ID>, <CLIENT_SECRET>, MRGSPlatform.ANDROID);
serviceParams.setDebuggable(false);


// Setting External SDKS
final MRGSExternalSDKParams externalSDKParams = MRGSExternalSDKParams.newInstance();

// Setting MyTracker
final MyTrackerParams myTrackerParams = MyTrackerParams.init("MY_TRACKER_SDK_KEY");
myTrackerParams.setDebuggable(false);
externalSDKParams.myTrackerParams = myTrackerParams;

MRGService.service(context, serviceParams, externalSDKParams);

После

import java.util.ArrayList;
import java.util.List;

import games.my.mrgs.MRGSModuleParams;
import games.my.mrgs.MRGSPlatform;
import games.my.mrgs.MRGService;
import games.my.mrgs.MRGServiceParams;
import games.my.mrgs.my.tracker.MRGSMyTrackerParams;

final MRGServiceParams serviceParams
        = MRGServiceParams.init(<MRGS_APP_ID>, <CLIENT_SECRET>, MRGSPlatform.ANDROID);
serviceParams.setDebuggable(false);


// Settings for MRGSModules
final List<MRGSModuleParams> moduleParams = new ArrayList<>();

// Setting MyTracker
final MRGSMyTrackerParams myTrackerParams = MRGSMyTrackerParams.init("MY_TRACKER_SDK_KEY");
myTrackerParams.setDebuggable(false);
moduleParams.add(myTrackerParams);

MRGService.service(context, serviceParams, moduleParams);

MRGService🔗

Обновите SDK🔗

dependencies {
-   def mrgsVersion = "5.x.x"
+   def mrgsVersion = "6.0.0"

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

Обновите код🔗

Основные изменения:

  • Класс ru.mail.mrgservice.MRGSExternalSDKParams удален.
  • Класс ru.mail.mrgservice.MRGSExternalSDKParams.AmazonAuthParams переименован и перемещен в модуль MRGSAuthentication games.my.mrgs.authentication.MRGSAmazonAuthParams.
  • Класс ru.mail.mrgservice.MRGSExternalSDKParams.AppsFlyerParams переименован и перемещен в модуль MRGSAnalytics games.my.mrgs.analytics.MRGSAppsFlyerParams.
  • Класс ru.mail.mrgservice.MRGSExternalSDKParams.FacebookParams переименован и перемещен в модуль MRGSAuthentication games.my.mrgs.authentication.MRGSFacebookParams.
  • Класс ru.mail.mrgservice.MRGSExternalSDKParams.GooglePlayGamesParams переименован и перемещен в модуль MRGSAuthenticationGoogleSignIn games.my.mrgs.authentication.google.signin.MRGSGooglePlayGamesParams.
  • Класс ru.mail.mrgservice.authentication.googlegames.MRGSGoogleGames удален авторизация Google перемещена в отдельные модули MRGSAuthenticationGoogleSignIn и MRGSAuthenticationGoogleSignIn
  • Класс ru.mail.mrgservice.MRGSExternalSDKParams.GameCenterParams переименован и перемещен в модуль MRGSAuthentication games.my.mrgs.authentication.MRGSGameCenterParams.
  • Класс ru.mail.mrgservice.MRGSExternalSDKParams.MyGamesAuthParams переименован и перемещен в модуль MRGSAuthentication games.my.mrgs.authentication.MRGSMyGamesAuthParams.
  • Класс ru.mail.mrgservice.MRGSExternalSDKParams.MyTrackerParams переименован и перемещен в модуль MRGSMyTracker games.my.mrgs.my.tracker.MRGSMyTrackerParams.
  • Класс ru.mail.mrgservice.MRGSExternalSDKParams.SamsungBillingParams переименован и перемещен в модуль MRGSBilling games.my.mrgs.billing.MRGSSamsungBillingParams.
  • Класс ru.mail.mrgservice.MRGSExternalSDKParams.VKontakteParams переименован и перемещен в модуль MRGSAuthenticationVK games.my.mrgs.authentication.vk.MRGSVKontakteParams.

  • enum ru.mail.mrgservice.MRGServiceParams.BillingSubstitution удален. Используйте MRGSMyGamesBilling#useAsMainBilling() и MRGSVKPay#useAsMainBilling().

  • Метод MRGService#service(Context, MRGSServerDataDelegate, String, String) удален. Используйте MRGService#service(Context, String, String, MRGSServerDataDelegate).

  • Метод MRGService#service(Context, MRGSServerDataDelegate, String, String, Bundle) удален. Используйте MRGService#service(Context, MRGServiceParams, List<MRGSModuleParams>, MRGSServerDataDelegate loadDelegate).
  • Метод MRGService#service(Context, MRGSServerDataDelegate, String, String, Bundle, Bundle) удален. Используйте MRGService#service(Context, MRGServiceParams, List<MRGSModuleParams>, MRGSServerDataDelegate loadDelegate).
  • Метод MRGService#service(Context, MRGServiceParams, MRGSExternalSDKParams) удален. Используйте MRGService#service(Context, MRGServiceParams, List<MRGSModuleParams>).
  • Метод MRGService#service(Context, MRGServiceParams, MRGSExternalSDKParams, MRGSServerDataDelegate loadDelegate) удален. Используйте MRGService#service(Context, MRGServiceParams, List<MRGSModuleParams>, MRGSServerDataDelegate loadDelegate).

  • Метод ru.mail.mrgservice.MRGServiceParams#shouldUseMyGamesBillingOnly() удален.

  • Метод ru.mail.mrgservice.MRGServiceParams#setUseMyGamesBillingOnly(boolean) удален. Используйте MRGSMyGamesBilling#useAsMainBilling() и MRGSVKPay#useAsMainBilling().

  • Поле MRGService#BILLING_GOOGLE удалено.

  • Поле MRGService#BILLING_SAMSUNG удалено.
  • Поле MRGService#BILLING_AMAZON удалено.
  • Поле MRGService#BILLING_HUAWEI удалено.
  • Поле MRGService#BILLING_FACEBOOK_CLOUD удалено.
  • Поле MRGService#BILLING_MY_GAMES удалено.

  • Поле ru.mail.mrgservice.MRGSSocial#ODNOKLASSNIKI удалено.

  • Поле ru.mail.mrgservice.MRGSSocial#MAILRU удалено.
  • Поле ru.mail.mrgservice.MRGSSocial#VKONTAKTE удалено.
  • Поле ru.mail.mrgservice.MRGSSocial#VKID удалено.

В следующем примере показано, как может выглядеть ваше приложение до и после внесения этих изменений:

До

import ru.mail.mrgservice.MRGSExternalSDKParams;
import ru.mail.mrgservice.MRGSExternalSDKParams.AppsFlyerParams;
import ru.mail.mrgservice.MRGSExternalSDKParams.MyTrackerParams;
import ru.mail.mrgservice.MRGSExternalSDKParams.FacebookParams;
import ru.mail.mrgservice.MRGSExternalSDKParams.GooglePlayGamesParams;
import ru.mail.mrgservice.MRGSPlatform;
import ru.mail.mrgservice.MRGService;
import ru.mail.mrgservice.MRGServiceParams;

// Setting MRGService
// Available MRGSPlatform: AMAZON, ANDROID, HUAWEI, SAMSUNG and FACEBOOK_CLOUD
final MRGServiceParams serviceParams
        = MRGServiceParams.init(<MRGS_APP_ID>, <CLIENT_SECRET>, MRGSPlatform.ANDROID);
serviceParams.setDebuggable(false);


// Setting External SDKS
final MRGSExternalSDKParams externalSDKParams = MRGSExternalSDKParams.newInstance();

// Setting MyTracker
final MyTrackerParams myTrackerParams = MyTrackerParams.init("MY_TRACKER_SDK_KEY");
myTrackerParams.setDebuggable(false);
externalSDKParams.myTrackerParams = myTrackerParams;

// Setting AppsFlyer
final AppsFlyerParams appsFlyerParams = AppsFlyerParams.init("DEV_KEY");
appsFlyerParams.setDebuggable(false);
appsFlyerParams.setForwardMetricsEnabled(true);
externalSDKParams.appsFlyerParams = appsFlyerParams;

// Setting other external SDKS
externalSDKParams.facebookParams = FacebookParams.init("FACEBOOK_APP_ID");
externalSDKParams.googlePlayGamesParams = GooglePlayGamesParams.init("GOOGLE_CLIENT_ID");

MRGService.service(context, serviceParams, externalSDKParams);

После

import java.util.ArrayList;
import java.util.List;

import games.my.mrgs.MRGSModuleParams;
import games.my.mrgs.MRGSPlatform;
import games.my.mrgs.MRGService;
import games.my.mrgs.MRGServiceParams;
import games.my.mrgs.analytics.MRGSAppsFlyerParams;
import games.my.mrgs.authentication.MRGSFacebookParams;
import games.my.mrgs.authentication.MRGSGooglePlayGamesParams;
import games.my.mrgs.my.tracker.MRGSMyTrackerParams;

// Setting MRGService
// Available MRGSPlatform: AMAZON, ANDROID, HUAWEI, SAMSUNG and FACEBOOK_CLOUD
final MRGServiceParams serviceParams
        = MRGServiceParams.init(<MRGS_APP_ID>, <CLIENT_SECRET>, MRGSPlatform.ANDROID);
serviceParams.setDebuggable(false);

// Settings for MRGS modules
final List<MRGSModuleParams> moduleParams = new ArrayList<>();

// Setting MyTracker
final MRGSMyTrackerParams myTrackerParams = MRGSMyTrackerParams.init("MY_TRACKER_SDK_KEY");
myTrackerParams.setDebuggable(false);
moduleParams.add(myTrackerParams);

// Setting AppsFlyer
final MRGSAppsFlyerParams appsFlyerParams = MRGSAppsFlyerParams.init("DEV_KEY");
appsFlyerParams.setDebuggable(false);
appsFlyerParams.setForwardMetricsEnabled(true);
moduleParams.add(appsFlyerParams);

// Setting other external SDKS
final MRGSFacebookParams facebookParams = MRGSFacebookParams.init("FACEBOOK_APP_ID");
moduleParams.add(facebookParams);

final MRGSGoogleSignInParams googleSignInParams = MRGSGoogleSignInParams.init("GOOGLE_CLIENT_ID");
moduleParams.add(googleSignInParams);

MRGService.service(context, serviceParams, moduleParams);

MRGSAdvertising🔗

Обновите SDK🔗

dependencies {
-   def mrgsVersion = "5.x.x"
+   def mrgsVersion = "6.0.0"

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

Обновите код🔗

Основные изменения:

  • Класс MRGSAdvert перемещен из ru.mail.mrgservice.advertising в games.my.mrgs.advertising.
  • Класс MRGSAdvertisingFactory перемещен из ru.mail.mrgservice.advertising в games.my.mrgs.advertising.

  • Метод MRGSAdvert#showContent(int, String) удален. Используйте MRGSAdvert#showContent(String).

  • Поле MRGSAdvert.SHOW_FULLSCREEN удалено.

В следующем примере показано, как может выглядеть ваше приложение до и после внесения этих изменений:

До

import ru.mail.mrgservice.advertising.MRGSAdvert;
import ru.mail.mrgservice.advertising.MRGSAdvertisingFactory;

final MRGSAdvert videoAdvert = MRGSAdvertisingFactory.createMRGSAdvertising(true);
videoAdvert.showContent();

После

import games.my.mrgs.advertising.MRGSAdvert;
import games.my.mrgs.advertising.MRGSAdvertisingFactory;

final MRGSAdvert videoAdvert = MRGSAdvertisingFactory.createMRGSAdvertising(true);
videoAdvert.showContent();

MRGSAnalytics🔗

Обновите SDK🔗

dependencies {
-   def mrgsVersion = "5.0.0"
+   def mrgsVersion = "6.0.0"

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

Обновите код🔗

Основные изменения:

  • Класс AppsFlyerParams переименован в MRGSAppsFlyerParams и перемещен в модуль MRGSAnalytics.

  • Класс MRGSAnalytics перемещен из ru.mail.mrgservice.analytics в games.my.mrgs.analytics.

  • Класс MRGSAppsFlyer перемещен из ru.mail.mrgservice.analytics в games.my.mrgs.analytics.
  • Класс MRGSAppsFlyerLinkGenerator перемещен из ru.mail.mrgservice.analytics в games.my.mrgs.analytics.

В следующем примере показано, как может выглядеть ваше приложение до и после внесения этих изменений:

До

import ru.mail.mrgservice.analytics.MRGSAnalytics;
import ru.mail.mrgservice.analytics.MRGSAppsFlyer;

final MRGSAnalytics analytics = MRGSAnalytics.getInstance();
analytics.sendEvent("<Event>", null);

MRGSAppsFlyer.forceCustomerUserId("custom_user_id");
final MRGSAppsFlyer appsFlyer = analytics.getAppsFlyer();
appsFlyer.sendEvent("<Event>", "<Value>");

После

import games.my.mrgs.analytics.MRGSAnalytics;
import games.my.mrgs.analytics.MRGSAppsFlyer;

final MRGSAnalytics analytics = MRGSAnalytics.getInstance();
analytics.sendEvent("<Event>", null);

MRGSAppsFlyer.forceCustomerUserId("custom_user_id");
final MRGSAppsFlyer appsFlyer = analytics.getAppsFlyer();
appsFlyer.sendEvent("<Event>", "<Value>");

MRGSAuthentications🔗

MRGSVK был перенесет в свой собственный модуль и больше не поставляется с MRGSAuthentication. Новый способ подключения:

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

dependencies {
    def mrgsVersion = "6.0.0"

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

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

dependencies {
    //...
    implementation(name: 'MRGSAuthenticationVK', ext:'aar')
    implementation "com.vk:android-sdk-core:3.x.x"
}

MRGSGoogleGames был переименован и перенесет в свой собственный модуль и больше не поставляется с MRGSAuthentication. Новый способ подключения:

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

dependencies {
    def mrgsVersion = "6.0.0"

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

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

dependencies {
    //...
    implementation(name: 'MRGSAuthenticationGoogleSignIn', ext:'aar')
    implementation "com.google.android.gms:play-services-auth:20.x.x"
    implementation "com.google.android.gms:play-services-games:22.x.x"
}

Обновите SDK🔗

dependencies {
-   def mrgsVersion = "5.0.0"
+   def mrgsVersion = "6.0.0"

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

Обновите код🔗

Основные изменения:

  • Класс MRGSVK перемещен в свой собственный модуль MRGSAuthenticationVK.
  • Класс VKontakteParams переименован в MRGSVKontakteParams и перемещен в модуль MRGSAuthenticationVK.

  • Класс MRGSAmazon перемещен из ru.mail.mrgservice.authentication.amazon в games.my.mrgs.authentication.amazon.

  • Класс MRGSFacebook перемещен из ru.mail.mrgservice.authentication.facebook в games.my.mrgs.authentication.facebook.
  • Класс MRGSGoogleGames перемещен из ru.mail.mrgservice.authentication.googlegames в games.my.mrgs.authentication.googlegames.
  • Класс MRGSMyGames перемещен из ru.mail.mrgservice.authentication.mygames в games.my.mrgs.authentication.mygames.

  • Класс MRGSUser перемещен из ru.mail.mrgservice.authentication в games.my.mrgs.authentication.

  • Класс MRGSAuthInfo удален. Используйте MRGSAccessToken.

  • Интерфейс MRGSAuthentication.ExternalLogoutCallback удален. Используйте MRGSAuthentication.OnExternalLogoutListener.

  • Интерфейс MRGSSocial перемещен из ru.mail.mrgservice.authentication в games.my.mrgs.authentication.
  • Интерфейс MRGSScore перемещен из ru.mail.mrgservice.authentication в games.my.mrgs.authentication.
  • Интерфейс MRGSLeaderBoards перемещен из ru.mail.mrgservice.authentication в games.my.mrgs.authentication.
  • Интерфейс MRGSAchievements перемещен из ru.mail.mrgservice.authentication в games.my.mrgs.authentication.

  • Enum MRGSAuthenticationNetwork удален.

  • Enum MRGSAuthenticationNetwork.UNKNOWN удален.
  • Enum MRGSAuthenticationNetwork.AMAZON удален. Используйте MRGSAmazon.SOCIAL_ID.
  • Enum MRGSAuthenticationNetwork.FACEBOOK удален. Используйте MRGSFacebook.SOCIAL_ID.
  • Enum MRGSAuthenticationNetwork.GOOGLE_GAMES удален. Используйте MRGSGoogleGamesMRGSGoogleSignIn.SOCIAL_ID.
  • Enum MRGSAuthenticationNetwork.MY_GAMES удален. Используйте MRGSMyGames.SOCIAL_ID.
  • Enum MRGSAuthenticationNetwork.VKONTAKTE удален. Используйте MRGSVK.SOCIAL_ID.

  • Метод MRGSAccessToken#getSocialId() теперь возвращает String вместо MRGSAuthenticationNetwork.

  • Метод MRGSAuthentication#getSocialId() теперь возвращает String вместо MRGSAuthenticationNetwork.
  • Метод MRGSAuthentication#loginWithScopes(List<String>, MRGSLoginCallback) удален. Используйте MRGSAuthentication#login(List<String>, MRGSLoginCallback).
  • Метод MRGSAuthentication#getAuthInfo() удален. Используйте MRGSAuthentication#getAccessToken(BiConsumer<MRGSAccessToken, MRGSError>).
  • Метод MRGSAuthentication#getAuthInfo(BiConsumer<MRGSAuthInfo, MRGSError>) удален. Используйте MRGSAuthentication#getAccessToken(BiConsumer<MRGSAccessToken, MRGSError>).
  • Метод MRGSAuthentication#getUserAvatar(MRGSUser, MRGSAvatarCallback, int, int) удален. Используйте MRGSAuthentication#getUserAvatar(MRGSUser, int, int, MRGSAvatarCallback).
  • Метод MRGSAuthentication#setOnExternalLogoutCallback(ExternalLogoutCallback) удален. Используйте MRGSAuthentication#setOnExternalLogoutListener(OnExternalLogoutListener).
  • Метод MRGSAuthentication.OnExternalLogoutListener#onUserLogout теперь принимает String вместо MRGSAuthenticationNetwork.

  • Метод MRGSAmazon#tryUpdateToken() удален. Используйте MRGSAmazon#getAccessToken(BiConsumer<MRGSAccessToken, MRGSError>).

  • Метод MRGSAchievement#achievementId() удален. Используйте MRGSAchievement#getAchievementId().

  • Метод MRGSAchievement#name() удален. Используйте MRGSAchievement#getName().
  • Метод MRGSAchievement#description() удален. Используйте MRGSAchievement#getDescription().
  • Метод MRGSAchievement#state() удален. Используйте MRGSAchievement#getState().
  • Метод MRGSAchievement#currentSteps() удален. Используйте MRGSAchievement#getCurrentSteps().
  • Метод MRGSAchievement#totalSteps() удален. Используйте MRGSAchievement#getTotalSteps().
  • Метод MRGSAchievement#completionPercent() удален. Используйте MRGSAchievement#getCompletionPercent().

  • Метод MRGSCredentials#setUserId(String) удален.

  • Метод MRGSCredentials#setUser(MRGSUser) удален.
  • Метод MRGSCredentials#setAuthInfo(MRGSAuthInfo) удален.
  • Метод MRGSCredentials#getAuthInfo() удален. Используйте MRGSCredentials#getAccessToken().
  • Метод MRGSCredentials#getSocialId() теперь возвращает String вместо MRGSAuthenticationNetwork.

  • Метод MRGSLeaderboard#leaderboardId() удален. Используйте MRGSLeaderboard#getLeaderboardId().

  • Метод MRGSLeaderboard#name() удален. Используйте MRGSLeaderboard#getName().

  • Метод MRGSScore#leaderboardId() удален. Используйте MRGSScore#getLeaderboardId().

  • Метод MRGSScore#rank() удален. Используйте MRGSScore#getRank().
  • Метод MRGSScore#displayRank() удален. Используйте MRGSScore#getDisplayRank().
  • Метод MRGSScore#rawScore() удален. Используйте MRGSScore#getRawScore().
  • Метод MRGSScore#displayScore() удален. Используйте MRGSScore#getDisplayScore().
  • Метод MRGSScore#player() удален. Используйте MRGSScore#getPlayer().

  • Метод MRGSUser#userId() удален. Используйте MRGSUser#getUserId().

  • Метод MRGSUser#nick() удален. Используйте MRGSUser#getNickName().
  • Метод MRGSUser#firstName() удален. Используйте MRGSUser#getFirstName().
  • Метод MRGSUser#lastName() удален. Используйте MRGSUser#getLastName().
  • Метод MRGSUser#middleName() удален. Используйте MRGSUser#getMiddleName().
  • Метод MRGSUser#fullName() удален. Используйте MRGSUser#getFullName().
  • Метод MRGSUser#displayName() удален. Используйте MRGSUser#getDisplayName().
  • Метод MRGSUser#gender() удален. Используйте MRGSUser#getGender().
  • Метод MRGSUser#birthDate() удален. Используйте MRGSUser#getBirthDate().
  • Метод MRGSUser#location() удален. Используйте MRGSUser#getLocation().
  • Метод MRGSUser#socialId() удален. Используйте MRGSUser#getSocialId().
  • Метод MRGSUser#getSocialId() теперь возвращает String вместо MRGSAuthenticationNetwork.

В следующем примере показано, как может выглядеть ваше приложение до и после внесения этих изменений:

До

import java.util.Arrays;

import ru.mail.mrgservice.MRGSError;
import ru.mail.mrgservice.authentication.MRGSAccessToken;
import ru.mail.mrgservice.authentication.MRGSAuthentication;
import ru.mail.mrgservice.authentication.MRGSAuthentication.OnExternalLogoutListener;
import ru.mail.mrgservice.authentication.MRGSAuthenticationNetwork;
import ru.mail.mrgservice.authentication.MRGSCredentials;
import ru.mail.mrgservice.authentication.MRGSLoginCallback;
import ru.mail.mrgservice.authentication.MRGSUser;
import ru.mail.mrgservice.utils.optional.BiConsumer;

final MRGSAuthentication authentication = AuthenticationImpl.getInstance();

// Set logout listener
authentication.setOnExternalLogoutListener(new OnExternalLogoutListener() {
    @Override
    public void onUserLogout(@NonNull MRGSAuthenticationNetwork network) {
        // Handle result
    }
});

// Common login
authentication.login(new MRGSLoginCallback() {
    @Override
    public void onSuccess(@NonNull MRGSCredentials credentials) {
        // Handle result
    }

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

// Login with scopes
authentication.login(Arrays.asList("scope_1", "scope_2"), new MRGSLoginCallback() {
    @Override
    public void onSuccess(@NonNull MRGSCredentials credentials) {
        // Handle result
    }

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

// Get current user's information
authentication.getCurrentUser(new MRGSAuthentication.UserCallback() {
    @Override
    public void onSuccess(@NonNull final MRGSUser user) {
        // Handle result
    }

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

// Get current user's authentication information
authentication.getAccessToken(new BiConsumer<MRGSAccessToken, MRGSError>() {
    @Override
    public void accept(@Nullable MRGSAccessToken accessToken, @Nullable MRGSError error) {
        if (error != null) {
            // Handle error
        } else {
            // Handle result
        }
    }
});

// Call logout
authentication.logout();

После

import java.util.Arrays;

import games.my.mrgs.MRGSError;
import games.my.mrgs.authentication.MRGSAccessToken;
import games.my.mrgs.authentication.MRGSAuthentication;
import games.my.mrgs.authentication.MRGSAuthentication.OnExternalLogoutListener;
import games.my.mrgs.authentication.MRGSAuthenticationNetwork;
import games.my.mrgs.authentication.MRGSCredentials;
import games.my.mrgs.authentication.MRGSLoginCallback;
import games.my.mrgs.authentication.MRGSUser;
import games.my.mrgs.utils.optional.BiConsumer;

final MRGSAuthentication authentication = AuthenticationImpl.getInstance();

// Set logout listener
authentication.setOnExternalLogoutListener(new OnExternalLogoutListener() {
    @Override
    public void onUserLogout(@NonNull MRGSAuthenticationNetwork network) {
        // Handle result
    }
});

// Common login
authentication.login(new MRGSLoginCallback() {
    @Override
    public void onSuccess(@NonNull MRGSCredentials credentials) {
        // Handle result
    }

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

// Login with scopes
authentication.login(Arrays.asList("scope_1", "scope_2"), new MRGSLoginCallback() {
    @Override
    public void onSuccess(@NonNull MRGSCredentials credentials) {
        // Handle result
    }

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

// Get current user's information
authentication.getCurrentUser(new MRGSAuthentication.UserCallback() {
    @Override
    public void onSuccess(@NonNull final MRGSUser user) {
        // Handle result
    }

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

// Get current user's authentication information
authentication.getAccessToken(new BiConsumer<MRGSAccessToken, MRGSError>() {
    @Override
    public void accept(@Nullable MRGSAccessToken accessToken, @Nullable MRGSError error) {
        if (error != null) {
            // Handle error
        } else {
            // Handle result
        }
    }
});

// Call logout
authentication.logout();

MRGSBilling🔗

Обновите SDK🔗

dependencies {
-   def mrgsVersion = "5.0.0"
+   def mrgsVersion = "6.0.0"

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

Обновите код🔗

Основные изменения:

  • Класс MRGSBilling перемещен из ru.mail.mrgservice.billing в games.my.mrgs.billing.
  • Класс MRGSBillingProduct перемещен из ru.mail.mrgservice.billing в games.my.mrgs.billing.
  • Класс MRGSBillingEntities перемещен из ru.mail.mrgservice.billing в games.my.mrgs.billing.
  • Класс MRGSMyGamesBilling перемещен из ru.mail.mrgservice.billing в games.my.mrgs.billing.
  • Класс SamsungBillingParams переименован в MRGSSamsungBillingParams и перемещен в модуль MRGSBilling.

  • Интерфейс MRGSBillingDelegate перемещен из ru.mail.mrgservice.billing в games.my.mrgs.billing.

  • Метод MRGSBilling#isInstantiated() удален. Используйте MRGSBilling##isBillingAvailable(Context) или MRGSBilling##isBillingAvailable(Context, MRGSBillingAvailableCallback).

  • Метод MRGSBillingEntities.MRGSBankPurchaseRequest#getProductIdentifier() удален. Используйте MRGSBillingEntities.MRGSBankPurchaseRequest#getProductId().
  • Метод MRGSBillingEntities.MRGSBankPurchaseRequest#setOldSubscriptionIdentifier(String) удален. Используйте MRGSBillingEntities.MRGSBankPurchaseRequest#setOldSubscriptionId(String).
  • Метод MRGSBillingEntities.MRGSBankPurchaseResult#getProductIdentifier() удален. Используйте MRGSBillingEntities.MRGSBankPurchaseResult#getProductId().
  • Метод MRGSBillingEntities.MRGSBankTransaction#getTransactionIdentifier() удален. Используйте MRGSBillingEntities.MRGSBankTransaction#getTransactionId().

  • Поле MRGSBilling.BILLING_VKPAY удалено. Используйте MRGSVKPay.BILLING_VKPAY.

В следующем примере показано, как может выглядеть ваше приложение до и после внесения этих изменений:

До

import java.util.Arrays;
import java.util.List;

import ru.mail.mrgservice.billing.MRGSBilling;
import ru.mail.mrgservice.billing.MRGSBillingDelegate;
import ru.mail.mrgservice.billing.MRGSBillingEntities.MRGSBankProductsRequest;
import ru.mail.mrgservice.billing.MRGSBillingEntities.MRGSBankPurchaseRequest;
import ru.mail.mrgservice.billing.MRGSBillingProduct;

final MRGSBilling billing = MRGSBilling.getInstance();

final MRGSBillingDelegate listener = new MRGSBillingDelegate() {
    ...
};
billing.setDelegate(listener);

// Request Products
final List<String> consumable = Arrays.asList(
        "games.my.mrgs.purchase1",
        "games.my.mrgs.purchase2",
        "android.test.purchased");
final List<String> nonConsumable = Arrays.asList("games.my.mrgs.mrgservisetest.noncons");
final List<String> subscriptions = Arrays.asList(
        "games.my.mrgs.subs1",
        "games.my.mrgs.subs2",
        "games.my.mrgs.subs3");

final MRGSBankProductsRequest productRequest = new MRGSBankProductsRequest();
productRequest.add(consumable, MRGSBillingProduct.CONS);
productRequest.add(nonConsumable, MRGSBillingProduct.NONCONS);
productRequest.add(subscriptions, MRGSBillingProduct.SUBS);

// The result of request will be sent to one of
// MRGSBillingDelegate#onReceiveProductsResponse(MRGSBankProductsResponse)
// or to MRGSBillingDelegate#onReceiveProductsError(MRGSBankProductsResponse)
billing.requestProductsInfo(productRequest);


// Buy product
// создание специального объекта запроса платежа и добавлением пейлоада
final String sku = "games.my.mrgs.purchase1";
final String devPayload = "{\"item\": 123,\"store\": 456}";
final MRGSBankPurchaseRequest purchaseRequest = new MRGSBankPurchaseRequest(sku, devPayload);

// The result of request will be sent to one of
// MRGSBillingDelegate#onReceiveSuccessfulPurchase(MRGSBankPurchaseResult),
// MRGSBillingDelegate#onReceiveFailedPurchase(MRGSBankPurchaseResult),
// MRGSBillingDelegate#onReceivePendingPurchase(MRGSBankPurchaseResult),
// or MRGSBillingDelegate#onReceiveCancelledPurchase(MRGSBankPurchaseResult).
billing.buyItem(purchaseRequest);

После

import java.util.Arrays;
import java.util.List;

import games.my.mrgs.billing.MRGSBilling;
import games.my.mrgs.billing.MRGSBillingDelegate;
import games.my.mrgs.billing.MRGSBillingEntities.MRGSBankProductsRequest;
import games.my.mrgs.billing.MRGSBillingEntities.MRGSBankPurchaseRequest;
import games.my.mrgs.billing.MRGSBillingProduct;

final MRGSBilling billing = MRGSBilling.getInstance();

final MRGSBillingDelegate listener = new MRGSBillingDelegate() {
    ...
};
billing.setDelegate(listener);

// Request Products
final List<String> consumable = Arrays.asList(
        "games.my.mrgs.purchase1",
        "games.my.mrgs.purchase2",
        "android.test.purchased");
final List<String> nonConsumable = Arrays.asList("games.my.mrgs.mrgservisetest.noncons");
final List<String> subscriptions = Arrays.asList(
        "games.my.mrgs.subs1",
        "games.my.mrgs.subs2",
        "games.my.mrgs.subs3");

final MRGSBankProductsRequest productRequest = new MRGSBankProductsRequest();
productRequest.add(consumable, MRGSBillingProduct.CONS);
productRequest.add(nonConsumable, MRGSBillingProduct.NONCONS);
productRequest.add(subscriptions, MRGSBillingProduct.SUBS);

// The result of request will be sent to one of
// MRGSBillingDelegate#onReceiveProductsResponse(MRGSBankProductsResponse)
// or to MRGSBillingDelegate#onReceiveProductsError(MRGSBankProductsResponse)
billing.requestProductsInfo(productRequest);


// Buy product
// создание специального объекта запроса платежа и добавлением пейлоада
final String sku = "games.my.mrgs.purchase1";
final String devPayload = "{\"item\": 123,\"store\": 456}";
final MRGSBankPurchaseRequest purchaseRequest = new MRGSBankPurchaseRequest(sku, devPayload);

// The result of request will be sent to one of
// MRGSBillingDelegate#onReceiveSuccessfulPurchase(MRGSBankPurchaseResult),
// MRGSBillingDelegate#onReceiveFailedPurchase(MRGSBankPurchaseResult),
// MRGSBillingDelegate#onReceivePendingPurchase(MRGSBankPurchaseResult),
// or MRGSBillingDelegate#onReceiveCancelledPurchase(MRGSBankPurchaseResult).
billing.buyItem(purchaseRequest);

MRGSFirebase🔗

Обновите SDK🔗

dependencies {
-   def mrgsVersion = "5.0.0"
+   def mrgsVersion = "6.0.0"

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

Обновите код🔗

Основные изменения:

  • Класс MRGSFirebaseAnalytics перемещен из ru.mail.mrgservice.firebase в games.my.mrgs.firebase.

В следующем примере показано, как может выглядеть ваше приложение до и после внесения этих изменений:

До

import java.util.Map;
import java.util.TreeMap;

import ru.mail.mrgservice.firebase.MRGSFirebaseAnalytics;

final Map<String, Object> params = new TreeMap<>();
params.put("someInfoKey", "someImportantInfo");
MRGSFirebaseAnalytics.getInstance().sendEvent("event_name", params);

После

import java.util.Map;
import java.util.TreeMap;

import games.my.mrgs.firebase.MRGSFirebaseAnalytics;

final Map<String, Object> params = new TreeMap<>();
params.put("someInfoKey", "someImportantInfo");
MRGSFirebaseAnalytics.getInstance().sendEvent("event_name", params);

MRGSGDPR🔗

Обновите SDK🔗

dependencies {
-   def mrgsVersion = "5.0.0"
+   def mrgsVersion = "6.0.0"

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

Обновите код🔗

Основные изменения:

  • Класс MRGSCCPA перемещен из ru.mail.mrgservice.ccpa в games.my.mrgs.ccpa.
  • Класс MRGSCCPA перемещен из ru.mail.mrgservice.coppa в games.my.mrgs.coppa.
  • Класс MRGSGDPR перемещен из ru.mail.mrgservice.gdpr в games.my.mrgs.gdpr.

  • Интерфейс MRGSCOPPAParameters перемещен из ru.mail.mrgservice.coppa в games.my.mrgs.coppa.

  • Интерфейс MRGSCOPPAShowResult перемещен из ru.mail.mrgservice.coppa в games.my.mrgs.coppa.

В следующем примере показано, как может выглядеть ваше приложение до и после внесения этих изменений:

До

import ru.mail.mrgservice.gdpr.MRGSGDPR;

final MRGSGDPR gdpr = MRGSGDPR.getInstance();
gdpr.setDelegate(this);
gdpr.onlyEU(true);
gdpr.setBackgroundColor(255, 0, 0);
gdpr.withAdvertising(true);
gdpr.setLocalizationLanguage("en");

После

import games.my.mrgs.gdpr.MRGSGDPR;

final MRGSGDPR gdpr = MRGSGDPR.getInstance();
gdpr.setDelegate(this);
gdpr.onlyEU(true);
gdpr.setBackgroundColor(255, 0, 0);
gdpr.withAdvertising(true);
gdpr.setLocalizationLanguage("en");

MRGSNotifications🔗

Обновите SDK🔗

dependencies {
-   def mrgsVersion = "5.0.0"
+   def mrgsVersion = "6.0.0"

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

Обновите код🔗

Основные изменения:

  • Класс MRGSNotificationCenter перемещен из ru.mail.mrgservice в games.my.mrgs.notifications.
  • Класс MRGSNotificationChannel перемещен из ru.mail.mrgservice в games.my.mrgs.notifications.
  • Класс MRGSNotificationChannelGroup перемещен из ru.mail.mrgservice в games.my.mrgs.notifications.
  • Класс MRGSPushNotification перемещен из ru.mail.mrgservice в games.my.mrgs.notifications.
  • Класс MRGSPushNotificationHandler перемещен из ru.mail.mrgservice в games.my.mrgs.notifications.

В следующем примере показано, как может выглядеть ваше приложение до и после внесения этих изменений:

До

import ru.mail.mrgservice.MRGS;
import ru.mail.mrgservice.MRGSMap;
import ru.mail.mrgservice.MRGSNotificationCenter;
import ru.mail.mrgservice.MRGSNotificationChannel;
import ru.mail.mrgservice.MRGSNotificationChannelGroup;
import ru.mail.mrgservice.MRGSPushNotification;
import ru.mail.mrgservice.MRGSPushNotificationHandler.MRGSPushNotificationDelegate;

final MRGSNotificationCenter notificationCenter = MRGSNotificationCenter.getInstance();

// Create a listener for local and remote notification.
// You can create another listener to separate notifications or uses one and separate them
// with boolean isLocal
MRGSPushNotificationDelegate notifyDelegate = new MRGSPushNotificationDelegate() {
    @Override
    public void clickOnNotification(int idNotify, String title, String msg, MRGSMap developerPayload, boolean isLocal) {
        //Handle result.
    }

    @Override
    public void receivedNotification(int idNotify, String title, String msg, MRGSMap developerPayload, boolean isLocal) {
        //Handle result.
    }
};

notificationCenter.setLocalDelegate(notifyDelegate);
notificationCenter.setRemoteDelegate(notifyDelegate);

// Create notification channel group
final MRGSNotificationChannelGroup group = new MRGSNotificationChannelGroup("my_group_id", "My Group");
notificationCenter.createNotificationChannelGroup(context, group);

// Create notification channel
final MRGSNotificationChannel channel = new MRGSNotificationChannel("my_channel_id", "My Channel");
channel.setDescription("Description");
channel.setGroup("my_group_id");
channel.setSound("push_sound");
channel.enableLights(true);

notificationCenter.createNotificationChannel(context, channel);

// Create local push notification
final int time = MRGS.timeUnix() + 10;
MRGSPushNotification notification = MRGSPushNotification.create("Message number 1", 1, time);
notification.setGroupId(222);
notification.setGroupMessage("New resources arrived");
notification.setGroupTitle("Receive your resources");
notificationCenter.addLocalPush(notification);

После

import games.my.mrgs.MRGS;
import games.my.mrgs.MRGSMap;
import games.my.mrgs.notifications.MRGSNotificationCenter;
import games.my.mrgs.notifications.MRGSNotificationChannel;
import games.my.mrgs.notifications.MRGSNotificationChannelGroup;
import games.my.mrgs.notifications.MRGSPushNotification;
import games.my.mrgs.notifications.MRGSPushNotificationHandler.MRGSPushNotificationDelegate;

final MRGSNotificationCenter notificationCenter = MRGSNotificationCenter.getInstance();

// Create a listener for local and remote notification.
// You can create another listener to separate notifications or uses one and separate them
// with boolean isLocal
MRGSPushNotificationDelegate notifyDelegate = new MRGSPushNotificationDelegate() {
    @Override
    public void clickOnNotification(int idNotify, String title, String msg, MRGSMap developerPayload, boolean isLocal) {
        //Handle result.
    }

    @Override
    public void receivedNotification(int idNotify, String title, String msg, MRGSMap developerPayload, boolean isLocal) {
        //Handle result.
    }
};

notificationCenter.setLocalDelegate(notifyDelegate);
notificationCenter.setRemoteDelegate(notifyDelegate);

// Create notification channel group
final MRGSNotificationChannelGroup group = new MRGSNotificationChannelGroup("my_group_id", "My Group");
notificationCenter.createNotificationChannelGroup(context, group);

// Create notification channel
final MRGSNotificationChannel channel = new MRGSNotificationChannel("my_channel_id", "My Channel");
channel.setDescription("Description");
channel.setGroup("my_group_id");
channel.setSound("push_sound");
channel.enableLights(true);

notificationCenter.createNotificationChannel(context, channel);

// Create local push notification
final int time = MRGS.timeUnix() + 10;
MRGSPushNotification notification = MRGSPushNotification.create("Message number 1", 1, time);
notification.setGroupId(222);
notification.setGroupMessage("New resources arrived");
notification.setGroupTitle("Receive your resources");
notificationCenter.addLocalPush(notification);

MRGSRecommendations🔗

Обновите SDK🔗

dependencies {
-   def mrgsVersion = "5.0.0"
+   def mrgsVersion = "6.0.0"

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

Обновите код🔗

Основные изменения:

  • Класс MRGSRecommendations перемещен из ru.mail.mrgservice.recsys в games.my.mrgs.recsys.
  • Класс MRGSRecSysEvent перемещен из ru.mail.mrgservice.recsys в games.my.mrgs.recsys.
  • Класс MRGSRecSysEvents перемещен из ru.mail.mrgservice.recsys в games.my.mrgs.recsys.

В следующем примере показано, как может выглядеть ваше приложение до и после внесения этих изменений:

До

import ru.mail.mrgservice.recsys.MRGSRecSysEvent;
import ru.mail.mrgservice.recsys.MRGSRecSysEvents;
import ru.mail.mrgservice.recsys.MRGSRecommendations;

final MRGSRecommendations recSys = MRGSRecommendations.getInstance();
final MRGSRecSysEvent offerEvent = new MRGSRecSysEvents.OfferActionEvent("testOffer1", MRGSRecSysEvent.ACTION_TYPE_VIEW);
recSys.trackEvent(offerEvent);

final MRGSRecSysEvent offerClick = new MRGSRecSysEvents.OfferActionEvent("testOffer1", MRGSRecSysEvent.ACTION_TYPE_CLICK);
recSys.trackEvent(offerClick);

final MRGSRecSysEvent offerBuy = new MRGSRecSysEvents.OfferActionEvent("testOffer1", MRGSRecSysEvent.ACTION_TYPE_CLICK);
offerBuy.putParam("sku", "ru.mail.mrgstestpurchase");
offerBuy.putParam("gameOfferId", "offer123");
recSys.trackEvent(offerBuy);

После

import games.my.mrgs.recsys.MRGSRecSysEvent;
import games.my.mrgs.recsys.MRGSRecSysEvents;
import games.my.mrgs.recsys.MRGSRecommendations;

final MRGSRecommendations recSys = MRGSRecommendations.getInstance();
final MRGSRecSysEvent offerEvent = new MRGSRecSysEvents.OfferActionEvent("testOffer1", MRGSRecSysEvent.ACTION_TYPE_VIEW);
recSys.trackEvent(offerEvent);

final MRGSRecSysEvent offerClick = new MRGSRecSysEvents.OfferActionEvent("testOffer1", MRGSRecSysEvent.ACTION_TYPE_CLICK);
recSys.trackEvent(offerClick);

final MRGSRecSysEvent offerBuy = new MRGSRecSysEvents.OfferActionEvent("testOffer1", MRGSRecSysEvent.ACTION_TYPE_CLICK);
offerBuy.putParam("sku", "games.my.mrgstestpurchase");
offerBuy.putParam("gameOfferId", "offer123");
recSys.trackEvent(offerBuy);

MRGSShowcase🔗

Обновите SDK🔗

dependencies {
-   def mrgsVersion = "5.0.0"
+   def mrgsVersion = "6.0.0"

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

Обновите код🔗

Основные изменения:

  • Класс MRGSShowcase перемещен из ru.mail.mrgservice.showcase в games.my.mrgs.showcase.

В следующем примере показано, как может выглядеть ваше приложение до и после внесения этих изменений:

До

import ru.mail.mrgservice.showcase.MRGSShowcase;

final MRGSShowcase instance = MRGSShowcase.getInstance();
instance.setShowListener(this);
instance.setNewContentListener(this);

instance.showContent();

После

import games.my.mrgs.showcase.MRGSShowcase;

final MRGSShowcase instance = MRGSShowcase.getInstance();
instance.setShowListener(this);
instance.setNewContentListener(this);

instance.showContent();

MRGSSupport🔗

Обновите SDK🔗

dependencies {
-   def mrgsVersion = "5.0.0"
+   def mrgsVersion = "6.0.0"

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

Обновите код🔗

Основные изменения:

  • Класс MRGSMyComSupport переименован в MRGSMyGamesSupport и перемещен из ru.mail.mrgservice в games.my.mrgs.support.
  • Класс MRGSMyComSupportDialog удален, используйте MRGSMyGamesSupport.
  • Класс MyComSupportParams удален, используйте MRGSMyGamesSupportWidgetConfig.
  • Класс MRGSMyGamesSupportTicket перемещен из ru.mail.mrgservice.support в games.my.mrgs.support.

  • Интерфейс MRGSMyGamesSupportDialog.MyComListener удален, используйте MRGSMyGamesSupport.show(Activity, Consumer<MRGSError>).

  • Enum ru.mail.mrgservice.MRGSMyComSupport.Credential.SocialNetwork.VK удален.

  • Метод MRGSMyComSupport#getMyComSupport() переименован в MRGSMyGamesSupport#getInstance().

  • Метод MRGSMyGamesSupportDialog.setCode(String) удален, используйте MRGSMyGamesSupportWidgetConfig.setAuthCode(String).

  • Метод MRGSMyGamesSupportDialog.setFull(bool) удален, используйте MRGSMyGamesSupportWidgetConfig.setFullscreen(bool).

  • Метод MRGSMyGamesSupportDialog.addExtraParam(String) удален, используйте MRGSMyGamesSupportWidgetConfig.setExtraParameters(String).

  • Метод MRGSMyGamesSupportDialog.show() удален, используйте MRGSMyGamesSupport.show(Activity)
  • Метод MRGSMyGamesSupportDialog.showFeedback() удален, используйте MRGSMyGamesSupport.show(Activity, MRGSMyGamesSupportWidgetConfig).
  • Метод MRGSMyGamesSupportDialog.setLocalizationLanguage(String) удален, Используйте WidgetConfig.setLanguage(String).
  • Метод MRGSMyGamesSupportDialog.setCategory(String) удален, используйте WidgetConfig.setPage(WidgetPage).
  • Метод MRGSMyGamesSupportDialog.setListener(OnUiListener) удален, используйте MRGSMyGamesSupport.show(Activity, Consumer<MRGSError>).

  • Метод MRGSMyGamesSupportDialog.setErrorTitle(String). удален, используйте MRGSMyGamesSupportLocalization.setErrorDialogParams(String, String, String).

  • Метод MRGSMyGamesSupportDialog.setErrorMessage(String) удален, используйте MRGSMyGamesSupportLocalization.setErrorDialogParams(String, String, String).
  • Метод MRGSMyGamesSupportDialog.setErrorButton(String) удален, используйте MRGSMyGamesSupportLocalization.setErrorDialogParams(String, String, String).

  • Метод MRGSMyGamesSupportDialog.setText(String) удален, так как больше не используется.

  • Метод MRGSMyGamesSupportDialog.setWritePermissionRationaleDialogParams(String, String, String, String) удален, используйте MRGSMyGamesSupportLocalization.setWritePermissionRationaleDialogParams(String, String, String, String).
  • Метод MRGSMyGamesSupportDialog.setWritePermissionSettingsDialogParams(String, String, String, String) удален, используйте MRGSMyGamesSupportLocalization.setWritePermissionSettingsDialogParams(String, String, String, String).

  • Метод MRGSMyGamesSupportDialog.setRequestSettingClassName(String) удален, так как больше не используется.

  • Метод MRGSMyGamesSupportDialog.setRequestRationalActivityClassName(String) удален, так как больше не используется.
  • Метод MRGSMyGamesSupportDialog.setRequestRationalDialogParams(String, String, int) удален, так как больше не используется.
  • Метод MRGSMyGamesSupportDialog.setRequestRationalDialogParams(String, String) удален, так как больше не используется.
  • Метод MRGSMyGamesSupportDialog.setRequestSettingsDialogParams(String, String, String) удален, так как больше не используется.
  • Метод MRGSMyGamesSupportDialog.setRequestSettingsDialogParams(String, String, String, int) удален, так как больше не используется.
  • Метод MRGSMyGamesSupportDialog.setRequestSettingsDialogParams(String, String, String, int, String, String) удален, так как больше не используется.

В следующем примере показано, как может выглядеть ваше приложение до и после внесения этих изменений:

До

import ru.mail.mrgservice.MRGSMyComSupportDialog;

final MRGSMyComSupportDialog dialog = new MRGSMyComSupportDialog(activity);
dialog.setCategory(<CATEGORY>);
dialog.setText(<TEXT>);
dialog.setListener(this);
dialog.show();

// Or show feedback
dialog.showFeedback();

После

import android.app.Activity;

import androidx.annotation.Nullable;

import games.my.mrgs.MRGSError;
import games.my.mrgs.support.MRGSMyGamesSupport;
import games.my.mrgs.support.MRGSMyGamesSupportWidgetConfig;
import games.my.mrgs.support.MRGSMyGamesSupportWidgetPage;
import games.my.mrgs.utils.optional.Consumer;

final MRGSMyGamesSupportWidgetConfig widgetConfig = MRGSMyGamesSupportWidgetConfig.newInstance();
widgetConfig.setExtraParameters(<Payload>);
MRGSMyGamesSupport.getInstance().show(activity, widgetConfig, new Consumer<MRGSError>() {
    @Override
    public void accept(@Nullable MRGSError error) {
        // Support widget was closed. 
        // Check if there was any errors
        if (error != null) {
            // Handle the error
        }
    }
});

// Or show feedback
widgetConfig.setPage(MRGSMyGamesSupportWidgetPage.FEEDBACK);
MRGSMyGamesSupport.getInstance().show(activity, widgetConfig, callback);

4.x.x → 5.0.0🔗

В версии 5.0.0 содержатся обратно несовместимые изменения из-за частично переработано API: удалили @Deprecated функционал, поменяли имена функций, исправили опечатки, у публичного API изменился package, а приватное API переехало в internal.

Java 8🔗

Так же для работы SDK требуется подключить к проекту Java не ниже версии 8 в ваш application модуль. Скорее всего у вас уже используется Java 8 или выше, просто проверьте настройки вашего приложения.

apply plugin: 'com.android.application'

android {
    compileSdkVersion ...
    buildToolsVersion ...

    defaultConfig { ... }
    buildTypes { ... }

+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
+    }
}

Поддержка Maven репозитория🔗

Была добавлена поддержка распространения SDK через Maven репозиторий. Для этого надо добавить url в корневой build.gradle (для com.android.tools.build:gradle:7.0.4 и ниже ) или в settings.gradle (для com.android.tools.build:gradle:7.1.0 и выше)

allprojects {
    repositories {
        google()
        mavenCentral()
        // MRGS Maven repository.
+        maven { url 'https://mrgs-nexus.my.games/repository/maven2/' }
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        // MRGS Maven repository.
+        maven { url 'https://mrgs-nexus.my.games/repository/maven2/' }
    }
}

MRGService🔗

Обновите SDK🔗

Теперь SDK можно подключить через Maven репозиторий, для этого обновите ваш build.gradle файл

dependencies {
    def mrgsVersion = "5.0.0"

-   implementation(name:'MRGService', ext:'aar')
+   implementation "games.my.mrgs:core:$mrgsVersion"
}

Обновите код🔗

Основные изменения:

  • Переделан способ инициализации MRGService. Теперь он похож на способ который используется MRGS Unity SDK. Смотри Подключение Android SDK

  • Интерфейс MRGService.ActivityResultListener удален.

  • Интерфейс Printable удален.
  • Интерфейс MRGSIntegrationCheck.MRGSIntegrationCheckListener удален.
  • Класс MRGSX509ExtendedTrustManager удален.
  • Класс MRGSX509TrustManager удален.
  • Класс MRGSAirLog удален.
  • Класс MRGSExtSDK удален.

  • Метод MRGService#instance() переименован в MRGService#getInstance().

  • Метод MRGService#checkIntegration(MRGSIntegrationCheck.MRGSIntegrationCheckListener) удален. Используйте checkIntegration(@Nullable Consumer<MRGSIntegrationCheckResult>).
  • Метод MRGService#initialized() удален. Используйте MRGService#isInitialized().
  • Метод MRGService#registerResultListener(ActivityResultListener) удален.
  • Метод MRGService#unregisterResultListener(ActivityResultListener) удален.
  • Метод MRGService#onActivityRes(Activity, int, int, Intent) удален.
  • Метод MRGService#registerTransferManagerDelegate(String, MRGSTransferManagerDelegate) удален.
  • Метод MRGService#unregisterTransferManagerDelegate(MRGSTransferManagerDelegate) удален.
  • Метод MRGService#getIsRunService() удален.
  • Метод MRGService#setAppContext(Context) удален.
  • Метод MRGService#onStart(Activity) удален.
  • Метод MRGService#onStop(Activity) удален.
  • Метод MRGService#getSharedPreferences(String) удален. Используйте MRGSSharedPreferences#newInstance(String).
  • Метод MRGService#getSharedPreferences(Context, String) удален. Используйте MRGSSharedPreferences#newInstance(Context, String).
  • Метод MRGService#sendHandleException(String) удален. Используйте MRGSCrashReports#sendHandleException(String).
  • Метод MRGService#sendHandleException(String, String) удален. Используйте MRGSCrashReports#sendHandleException(String, String).

  • Метод MRGSLog#log(String) удален.

  • Метод MRGSMetrics.addPurchase(String, String, String) удален. Используйте MRGSMetrics.addPurchase(MRGSPurchaseEvent).

  • Метод MRGSUsers#instance() переименован в MRGSUsers#getInstance().

  • Метод MRGSUsers#getCurrentUser() теперь возвращает MRGSUser вместо MRGSMap.

  • Метод MRGSDevice#instance() переименован в MRGSDevice#getInstance().

  • Метод MRGSDevice#useOldUDIDMethod() удален.
  • Метод MRGSDevice#shouldUseOldUDIDMethod() удален.
  • Метод MRGSDevice#generateDeviceIdOld(Context) удален.
  • Метод MRGSDevice#getGoogleAccountPrimary() удален.
  • Метод MRGSDevice#getODIN1() удален.
  • Метод MRGSDevice#getIMEI() удален.
  • Метод MRGSDevice#openSystemSettingsOfApplication() удален. MRGSDevice#openApplicationDetailsSettings(Context).
  • Метод MRGSDevice#getOldOpenUDID() переименован в MRGSDevice#getDeviceIdOrUUID().

  • Метод MRGSApplication#instance() переименован в MRGSApplication#getInstance().

  • Метод MRGSApplication#getApplicationBundleName() больше не будет возвращать null.

  • Метод MRGSServerData#instance() переименован в MRGSServerData#getInstance().

В следующем примере показано, как может выглядеть ваше приложение до и после внесения этих изменений:

До

import android.os.Bundle;

import ru.mail.mrgservice.MRGSBillingDelegateEx;
import ru.mail.mrgservice.MRGService;

// Setting MRGService
final Bundle serviceParams = new Bundle();
serviceParams.putBoolean("debug", false);
serviceParams.putString("billing", "google");

// Setting External SDKS
final Bundle externalSDKParams = new Bundle();

// Setting MyTracker
final Bundle tracker = new Bundle();
tracker.putString("appId", "MY_TRACKER_SDK_KEY");
tracker.putString("enable", "true");
tracker.putString("debug", "false");

externalSDKParams.putBundle("MyTracker", tracker);

// Setting AppsFlyer
Bundle appsFlyer = new Bundle();
appsFlyer.putString("app_key", "<APPS_FLYER_DEVKEY>");
appsFlyer.putString("debug", "false");
appsFlyer.putString("enable", "true");

externalSDKParams.putBundle("AppsFlyer", appsFlyer);

// Setting other external SDKS
externalSDKParams.putBundle("Facebook", facebook);
externalSDKParams.putBundle("GoogleGames", googleGames);

MRGService.service(context, null, MRGS_APP_ID, CLIENT_SECRET, serviceParams, externalSDKParams);

После

import ru.mail.mrgservice.MRGSExternalSDKParams;
import ru.mail.mrgservice.MRGSExternalSDKParams.AppsFlyerParams;
import ru.mail.mrgservice.MRGSExternalSDKParams.MyTrackerParams;
import ru.mail.mrgservice.MRGSExternalSDKParams.FacebookParams;
import ru.mail.mrgservice.MRGSExternalSDKParams.GooglePlayGamesParams;
import ru.mail.mrgservice.MRGSPlatform;
import ru.mail.mrgservice.MRGService;
import ru.mail.mrgservice.MRGServiceParams;

// Setting MRGService
// Available MRGSPlatform: AMAZON, ANDROID, HUAWEI, SAMSUNG and FACEBOOK_CLOUD
final MRGServiceParams serviceParams
        = MRGServiceParams.init(<MRGS_APP_ID>, <CLIENT_SECRET>, MRGSPlatform.ANDROID)
serviceParams.setDebuggable(false);


// Setting External SDKS
final MRGSExternalSDKParams externalSDKParams = MRGSExternalSDKParams.newInstance();

// Setting MyTracker
final MyTrackerParams myTrackerParams = MyTrackerParams.init("MY_TRACKER_SDK_KEY");
myTrackerParams.setDebuggable(false);
externalSDKParams.myTrackerParams = myTrackerParams;

// Setting AppsFlyer
final AppsFlyerParams appsFlyerParams = AppsFlyerParams.init("DEV_KEY");
appsFlyerParams.setDebuggable(false);
appsFlyerParams.setForwardMetricsEnabled(true);
externalSDKParams.appsFlyerParams = appsFlyerParams;

// Setting other external SDKS
externalSDKParams.facebookParams = FacebookParams.init("FACEBOOK_APP_ID");
externalSDKParams.googlePlayGamesParams = GooglePlayGamesParams.init("GOOGLE_CLIENT_ID");

MRGService.service(context, serviceParams, externalSDKParams);

MRGSAdvertising🔗

Обновите SDK🔗

Теперь SDK можно подключить через Maven репозиторий, для этого обновите ваш build.gradle файл

dependencies {
    def mrgsVersion = "5.0.0"

-   implementation(name:'MRGSAdvertising', ext:'aar')
+   implementation "games.my.mrgs:advertising:$mrgsVersion"
}

Обновите код🔗

Основные изменения:

  • Класс MRGSAdvertisingConsts удален.
  • Класс MRGSAdvertisingFactory перемещен из ru.mail.mrgservice в ru.mail.mrgservice.advertising.

В следующем примере показано, как может выглядеть ваше приложение до и после внесения этих изменений:

До

import ru.mail.mrgservice.MRGSAdvertisingFactory;
import ru.mail.mrgservice.advertising.MRGSAdvert;

final MRGSAdvert videoAdvert = MRGSAdvertisingFactory.createMRGSAdvertising(true);
videoAdvert.showContent();

После

import ru.mail.mrgservice.advertising.MRGSAdvert;
import ru.mail.mrgservice.advertising.MRGSAdvertisingFactory;

final MRGSAdvert videoAdvert = MRGSAdvertisingFactory.createMRGSAdvertising(true);
videoAdvert.showContent();

MRGSAnalytics🔗

Обновите SDK🔗

Теперь SDK можно подключить через Maven репозиторий, для этого обновите ваш build.gradle файл

dependencies {
    def mrgsVersion = "5.0.0"

-   implementation(name:'MRGSAnalytics', ext:'aar')
+   implementation "games.my.mrgs:analytics:$mrgsVersion"
}

Обновите код🔗

Основные изменения:

  • Класс MRGSGoogleConversion удален.
  • Класс MRGSAnalytics перемещен из ru.mail.mrgservice в ru.mail.mrgservice.analytics.
  • Класс MRGSAppsFlyer перемещен из ru.mail.mrgservice в ru.mail.mrgservice.analytics.

  • Метод MRGSAnalytics#getGoogleConversion() удален.

  • Метод MRGSAppsFlyer#setCustomerUserId(String) удален. Используйте MRGSAppsFlyer#forceCustomerUserId(String)

В следующем примере показано, как может выглядеть ваше приложение до и после внесения этих изменений:

До

import ru.mail.mrgservice.MRGSAnalytics;
import ru.mail.mrgservice.MRGSAppsFlyer;


final MRGSAnalytics analytics = MRGSAnalytics.getInstance();
analytics.sendEvent("<Event>", null);

MRGSAppsFlyer.forceCustomerUserId("custom_user_id");
final MRGSAppsFlyer appsFlyer = analytics.getAppsFlyer();
appsFlyer.sendEvent("<Event>", "<Value>");

После

import ru.mail.mrgservice.analytics.MRGSAnalytics;
import ru.mail.mrgservice.analytics.MRGSAppsFlyer;

final MRGSAnalytics analytics = MRGSAnalytics.getInstance();
analytics.sendEvent("<Event>", null);

MRGSAppsFlyer.forceCustomerUserId("custom_user_id");
final MRGSAppsFlyer appsFlyer = analytics.getAppsFlyer();
appsFlyer.sendEvent("<Event>", "<Value>");

MRGSAuthentications🔗

Обновите SDK🔗

Теперь SDK можно подключить через Maven репозиторий, для этого обновите ваш build.gradle файл

dependencies {
    def mrgsVersion = "5.0.0"

-   implementation(name:'MRGSAuthentication', ext:'aar')
+   implementation "games.my.mrgs:authentication:$mrgsVersion"
}

Обновите код🔗

Основные изменения:

  • Класс MRGSAmazon перемещен из ru.mail.mrgservice.amazon в ru.mail.mrgservice.authentication.amazon.
  • Класс MRGSFacebook перемещен из ru.mail.mrgservice.facebook в ru.mail.mrgservice.authentication.facebook..
  • Класс MRGSGoogleGames перемещен из ru.mail.mrgservice.googlegames в ru.mail.mrgservice.authentication.googlegames.
  • Класс MRGSMyGames перемещен из ru.mail.mrgservice.mygames в ru.mail.mrgservice.authentication.mygames.
  • Класс MRGSVK перемещен из ru.mail.mrgservice.vk в ru.mail.mrgservice.authentication.
  • Класс MRGSUser теперь является интерфейсом а так же перемещен из from ru.mail.mrgservice в ru.mail.mrgservice.authentication.amazon.
  • Класс FacebookUser удален.
  • Класс MRGSCredentials теперь является интерфейсом.
  • Класс MRGSAuthInfo помечен как @Deprecated. Используйте MRGSAccessToken.

  • Интерфейс MRGSAuthentication.ExternalLogoutCallback помечен как @Deprecated. Используйте MRGSAuthentication.OnExternalLogoutListener.

  • Интерфейс MRGSSocial перемещен из ru.mail.mrgservice.social в ru.mail.mrgservice.authentication.
  • Интерфейс MRGSScore перемещен из ru.mail.mrgservice.games в ru.mail.mrgservice.authentication.
  • Интерфейс MRGSLeaderBoards перемещен из ru.mail.mrgservice.games в ru.mail.mrgservice.authentication.
  • Интерфейс MRGSAchievements перемещен из ru.mail.mrgservice.games в ru.mail.mrgservice.authentication.
  • Интерфейс MRGSAuthInfoCallback.java удален.

  • Enum MRGSAuthenticationNetwork.MRGSAuthenticationNetworkAmazon переименован в MRGSAuthenticationNetwork.AMAZON.

  • Enum MRGSAuthenticationNetwork.MRGSAuthenticationNetworkFacebook переименован в MRGSAuthenticationNetwork.FACEBOOK.
  • Enum MRGSAuthenticationNetwork.MRGSAuthenticationNetworkGoogleGames переименован в MRGSAuthenticationNetwork.GOOGLE_GAMES.
  • Enum MRGSAuthenticationNetwork.MRGSAuthenticationNetworkMyGames переименован в MRGSAuthenticationNetwork.MY_GAMES.
  • Enum MRGSAuthenticationNetwork.MRGSAuthenticationNetworkVKontakte переименован в MRGSAuthenticationNetwork.VKONTAKTE.
  • Enum MRGSAuthenticationNetwork.Unknown переименован в MRGSAuthenticationNetwork.UNKNOWN.

  • Метод MRGSAuthentication#loginWithScopes(List<String>, MRGSLoginCallback) помечен как @Deprecated. Используйте MRGSAuthentication#login(List<String>, MRGSLoginCallback).

  • Метод MRGSAuthentication#getAuthInfo(BiConsumer<MRGSAuthInfo, MRGSError>) помечен как @Deprecated. Используйте MRGSAuthentication#getAccessToken(BiConsumer<MRGSAuthInfo, MRGSError>).
  • Метод MRGSAuthentication#getUserAvatar(MRGSUser, MRGSAvatarCallback, int, int) помечен как @Deprecated. Используйте MRGSAuthentication#getUserAvatar(MRGSUser, int, int, MRGSAvatarCallback).
  • Метод MRGSAuthentication#setOnExternalLogoutCallback(ExternalLogoutCallback) помечен как @Deprecated. Используйте MRGSAuthentication#setOnExternalLogoutListener(OnExternalLogoutListener).

  • Метод MRGSAmazon#tryUpdateToken() удален. Используйте MRGSAmazon#getAccessToken(BiConsumer<MRGSAccessToken, MRGSError>).

  • Метод MRGSAchievement#achievementId() помечен как @Deprecated. Используйте MRGSAchievement#getAchievementId().

  • Метод MRGSAchievement#name() помечен как @Deprecated. Используйте MRGSAchievement#getName().
  • Метод MRGSAchievement#description() помечен как @Deprecated. Используйте MRGSAchievement#getDescription().
  • Метод MRGSAchievement#state() помечен как @Deprecated. Используйте MRGSAchievement#getState().
  • Метод MRGSAchievement#currentSteps() помечен как @Deprecated. Используйте MRGSAchievement#getCurrentSteps().
  • Метод MRGSAchievement#totalSteps() помечен как @Deprecated. Используйте MRGSAchievement#getTotalSteps().
  • Метод MRGSAchievement#completionPercent() помечен как @Deprecated. Используйте MRGSAchievement#getCompletionPercent().

  • Метод MRGSCredentials#setUserId(String) удален.

  • Метод MRGSCredentials#setUser(MRGSUser) удален.
  • Метод MRGSCredentials#setAuthInfo(MRGSAuthInfo) удален.
  • Метод MRGSCredentials#getAuthInfo() помечен как @Deprecated. Используйте MRGSCredentials#getAccessToken().

  • Метод MRGSLeaderboard#leaderboardId() помечен как @Deprecated. Используйте MRGSLeaderboard#getLeaderboardId().

  • Метод MRGSLeaderboard#name() помечен как @Deprecated. Используйте MRGSLeaderboard#getName().

  • Метод MRGSScore#leaderboardId() помечен как @Deprecated. Используйте MRGSScore#getLeaderboardId().

  • Метод MRGSScore#rank() помечен как @Deprecated. Используйте MRGSScore#getRank().
  • Метод MRGSScore#displayRank() помечен как @Deprecated. Используйте MRGSScore#getDisplayRank().
  • Метод MRGSScore#rawScore() помечен как @Deprecated. Используйте MRGSScore#getRawScore().
  • Метод MRGSScore#displayScore() помечен как @Deprecated. Используйте MRGSScore#getDisplayScore().
  • Метод MRGSScore#player() помечен как @Deprecated. Используйте MRGSScore#getPlayer().

  • Метод MRGSUser#userId() помечен как @Deprecated. Используйте MRGSUser#getUserId().

  • Метод MRGSUser#nick() помечен как @Deprecated. Используйте MRGSUser#getNickName().
  • Метод MRGSUser#firstName() помечен как @Deprecated. Используйте MRGSUser#getFirstName().
  • Метод MRGSUser#lastName() помечен как @Deprecated. Используйте MRGSUser#getLastName().
  • Метод MRGSUser#middleName() помечен как @Deprecated. Используйте MRGSUser#getMiddleName().
  • Метод MRGSUser#fullName() помечен как @Deprecated. Используйте MRGSUser#getFullName().
  • Метод MRGSUser#displayName() помечен как @Deprecated. Используйте MRGSUser#getDisplayName().
  • Метод MRGSUser#gender() помечен как @Deprecated. Используйте MRGSUser#getGender().
  • Метод MRGSUser#birthDate() помечен как @Deprecated. Используйте MRGSUser#getBirthDate().
  • Метод MRGSUser#location() помечен как @Deprecated. Используйте MRGSUser#getLocation().
  • Метод MRGSUser#socialId() помечен как @Deprecated. Используйте MRGSUser#getSocialId().

В следующем примере показано, как может выглядеть ваше приложение до и после внесения этих изменений:

До

import androidx.annotation.Nullable;

import java.util.Arrays;

import ru.mail.mrgservice.MRGSError;
import ru.mail.mrgservice.MRGSUser;
import ru.mail.mrgservice.authentication.MRGSAuthInfo;
import ru.mail.mrgservice.authentication.MRGSAuthentication;
import ru.mail.mrgservice.authentication.MRGSAuthenticationNetwork;
import ru.mail.mrgservice.authentication.MRGSCredentials;
import ru.mail.mrgservice.authentication.MRGSLoginCallback;
import ru.mail.mrgservice.utils.optional.BiConsumer;

final MRGSAuthentication authentication = AuthenticationImpl.getInstance();

// Set logout listener
authentication.setOnExternalLogoutCallback(new MRGSAuthentication.ExternalLogoutCallback() {
    @Override
    public void onUserLogout(MRGSAuthenticationNetwork network) {
        // Handle result
    }
});

// Common login
authentication.login(new MRGSLoginCallback() {
    @Override
    public void onSuccess(MRGSCredentials credentials) {
        // Handle result
    }

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

// Login with scopes
authentication.loginWithScopes(Arrays.asList("scope_1", "scope_2"), new MRGSLoginCallback() {
    @Override
    public void onSuccess(MRGSCredentials credentials) {
        // Handle result
    }

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

// Get current user's information
authentication.getCurrentUser(new MRGSAuthentication.UserCallback() {
    @Override
    public void onSuccess(final MRGSUser user) {
        // Handle result
    }

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

// Get current user's authentication information
authentication.getAuthInfo(new BiConsumer<MRGSAuthInfo, MRGSError>() {
    @Override
    public void accept(@Nullable MRGSAuthInfo authInfo, @Nullable MRGSError error) {
        if (error != null) {
            // Handle error
        } else {
            // Handle result
        }
    }
});

// Call logout
authentication.logout();

После

import java.util.Arrays;

import ru.mail.mrgservice.MRGSError;
import ru.mail.mrgservice.authentication.MRGSAccessToken;
import ru.mail.mrgservice.authentication.MRGSAuthentication;
import ru.mail.mrgservice.authentication.MRGSAuthentication.OnExternalLogoutListener;
import ru.mail.mrgservice.authentication.MRGSAuthenticationNetwork;
import ru.mail.mrgservice.authentication.MRGSCredentials;
import ru.mail.mrgservice.authentication.MRGSLoginCallback;
import ru.mail.mrgservice.authentication.MRGSUser;
import ru.mail.mrgservice.utils.optional.BiConsumer;

final MRGSAuthentication authentication = AuthenticationImpl.getInstance();

// Set logout listener
authentication.setOnExternalLogoutListener(new OnExternalLogoutListener() {
    @Override
    public void onUserLogout(@NonNull MRGSAuthenticationNetwork network) {
        // Handle result
    }
});

// Common login
authentication.login(new MRGSLoginCallback() {
    @Override
    public void onSuccess(@NonNull MRGSCredentials credentials) {
        // Handle result
    }

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

// Login with scopes
authentication.login(Arrays.asList("scope_1", "scope_2"), new MRGSLoginCallback() {
    @Override
    public void onSuccess(@NonNull MRGSCredentials credentials) {
        // Handle result
    }

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

// Get current user's information
authentication.getCurrentUser(new MRGSAuthentication.UserCallback() {
    @Override
    public void onSuccess(@NonNull final MRGSUser user) {
        // Handle result
    }

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

// Get current user's authentication information
authentication.getAccessToken(new BiConsumer<MRGSAccessToken, MRGSError>() {
    @Override
    public void accept(@Nullable MRGSAccessToken accessToken, @Nullable MRGSError error) {
        if (error != null) {
            // Handle error
        } else {
            // Handle result
        }
    }
});

// Call logout
authentication.logout();

MRGSBilling🔗

Обновите SDK🔗

Теперь SDK можно подключить через Maven репозиторий, для этого обновите ваш build.gradle файл

dependencies {
    def mrgsVersion = "5.0.0"

-   implementation(name:'MRGSBilling', ext:'aar')
+   implementation "games.my.mrgs:billing:$mrgsVersion"
}

Обновите код🔗

Основные изменения:

  • Класс MRGSBilling перемещен из ru.mail.mrgservice в ru.mail.mrgservice.billing.
  • Класс MRGSPurchaseItem переименован в MRGSBillingProduct и перемещен из ru.mail.mrgservice в ru.mail.mrgservice.billing.
  • Класс MRGSBillingEntities перемещен из ru.mail.mrgservice в ru.mail.mrgservice.billing.
  • Класс MRGSMyGamesBilling перемещен из ru.mail.mrgservice в ru.mail.mrgservice.billing.
  • Интерфейс MRGSBillingDelegate удален.
  • Интерфейс MRGSBillingDelegateEx переименован в MRGSBillingDelegate и перемещен из ru.mail.mrgservice в ru.mail.mrgservice.billing.

  • Метод MRGSBilling#instance() переименован в MRGSBilling#getInstance().

  • Метод MRGSBilling#requestProductsInfoWithRequest(MRGSBankProductsRequest) переименован в MRGSBilling#requestProductsInfo(MRGSBankProductsRequest).
  • Метод MRGSBilling#buyItem(String sku, final String type) удален. Используйте MRGSBilling#buyItem(String sku).
  • Метод MRGSBilling#buyItem(String sku, String type, String developerPayload) удален. Используйте MRGSBilling#buyItem(String sku, String developerPayload).
  • Метод MRGSBilling#buyItem(final MRGSPurchaseItem purchase) удален. Используйте MRGSBilling#buyItem(MRGSBankPurchaseRequest).
  • Метод MRGSBilling#setDelegate(MRGSBillingDelegateEx) удален.
  • Метод MRGSBilling#changeItem(String, String, String) удален. Используйте MRGSBilling#buyItem(MRGSBankPurchaseRequest).
  • Метод MRGSBilling#changeItem(String, String, String, String) удален. Используйте MRGSBilling#buyItem(MRGSBankPurchaseRequest).
  • Метод MRGSBilling#changeItem(MRGSPurchaseItem, MRGSPurchaseItem) удален. Используйте MRGSBilling#buyItem(MRGSBankPurchaseRequest).
  • Метод MRGSBilling#getProductsInfo(ArrayList<String>) удален. Используйте MRGSBilling#requestProductsInfo(MRGSBankProductsRequest).
  • Метод MRGSBilling#getProductsInfoWithTypes(ArrayList<Pair<String, String>>) удален. Используйте MRGSBilling#requestProductsInfo(MRGSBankProductsRequest).
  • Метод MRGSBilling#getProductsInfoFromPurchaseInfo(ArrayList<MRGSBillingProduct>) удален. Используйте MRGSBilling#requestProductsInfo(MRGSBankProductsRequest).
  • Метод MRGSBilling#notifyMRGSAboutConsume(MRGSPurchaseItem) изменен на MRGSBilling#notifyMRGSAboutConsume(String sku, String transactionId)
  • Метод MRGSBilling#closePayment(MRGSPurchaseItem) удален. Используйте MRGSBilling#notifyMRGSAboutConsume(String sku, String transactionId)

  • Метод MRGSBillingProduct#createWithPurchaseInfo(String) удален.

  • Метод MRGSBillingProduct#createWithPurchaseInfoWithType(String, String) удален.
  • Метод MRGSBillingProduct#fromJSON(String) удален.
  • Метод MRGSBillingProduct#setSku(String) удален.
  • Метод MRGSBillingProduct#setIntroductoryPeriod(String) удален.
  • Метод MRGSBillingProduct#setType(String) удален.
  • Метод MRGSBillingProduct#getDictionary() удален.
  • Метод MRGSBillingProduct#getPurchaseToken() удален.
  • Метод MRGSBillingProduct#setPurchaseToken(String token) удален.
  • Метод MRGSBillingProduct#getTransactionId() удален. Используйте MRGSBankTransaction#getTransactionIdentifier().
  • Метод MRGSBillingProduct#getTransactionReceipt() удален.
  • Метод MRGSBillingProduct#getResultCode() удален.
  • Метод MRGSBillingProduct#getRawPurchaseInfo() удален. Используйте MRGSBankTransaction#getRawPurchaseResult().
  • Метод MRGSBillingProduct#getDeveloperPayload() удален. Используйте MRGSBankPurchaseResult#getDeveloperPayload().
  • Метод MRGSBillingProduct#setDeveloperPayload(String) удален.
  • Метод MRGSBillingProduct#getUserId() удален.

  • Метод MRGSBillingDelegate#onReceiveProductsResponce переименован в MRGSBillingDelegate#onReceiveProductsResponse.

  • Метод MRGSBillingDelegate#onReceiveSuccessfullPurchase переименован в MRGSBillingDelegate#onReceiveSuccessfulPurchase.

В следующем примере показано, как может выглядеть ваше приложение до и после внесения этих изменений:

До

import java.util.Arrays;
import java.util.List;

import ru.mail.mrgservice.MRGSBilling;
import ru.mail.mrgservice.MRGSBillingDelegateEx;
import ru.mail.mrgservice.MRGSBillingEntities.MRGSBankProductsRequest;
import ru.mail.mrgservice.MRGSBillingEntities.MRGSBankPurchaseRequest;
import ru.mail.mrgservice.MRGSPurchaseItem;

final MRGSBilling billing = MRGSBilling.instance();

final MRGSBillingDelegateEx listener = new MRGSBillingDelegateEx() {
    ...
};
billing.setDelegateEx(listener);

// Request Products
final List<String> consumable = Arrays.asList(
        "ru.mail.games.mrgservisetest.purchase1",
        "ru.mail.games.mrgservisetest.purchase2",
        "android.test.purchased");
final List<String> nonConsumable = Arrays.asList("ru.mail.games.mrgservisetest.noncons");
final List<String> subscriptions = Arrays.asList(
        "ru.mail.mrgs.subs1",
        "ru.mail.mrgs.subs2",
        "ru.mail.mrgs.subs3");

final MRGSBankProductsRequest productRequest = new MRGSBankProductsRequest();
productRequest.add(consumable, MRGSPurchaseItem.CONS);
productRequest.add(nonConsumable, MRGSPurchaseItem.NONCONS);
productRequest.add(subscriptions, MRGSPurchaseItem.SUBS);

// The result of request will be sent to one of
// MRGSBillingDelegateEx#onReceiveProductsResponce(MRGSBankProductsResponse)
// or to MRGSBillingDelegateEx#onReceiveProductsError(MRGSBankProductsResponse)
billing.requestProductsInfoWithRequest(productRequest);


// Buy product
// создание специального объекта запроса платежа и добавлением пейлоада
final String sku = "ru.mail.games.mrgservisetest.purchase1";
final String devPayload = "{\"item\": 123,\"store\": 456}";
final MRGSBankPurchaseRequest purchaseRequest = new MRGSBankPurchaseRequest(sku, devPayload);

// The result of request will be sent to one of
// MRGSBillingDelegateEx#onReceiveSuccessfullPurchase(MRGSBankPurchaseResult),
// MRGSBillingDelegateEx#onReceiveFailedPurchase(MRGSBankPurchaseResult),
// MRGSBillingDelegateEx#onReceivePendingPurchase(MRGSBankPurchaseResult),
// or MRGSBillingDelegateEx#onReceiveCancelledPurchase(MRGSBankPurchaseResult).
billing.buyItem(purchaseRequest);

После

import java.util.Arrays;
import java.util.List;

import ru.mail.mrgservice.billing.MRGSBilling;
import ru.mail.mrgservice.billing.MRGSBillingDelegate;
import ru.mail.mrgservice.billing.MRGSBillingEntities.MRGSBankProductsRequest;
import ru.mail.mrgservice.billing.MRGSBillingEntities.MRGSBankPurchaseRequest;
import ru.mail.mrgservice.billing.MRGSBillingProduct;

final MRGSBilling billing = MRGSBilling.getInstance();

final MRGSBillingDelegate listener = new MRGSBillingDelegate() {
    ...
};
billing.setDelegate(listener);

// Request Products
final List<String> consumable = Arrays.asList(
        "ru.mail.games.mrgservisetest.purchase1",
        "ru.mail.games.mrgservisetest.purchase2",
        "android.test.purchased");
final List<String> nonConsumable = Arrays.asList("ru.mail.games.mrgservisetest.noncons");
final List<String> subscriptions = Arrays.asList(
        "ru.mail.mrgs.subs1",
        "ru.mail.mrgs.subs2",
        "ru.mail.mrgs.subs3");

final MRGSBankProductsRequest productRequest = new MRGSBankProductsRequest();
productRequest.add(consumable, MRGSBillingProduct.CONS);
productRequest.add(nonConsumable, MRGSBillingProduct.NONCONS);
productRequest.add(subscriptions, MRGSBillingProduct.SUBS);

// The result of request will be sent to one of
// MRGSBillingDelegate#onReceiveProductsResponse(MRGSBankProductsResponse)
// or to MRGSBillingDelegate#onReceiveProductsError(MRGSBankProductsResponse)
billing.requestProductsInfo(productRequest);


// Buy product
// создание специального объекта запроса платежа и добавлением пейлоада
final String sku = "ru.mail.games.mrgservisetest.purchase1";
final String devPayload = "{\"item\": 123,\"store\": 456}";
final MRGSBankPurchaseRequest purchaseRequest = new MRGSBankPurchaseRequest(sku, devPayload);

// The result of request will be sent to one of
// MRGSBillingDelegate#onReceiveSuccessfulPurchase(MRGSBankPurchaseResult),
// MRGSBillingDelegate#onReceiveFailedPurchase(MRGSBankPurchaseResult),
// MRGSBillingDelegate#onReceivePendingPurchase(MRGSBankPurchaseResult),
// or MRGSBillingDelegate#onReceiveCancelledPurchase(MRGSBankPurchaseResult).
billing.buyItem(purchaseRequest);

MRGSFirebase🔗

Обновите SDK🔗

Теперь SDK можно подключить через Maven репозиторий, для этого обновите ваш build.gradle файл

dependencies {
    def mrgsVersion = "5.0.0"

-   implementation(name:'MRGSFirebase', ext:'aar')
+   implementation "games.my.mrgs:firebase:$mrgsVersion"
}

Обновите код🔗

Основные изменения:

  • Класс MRGSFirebaseAnalytics перемещен из ru.mail.mrgservice в ru.mail.mrgservice.firebase.

В следующем примере показано, как может выглядеть ваше приложение до и после внесения этих изменений:

До

import java.util.Map;
import java.util.TreeMap;

import ru.mail.mrgservice.MRGSFirebaseAnalytics;

final Map<String, Object> params = new TreeMap<>();
params.put("someInfoKey", "someImportantInfo");
MRGSFirebaseAnalytics.getInstance().sendEvent("event_name", params);

После

import java.util.Map;
import java.util.TreeMap;

import ru.mail.mrgservice.firebase.MRGSFirebaseAnalytics;

final Map<String, Object> params = new TreeMap<>();
params.put("someInfoKey", "someImportantInfo");
MRGSFirebaseAnalytics.getInstance().sendEvent("event_name", params);

MRGSGameCenter🔗

Обновите SDK🔗

Теперь SDK можно подключить через Maven репозиторий, для этого обновите ваш build.gradle файл

dependencies {
    def mrgsVersion = "5.0.0"

-   implementation(name:'MRGSGameCenter', ext:'aar')
+   implementation "games.my.mrgs:gamecenter:$mrgsVersion"
}

Обновите код🔗

Изменений нет.

MRGSGDPR🔗

Обновите SDK🔗

Теперь SDK можно подключить через Maven репозиторий, для этого обновите ваш build.gradle файл

dependencies {
    def mrgsVersion = "5.0.0"

-   implementation(name:'MRGSGDPR', ext:'aar')
+   implementation "games.my.mrgs:gdpr:$mrgsVersion"
}

Обновите код🔗

Основные изменения:

  • Класс MRGSGDPR перемещен из ru.mail.mrgservice в ru.mail.mrgservice.gdpr.
  • Класс MRGSGDPR.MRGSGDPRFactory удален. Используйте MRGSGDPR#getInstance().
  • Интерфейс MRGSCOPPA.OnResponseCallback удален из публичного API, так как предназначен для внутренней работы.

  • Метод MRGSGDPR#showAgreementAtActivity(Activity, String, String, int) удален. Используйте MRGSGDPR#showAgreementAtActivity(Activity, String, String).

  • Метод MRGSGDPR#shouldShowGDPRForVersion(Activity, String, int, boolean, MRGSGDPRAsyncStatus) удален. Используйте MRGSGDPR#shouldShowGDPRForVersion(Activity, String, boolean, MRGSGDPRAsyncStatus).
  • Метод MRGSGDPR#setUserHasAcceptedAgreementWithVersion(Context, int, boolean, boolean, String) удален. Используйте MRGSGDPR#setUserHasAcceptedAgreementWithVersion(Context, boolean, boolean, String).
  • Метод MRGSCCPA#fetchCountyIfNeeded() удален из публичного API, так как предназначен для внутренней работы.
  • Метод MRGSCOPPA#isUnderUk(Consumer<Boolean>) удален из публичного API, так как предназначен для внутренней работы.
  • Метод MRGSCOPPA#shouldShowCoppa(Consumer<Boolean>) удален из публичного API, так как предназначен для внутренней работы.
  • Метод MRGSCOPPA#shouldShowCoppa(Context, Consumer<Boolean>) удален из публичного API, так как предназначен для внутренней работы.
  • Метод MRGSCOPPA#sendEmail(String, OnResponseCallback<MRGSSendEmailResult>) удален из публичного API, так как предназначен для внутренней работы.
  • Метод MRGSCOPPA#checkEmails(List<String>, OnResponseCallback<MRGSCheckEmailResult>) удален из публичного API, так как предназначен для внутренней работы.

В следующем примере показано, как может выглядеть ваше приложение до и после внесения этих изменений:

До

import ru.mail.mrgservice.MRGSGDPR;

final MRGSGDPR gdpr = MRGSGDPR.getInstance();
gdpr.setDelegate(this);
gdpr.onlyEU(true);
gdpr.setBackgroundColor(255, 0, 0);
gdpr.withAdvertising(true);
gdpr.setLocalizationLanguage("en");

После

import ru.mail.mrgservice.gdpr.MRGSGDPR;

final MRGSGDPR gdpr = MRGSGDPR.getInstance();
gdpr.setDelegate(this);
gdpr.onlyEU(true);
gdpr.setBackgroundColor(255, 0, 0);
gdpr.withAdvertising(true);
gdpr.setLocalizationLanguage("en");

MRGSMyTarget🔗

  • Модуль был полностью удален.

MRGSNotifications🔗

Обновите SDK🔗

Теперь SDK можно подключить через Maven репозиторий, для этого обновите ваш build.gradle файл

dependencies {
    def mrgsVersion = "5.0.0"

-   implementation(name:'MRGSNotifications', ext:'aar')
+   implementation "games.my.mrgs:notifications:$mrgsVersion"
}

Обновите код🔗

Основные изменения:

  • Класс MRGSPushNotifications удален. Используйте MRGSNotificationCenter.
  • Класс MRGSLocalPushService удален. Используйте MRGSNotificationCenter.
  • Класс MRGSLocalPushAutoStartReceiver удален.
  • Класс MRGSPushNotification.MRGSPushNotificationChannel удален. Используйте ru.mail.mrgservice.MRGSNotificationChannel.
  • Класс MRGSPushNotification.MRGSPushNotificationChannelsGroup удален. Используйте ru.mail.mrgservice.MRGSNotificationChannelGroup.

  • Интерфейс MRGSPushNotificationHandler.MRGSPushNotificationDelegate удален

  • Интерфейс MRGSPushNotificationHandler.MRGSPushNotificationDelegateEx переименован в MRGSPushNotificationHandler.MRGSPushNotificationDelegate.

  • Интерфейс MRGSPushNotificationHandler.MRGSPushNotificationGroupDelegate удален

  • Интерфейс MRGSPushNotificationHandler.MRGSPushNotificationExGroupDelegate переименован в MRGSPushNotificationHandler.MRGSPushNotificationGroupDelegate.

  • Метод MRGSNotificationCenterImpl.getInstance() удален. Используйте MRGSNotificationCenter.getInstance().

  • Метод MRGSPushNotification.getCutomTextStrings() переименован в MRGSPushNotification.getCustomTextStrings().
  • Метод MRGSPushNotificationHandler#setDelegate(MRGSPushNotificationDelegateEx) удален.

В следующем примере показано, как может выглядеть ваше приложение до и после внесения этих изменений:

До

import ru.mail.mrgservice.MRGS;
import ru.mail.mrgservice.MRGSMap;
import ru.mail.mrgservice.MRGSNotificationCenter;
import ru.mail.mrgservice.MRGSNotificationCenterImpl;
import ru.mail.mrgservice.MRGSPushNotification;
import ru.mail.mrgservice.MRGSPushNotification.MRGSPushNotificationChannel;
import ru.mail.mrgservice.MRGSPushNotification.MRGSPushNotificationChannelsGroup;
import ru.mail.mrgservice.MRGSPushNotificationHandler.MRGSPushNotificationExDelegate;

final MRGSNotificationCenter notificationCenter = MRGSNotificationCenterImpl.getInstance();

// Create a listener for local and remote notification.
// You can create another listener to separate notifications or uses one and separate them
// with boolean isLocal
MRGSPushNotificationExDelegate notifyDelegate = new MRGSPushNotificationExDelegate() {
    @Override
    public void clickOnNotification(int idNotify, String title, String msg, MRGSMap developerPayload, boolean isLocal) {
        //Handle result.
    }

    @Override
    public void receivedNotification(int idNotify, String title, String msg, MRGSMap developerPayload, boolean isLocal) {
        //Handle result.
    }
};

notificationCenter.setLocalDelegate(notifyDelegate);
notificationCenter.setRemoteDelegate(notifyDelegate);

// Create notification channel group
final MRGSPushNotificationChannelsGroup group = new MRGSPushNotificationChannelsGroup();
group.Id = "my_group_id";
group.Name = "My Group";

notificationCenter.createNotificationChannelGroup(context, group);

// Create notification channel
final MRGSPushNotificationChannel channel = new MRGSPushNotificationChannel();
channel.Id = "my_channel_id";
channel.Name= "My Channel";
channel.Description = "Description";
channel.Group = "my_group_id";
channel.Sound = "push_sound";
channel.ShowLights = true;

notificationCenter.createNotificationChannel(context, channel);

// Create local push notification
final int time = MRGS.timeUnix() + 10;
MRGSPushNotification notification = MRGSPushNotification.create("Message number 1", 1, time);
notification.setGroupId(222);
notification.setGroupMessage("New resources arrived");
notification.setGroupTitle("Receive your resources");
notificationCenter.addLocalPush(notification);`

После

import ru.mail.mrgservice.MRGS;
import ru.mail.mrgservice.MRGSMap;
import ru.mail.mrgservice.MRGSNotificationCenter;
import ru.mail.mrgservice.MRGSNotificationChannel;
import ru.mail.mrgservice.MRGSNotificationChannelGroup;
import ru.mail.mrgservice.MRGSPushNotification;
import ru.mail.mrgservice.MRGSPushNotificationHandler.MRGSPushNotificationDelegate;

final MRGSNotificationCenter notificationCenter = MRGSNotificationCenter.getInstance();

// Create a listener for local and remote notification.
// You can create another listener to separate notifications or uses one and separate them
// with boolean isLocal
MRGSPushNotificationDelegate notifyDelegate = new MRGSPushNotificationDelegate() {
    @Override
    public void clickOnNotification(int idNotify, String title, String msg, MRGSMap developerPayload, boolean isLocal) {
        //Handle result.
    }

    @Override
    public void receivedNotification(int idNotify, String title, String msg, MRGSMap developerPayload, boolean isLocal) {
        //Handle result.
    }
};

notificationCenter.setLocalDelegate(notifyDelegate);
notificationCenter.setRemoteDelegate(notifyDelegate);

// Create notification channel group
final MRGSNotificationChannelGroup group = new MRGSNotificationChannelGroup("my_group_id", "My Group");
notificationCenter.createNotificationChannelGroup(context, group);

// Create notification channel
final MRGSNotificationChannel channel = new MRGSNotificationChannel("my_channel_id", "My Channel");
channel.setDescription("Description");
channel.setGroup("my_group_id");
channel.setSound("push_sound");
channel.enableLights(true);

notificationCenter.createNotificationChannel(context, channel);

// Create local push notification
final int time = MRGS.timeUnix() + 10;
MRGSPushNotification notification = MRGSPushNotification.create("Message number 1", 1, time);
notification.setGroupId(222);
notification.setGroupMessage("New resources arrived");
notification.setGroupTitle("Receive your resources");
notificationCenter.addLocalPush(notification);

MRGSRecommendations🔗

Обновите SDK🔗

Теперь SDK можно подключить через Maven репозиторий, для этого обновите ваш build.gradle файл

dependencies {
    def mrgsVersion = "5.0.0"

-   implementation(name:'MRGSRecommendations', ext:'aar')
+   implementation "games.my.mrgs:recsys:$mrgsVersion"
}

Обновите код🔗

Основные изменения:

  • Класс MRGSRecommendations перемещен из ru.mail.mrgservice в ru.mail.mrgservice.recsys.

  • Метод MRGSRecommendations#offerView(String, MRGSMap) удален. Используйте MRGSRecommendations#trackEvent(MRGSRecSysEvent)

  • Метод MRGSRecommendations#offerClick(String, MRGSMap) удален. Используйте MRGSRecommendations#trackEvent(MRGSRecSysEvent)
  • Метод MRGSRecommendations#offerBuy(String, MRGSMap) удален. Используйте MRGSRecommendations#trackEvent(MRGSRecSysEvent)

В следующем примере показано, как может выглядеть ваше приложение до и после внесения этих изменений:

До

import ru.mail.mrgservice.MRGSMap;
import ru.mail.mrgservice.MRGSRecommendations;

final MRGSRecommendations recSys = MRGSRecommendations.getInstance();
recSys.offerView("testOffer1", null);
recSys.offerClick("testOffer1", null);

final MRGSMap buyParams = new MRGSMap();
buyParams.put("sku", "ru.mail.mrgstestpurchase");
buyParams.put("gameOfferId", "offer123");
recSys.offerBuy("testOffer1", buyParams);

После

import ru.mail.mrgservice.recsys.MRGSRecSysEvent;
import ru.mail.mrgservice.recsys.MRGSRecSysEvents;
import ru.mail.mrgservice.recsys.MRGSRecommendations;

final MRGSRecommendations recSys = MRGSRecommendations.getInstance();
final MRGSRecSysEvent offerEvent = new MRGSRecSysEvents.OfferActionEvent("testOffer1", MRGSRecSysEvent.ACTION_TYPE_VIEW);
recSys.trackEvent(offerEvent);

final MRGSRecSysEvent offerClick = new MRGSRecSysEvents.OfferActionEvent("testOffer1", MRGSRecSysEvent.ACTION_TYPE_CLICK);
recSys.trackEvent(offerClick);

final MRGSRecSysEvent offerBuy = new MRGSRecSysEvents.OfferActionEvent("testOffer1", MRGSRecSysEvent.ACTION_TYPE_CLICK);
offerBuy.putParam("sku", "ru.mail.mrgstestpurchase");
offerBuy.putParam("gameOfferId", "offer123");
recSys.trackEvent(offerBuy);

MRGSShowcase🔗

Обновите SDK🔗

Теперь SDK можно подключить через Maven репозиторий, для этого обновите ваш build.gradle файл

dependencies {
    def mrgsVersion = "5.0.0"

-   implementation(name:'MRGSShowcase', ext:'aar')
+   implementation "games.my.mrgs:showcase:$mrgsVersion"
}

Обновите код🔗

Изменений нет.

MRGSSupport🔗

Обновите SDK🔗

Теперь SDK можно подключить через Maven репозиторий, для этого обновите ваш build.gradle файл

dependencies {
    def mrgsVersion = "5.0.0"

-   implementation(name:'MRGSSupport', ext:'aar')
+   implementation "games.my.mrgs:support:$mrgsVersion"
}

Обновите код🔗

Основные изменения:

  • Конструктор MRGSMyComSupportDialog(Activity, String) удален. Используйте MRGSMyComSupportDialog(Activity).
  • Конструктор MRGSMyComSupportDialog(Activity, String, boolean) удален. Используйте MRGSMyComSupportDialog(Activity).

В следующем примере показано, как может выглядеть ваше приложение до и после внесения этих изменений:

До

import ru.mail.mrgservice.MRGSMyComSupportDialog;

final MRGSMyComSupportDialog dialog = new MRGSMyComSupportDialog(activity,  "<SECRET>", true);
dialog.setCategory(<CATEGORY>);
dialog.setText(<TEXT>);
dialog.setListener(this);
dialog.show();

После

import ru.mail.mrgservice.MRGSMyComSupportDialog;

final MRGSMyComSupportDialog dialog = new MRGSMyComSupportDialog(activity);
dialog.setCategory(<CATEGORY>);
dialog.setText(<TEXT>);
dialog.setListener(this);
dialog.show();

4.1.x → 4.1.3🔗

В версии 4.1.3 полностью переработано API по работе с пользователями. Теперь нет необходимости регистрировать, а затем авторизовать пользователя. Достаточно вызывать метод setUserId. Однако для корректного подсчета статистики на стороне MyTracker, необходимо вызывать два метода - trackRegistrationEvent и trackLoginEvent у класса MRGSMyTracker. Подробности читайте в документации, в разделе Авторизация пользователя

4.0.x → 4.1🔗

Основное изменение - MRGService теперь зависит от библиотек серии androidx, вместо support-library

Отредактируйте свой build.gradle файл таким образом, чтоб удалить старые зависимости, такие как:

'com.google.android.gms:play-services-ads-identifier:16.0.0'
'com.android.support:support-v4:28.0.0'
'com.android.support:recyclerview-v7:28.0.0'
'com.android.support:appcompat-v7:28.0.0'
'com.android.support:support-vector-drawable:28.0.0'
'com.android.support:multidex:1.0.3'

и добавить новые

'androidx.appcompat:appcompat:1.1.0'
'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
'androidx.recyclerview:recyclerview:1.0.0'
'androidx.vectordrawable:vectordrawable:1.1.0'
'androidx.multidex:multidex:2.0.0'

В этой версии обновился firebase (который также теперь зависит от androidx). Удалите старые зависимости

'com.google.firebase:firebase-core:16.0.9'
'com.google.firebase:firebase-messaging:18.0.0'

добавьте новые:

'com.google.firebase:firebase-analytics:17.2.1'
'com.google.firebase:firebase-messaging:20.0.0'

Обновился MyTracker до версии 1.5.12. Замените

'com.my.tracker:mytracker-sdk:1.5.8'

на

'com.my.tracker:mytracker-sdk:1.5.12'

3.8.x → 4.0🔗

Основное изменение - теперь MRGService состоит из набора модулей (библиотеки aar). Основным модулем является MRGService.aar. Остальные же модули можно добавлять только при необходимости.

Если вы уже используете весь функционал MRGS, проще всего будет добавить все aar файлы из архива в ваш проект.

Удалите библиотеку MRGServiceDependencies.aar, если она у вас есть

Так как теперь MRGS распространяется только в виде aar файлов, первым делом необходимо удалить все что относится к MRGS из вашего AndroidManifest.xml файла

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="com.android.vending.BILLING"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<activity
    android:name="ru.mail.mrgservice.MRGSGoogleBillingActivity"
    android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
    android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
<activity
    android:name="ru.mail.mrgservice.MRGSCafebazaarBillingActivity"
    android:configChanges="keyboardHidden|orientation"
    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>
<activity
    android:name="ru.mail.mrgservice.MRGSSendFeedbackActivity"
    android:configChanges="keyboardHidden|orientation"
    android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"/>
<activity
    android:name="ru.mail.mrgservice.MRGSGCMActivity"
    android:configChanges="keyboardHidden|orientation"
    android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"/>
<activity
    android:name="ru.mail.mrgservice.MRGSMyComSupportUtilActivity"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>

<activity android:name="ru.mail.mrgservice.gc.GCActivity"
          android:configChanges="keyboardHidden|orientation|screenSize"
          android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"/>

<activity android:name="ru.mail.mrgservicetest.PermissionRationaleActivity"/>
<activity android:name="ru.mail.mrgservicetest.ShowSettingActivity"/>

<activity android:name="ru.mail.mrgservice.advertising.MRGSAdvertisingActivity"
          android:configChanges="keyboardHidden|orientation|screenSize"
          android:theme="@style/TranslucentTheme"
          />
<!--android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"-->
<activity android:name="ru.mail.mrgservice.advertising.MRGSAdvertisingSliderActivity"
          android:configChanges="keyboardHidden|orientation|screenSize"
          android:theme="@style/NotTranslucentTheme"
          />

<!-- MyTraget activity -->
<activity android:name="com.my.target.common.MyTargetActivity" />

<!-- Firebase push notification -->
<service
    android:name="ru.mail.mrgservice.MRGSFirebaseInstanceIdService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
    </intent-filter>
</service>

<service
    android:name="ru.mail.mrgservice.MRGSFCMIntentService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>
<!-- END: Firebase push notification -->

<!-- tracking users -->
<receiver
    android:name="ru.mail.mrgservice.MRGSBroadcastReceiver"
    android:exported="true">
    <intent-filter>
        <action android:name="com.android.vending.INSTALL_REFERRER"/>
    </intent-filter>
</receiver>

<service android:name="com.google.android.gms.analytics.CampaignTrackingService"/>
<service android:name="com.my.tracker.campaign.CampaignService"/>

<!-- Локальные пуши -->
<receiver android:name="ru.mail.mrgservice.MRGSLocalPushBroadcastReceiver"/>
<receiver android:name="ru.mail.mrgservice.MRGSNotificationDeleteReceiver"/>

<!-- Samsung billing !-->
<activity
    android:name="ru.mail.mrgservice.MRGSSamsungBillingActivity"
    android:configChanges="keyboardHidden|orientation"
    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>

<!-- Amazon In-App Purchases !-->
<receiver android:name = "com.amazon.device.iap.ResponseReceiver" >
    <intent-filter>
        <action android:name = "com.amazon.inapp.purchasing.NOTIFY"/>
    </intent-filter>
</receiver>

MyTracker🔗

метод MRGService.instance().getMyTracker() удален, используйте

MRGSMyTracker.getInstance()

Работа с нотификациями🔗

Для подписки на события от серверных push-нотификаций необходимо заменить вызов

MRGService.instance().initPushEx(notifyDelegate); или MRGService.instance().initPush(notifyDelegate);

на

MRGSPushNotifications.getInstance().initPushNotifications(notifyDelegate);

Аналитика🔗

  • Класс MRGSGoogleAnalytics удален.
  • Класс MRGSChartboost удален.
  • Класс MRGSFlurry удален.
  • Класс MRGSSendFeedbackActivity удален.
  • Метод sendGASocEvent из класса MRGService удален.
  • Метод sendGATimings из класса MRGService удален.

  • Добавлен класс MRGSAnalytics. Для добавления кастомных событий в сторонние Sdk используйте этот класс

  • Из класса MRGService убран метод sendAFEvent для отправки события в AppsFlyer, используйте вместо него

MRGSAnalytics.getInstance().getAppsFlyer().sendEvent

Обратите внимание, что аргументы метода sendEvent также изменились. Раньше метод принимал два String параметра - name, value. Теперь метод принимает String name, а value имеет тип java.util.Map. Пример использования

MRGSMap params = new MRGSMap();
params.put("param1", button.getText().toString());
MRGSAnalytics.getInstance().getAppsFlyer().sendEvent("press_button", params);

Также вы можете вызывать метод

MRGSAnalytics.getInstance().sendEvent()

И тогда событие будет подключено во все сторонние аналитические Sdk (на данный момент только AppsFlyer, в ближайшее время будет Firebase)

Банк (Billing)🔗

Метод isBillingAvailable у класса MRGSBilling теперь не статический. Для его вызова необходимо вызвать

MRGSBilling.instance().isBillingAvailable()

Метод getBillingName у класса MRGSBilling теперь не статический. Для его вызова необходимо вызывать

MRGSBilling.instance().getBillingName()

Метод sendPaymentInfo убран. Теперь необходимо использовать метод MRGSMetrics.addPurchase. Обратите внимание, что метод addPurchase принимает 3 параметра! Подробное описание этих параметров приведено в документации Установка библиотеки MRGS для Android

Пилигрим🔗

Из класса MRGService убраны методы createMRGSAdvertising и getMRGSAdvertising. Они перенесены в класс MRGSAdvertisingFactory

MRGSAdvertisingFactory.createMRGSAdvertising()
MRGSAdvertisingFactory.getMRGSAdvertising()

GameCenter🔗

Удалите библиотеку MRGServicePlayCenter.aar и добавьте MRGSGameCenter.aar. Из класса MRGService убран метод getGameCenter, теперь необходимо обращаться к классу MRGSGameCenter через метод getInstance

MRGSGameCenter.getInstance()

3.6.5 → 3.7🔗

В этой версии произошли изменения в клиентской части, связанные с получением PUSH-уведомлений.

  1. Удалить библиотеку gcm.jar и вместо нее подключить Google Play Services, если они еще не были подключены (исходники лежат в архиве MRGS);
  2. Обновить android-support-v4.jar (также находится в архиве);
  3. Переименовать ресивер ru.mail.mrgservice.MRGSGCMBroadcastReceiver в com.google.android.gms.gcm.GcmReceiver и добавить атрибут android:exported="true"
  4. У сервиса ru.mail.mrgservice.MRGSGCMIntentService добавить атрибут android:exported="false", а также добавить intent-filter:
<intent-filter>
    <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
</intent-filter>
  1. Добавить сервис:
<service
        android:name="ru.mail.mrgservice.MRGSInstanceIDListenerService"
        android:exported="false">
    <intent-filter>
        <action android:name="com.google.android.gms.iid.InstanceID"/>
    </intent-filter>
</service>
  1. Убедится, что в теге

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

стоит версия 7571000. В идеале, если Google Play Services подключен вместе с исходным кодом и, соответственно, ресурсами, то можно вместо ручного изменения номера версии просто оставить @integer/google_play_services_version (как в примере выше). 7. Раздел Permissions остается без изменений

В итоге AndroidManifest.xml должен выглядеть следующим образом:

...
<!-- push notification -->
<receiver
        android:name="com.google.android.gms.gcm.GcmReceiver"
        android:exported="true"
        android:permission="com.google.android.c2dm.permission.SEND" >
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <action android:name="com.google.android.c2dm.intent.REGISTRATION"/>

        <category android:name="ru.mail.mrgservicetest"/>
    </intent-filter>
</receiver>

<service
        android:name="ru.mail.mrgservice.MRGSGCMIntentService"
        android:exported="false">
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
    </intent-filter>
</service>

<service
        android:name="ru.mail.mrgservice.MRGSInstanceIDListenerService"
        android:exported="false">
    <intent-filter>
        <action android:name="com.google.android.gms.iid.InstanceID"/>
    </intent-filter>
</service>
<!-- END: push notification -->
...

Для проверки валидности AndroidManifest.xml используйте утилиту mrgsmanifest, которая идет в архиве с MRGService.


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