Login with Amazon🔗

Login with Amazon облегчает пользователям вход в ваши приложения и веб-сайты. Вход с помощью Amazon позволяет защитить информацию о ваших клиентах, используя систему аутентификации пользователей, используемую Amazon.com. Вход через Amazon основан на OAuth 2.0, который широко применяется для авторизованного обмена пользователями между сайтами.
Важно
Заметьте, что данный подмодуль зависит от нативного sdk Amazon, и полностью с ним совместим. То есть если у вас сейчас идет работа с нативным sdk, то при переходе на MRGS, мы автоматически подтянем сохраненные сессии.
Предварительная настройка🔗
Получение ключей и необходимых данных🔗
Перед началом работы, необходимо настроить аккаунт разработчика на сайте Amazon, и получить API key для приложения. Инструкцию по регистрации проекта и получения необходимых ключей можно найти на сайте Amazon:
Заметьте
На данном шаге нужно только получить API Key. Как его использовать в проекте описано ниже.
Настройка проекта🔗
Для того, чтобы авторизация работала корректно, необходимо добавить некоторые изменения в проект:
Для Unity
Для iOS вам необходимо добавить в Info.plist приложения следующие данные:
- API Key, полученный на предыдущем шаге, в поле с ключом "APIKey"
- Новую URL-схему для открытия приложения извне вида
amzn-<YOUR_BUNDLE_ID>
Новую схему открытия приложения нужно добавить, чтобы браузер мог вернуть пользователя обратно в ваше приложение. URL-схема должна представлять из себя строку вида amzn-<YOUR_BUNDLE_ID>, где YOUR_BUNDLE_ID - это ваш уникальный идентификатор приложения (например, если bundle_id - games.my.MRGServiceExample, то добавляемая схема должна иметь вид: amzn-games.my.MRGServiceExample). Подробно про добавление URL-схем в сгенерированном проекте написано в данной статье, но в Unity есть более простой метод добавления данных в plist приложения, описанный ниже.
Для этого добавьте код в Unity post build process:
[PostProcessBuild]
public static void PostProcessBuild(BuildTarget target, string path)
{
string plistPath = path + "/Info.plist";
PlistDocument plist = new PlistDocument();
plist.ReadFromString(File.ReadAllText(plistPath));
PlistElementDict rootDict = plist.root;
// Второй параметр - ваш API Key, полученный на предыдущем шаге
rootDict.SetString("APIKey", "<YOUR_API_KEY>");
// Добавление URL-схемы
PlistElementArray appSchemes = rootDict.CreateArray("CFBundleURLTypes");
PlistElementDict appSchemesDict = appSchemes.AddDict();
appSchemesDict.SetString("CFBundleURLName", "");
PlistElementArray appSchemesArray = appSchemesDict.CreateArray("CFBundleURLSchemes");
appSchemesArray.AddString("amzn-<YOUR_BUNDLE_ID>"); // Где YOUR_BUNDLE_ID - это ваш уникальный идентификатор приложения (например games.my.mrgs.MRGServiceExample)
File.WriteAllText(plistPath, plist.WriteToString());
}
Или измените уже существующий код добавления свойств в Info.plist приложения, если он у вас есть.
Для Android:
Необходимо полученный API Key сохранить в файл api_key.txt (название важно) и поместить его в директорию с ассетами андроид. Обычно это директория Assets/Plugins/Android/assets. При компиляции этот файл автоматически попадет в директорию assets внутри apk файла.
Для iOS
Вам необходимо добавить в Info.plist вашего приложения следующие данные:
- API Key, полученный на предыдущем шаге, в поле с ключом "APIKey"
- Новую URL-схему для открытия приложения извне вида
amzn-<YOUR_BUNDLE_ID>
Новую схему открытия приложения нужно добавить, чтобы браузер мог вернуть пользователя обратно в ваше приложение. URL-схема должна представлять из себя строку вида amzn-<YOUR_BUNDLE_ID>, где YOUR_BUNDLE_ID - это ваш уникальный идентификатор приложения (например, если bundle_id - games.my.MRGServiceExample, то добавляемая схема должна иметь вид: amzn-games.my.MRGServiceExample). Подробно про добавление URL-схем в сгенерированном проекте написано в данной статье.
С помощью UI:
Для добавления API Key необходимо:
- Зайдите в Info.plist вашего приложения
- Добавьте новую строку с названием «APIKey» и типом данных string
- Добавьте в созданную строку в виде значения ваш API Key, полученный на предыдущем шаге
Для добавления URL-схемы необходимо:
- Зайдите в Info.plist вашего приложения
- Добавьте строку «URL types»
- Разверните первый элемент («Item0»), добавьте строку «URL identifier» и добавьте значение с идентификатором своего приложения (например, com.company.appname).
- Добавьте строку в первый элемент («item0») в «URL types» и назовите его «URL Schemes» и добавьте новый элемент (нужную URL-схему) в «URL Schemes»
В итоге получится такая структура:

В виде XML:
Добавьте в ваш Info.plist следующие данные:
<key>APIKey</key>
<string>YOUR_API_KEY</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>amzn-<YOUR_BUNDLE_ID></string>
</array>
</dict>
</array>
Note: для URL-схем, если у вас уже есть такая структура в plist'е с другими схемами, то можно просто добавить еще один элемент в массив схем (CFBundleURLSchemes)
Для Android
В проекте:
Необходимо полученный API Key сохранить в файл api_key.txt (название важно) и поместить его в директорию с ассетами. Обычно это директория app/src/main/assets. При компиляции этот файл автоматически попадет в директорию assets внутри apk файла.
Добавление зависимостей🔗
Далее необходимо добавить в проект MRGS SDK и нативное Amazon SDK:
Unity:
Добавление в проект (общая инструкция)
Шаг 1. Добавьте источники
Для того, чтобы добавить MRGS в проект через Unity Package Manager (доступно с Unity 2018+) просто добавьте в файл Packages/manifest.json раздел scopedRegistries, добавив в него следующую запись:
{
"dependencies": {
...
},
"scopedRegistries": [
{
"name": "MRGS",
"url": "https://mrgs-nexus.my.games/repository/mrgs-uninty-plugins/",
"scopes": [
"games.my.mrgs"
]
}
]
}
Альтернативно, можно нажать Edit -> Project Settings -> Package Manager -> '+' in scoped registry section, и заполнить поля в соответствии с данными выше.
Шаг 2. Добавьте зависимость
- Нажмите
Window -> Package Manager -> select 'Packages: MyRegistries' from dropdown list, выберите пакетMRGSAuthenticationAmazonиз списка, затем нажмите "Install" - Импортируйте модуль:
using MRGS;
- Загрузите последнюю версию библиотеки. Распакуйте архив.
- (Для интеграции unitypackage) В Unity нажмите
Assets -> Import Package -> Custom Package, и выберите пакетgames.my.mrgs.authenticationamazon.unitypackageиз скачанного архива. - (Для интеграции tgz) В Unity нажмите
Window -> Package Manager -> '+' -> Add package from tarball, и выберите пакетgames.my.mrgs.authenticationamazon-<version>.tgzиз скачанного архива. - Импортируйте модуль:
using MRGS;
iOS:
Добавление в проект (общая инструкция)
В iOS, при интеграции вручную, необходимо стандартными средствами добавить в проект LoginWithAmazon.framework, которые лежат в папке - Dependencies/MRGSAuthenticationDependencies/Amazon в скачанном с сайта MRGS архиве. Инструкции по добавлению 3d-party библиотек в проект можно найти в интернете.
Шаг 1. Добавьте зависимости
Через Package collection
- В Xcode выберите File > Add Packages
- Выберите «+» > "Add Swift Package Collection"
- Вставьте URL:
https://mrgs-nexus.my.games/repository/ios-sdks/MRGSPackageCollection.json - Выберите модуль MRGSAuthenticationAmazon из "MRGS Package Collection".
- Или вы можете выбрать пакет «MRGS» из "MRGS Package Collection" (содержит все модули mrgs в качестве продуктов), а затем выбрать только продукт "MRGS/AuthenticationAmazon".
Отдельными пакетами
- В Xcode выберите File > Add Packages
- В строке поиска в правом верхнем углу вставьте URL:
https://mrgs-gitea.my.games/mrgs/mrgsauthenticationamazon-ios-sdk.git - Добавьте модуль в свой проект
- Или вы можете вставить URL
https://mrgs-gitea.my.games/mrgs/ios-sdks.git, чтобы подключить пакет "MRGS", который содержит все модули mrgs в качестве продуктов, а затем выбрать только продукт "MRGS/AuthenticationAmazon".
Шаг 2. Добавьте поддержку категорий ObjectiveC
- В настройках проекта установите флаг
-ObjCв поле "Other linker Flags". - Импортируйте модуль в коде:
@import MRGServiceKit;или@import MRGSAuthenticationAmazon;или#import <MRGSAuthenticationAmazon/MRGSAuthenticationAmazon.h>
Шаг 1. Добавьте источники
В вашем podfile добавьте источники в начало файла:
source 'https://github.com/CocoaPods/Specs.git' # For main repo
source 'https://mrgs-gitea.my.games/mrgs/cocoapods-specs.git' # For MRGS repo
Шаг 2. Добавьте зависимости
В target добавьте последнюю версию MRGSAuthenticationAmazon:
Чтобы добавить через subspecs:
Для добавления через отдельные модули:
Чтобы добавить все модули mrgs:
Шаг 3. Установите зависимости
- Выполните
pod install(илиpod install --repo-updateесли необходимо) - Импортируйте модуль в коде:
@import MRGServiceKit;или@import MRGSAuthenticationAmazon;или#import <MRGSAuthenticationAmazon/MRGSAuthenticationAmazon.h>
Шаг 1. Добавьте зависимости
Добавьте зависимость в ваш Cartfile:
binary "https://mrgs-nexus.my.games/repository/ios-sdks/MRGSAuthenticationAmazon/MRGSAuthenticationAmazon.json" ~> 5.0.0
Шаг 2. Установите зависимости
- Выполните
carthage update --use-xcframeworks - Добавьте загруженные фреймворки в свой проект (убедитесь, что опция "do not embed" включена)
- В настройках проекта установите флаг
-ObjCв поле "Other linker Flags". - Импортируйте модуль в коде:
@import MRGServiceKit;или@import MRGSAuthenticationAmazon;или#import <MRGSAuthenticationAmazon/MRGSAuthenticationAmazon.h>
- Загрузите последнюю версию библиотеки. Распакуйте архив.
-
Добавьте
MRGSAuthenticationAmazon.xcframeworkиз скачанного архива в ваш проект (Перетащите библиотеки в раздел "Linked frameworks and Libraries") (для совместимости в архиве также находится MRGSAuthenticationAmazon.framework - fat framework старого вида) -
В настройках проекта установите флаг
-ObjCв поле "Other linker Flags". - Импортируйте модуль в коде:
@import MRGSAuthenticationAmazon;или#import <MRGSAuthenticationAmazon/MRGSAuthenticationAmazon.h> - Также, вы можете добавить из архива файлы
MRGServiceKit.hиmodule.modulemapв свой проект, либо в настройках проекта укажите путь до них в разделеBuild Settings -> Header search paths. Теперь вместо импорта каждого из наших фреймворков по отдельности, вы можете импортировать только один заголовочный файл:@import MRGServiceKit;
Android:
Добавление в проект
Добавьте зависимость в build.gradle файл:
Скопируйте файлы MRGSAuthentication.aar и MRGSAuthenticationAmazon.aar в директорию libs вашего проекта. Добавьте необходимые зависимости в файл build.gradle
Добавление кнопки🔗
Затем, необходимо добавить на экран входа кнопку 'Login with amazon', в соответствии с Amazon button guidelines.
Работа с MRGSAuthentication интерфейсом🔗
Для работы с Login with Amazon воспользуйтесь классом MRGSAuthenticationAmazon. Обращаем внимание, что данный класс реализует основной интерфейс MRGSAuthentication, то есть имеет все методы этого интерфейса. Далее описана стандартная реализация интерфейса MRGSAuthentication:
Делегат🔗
Перед началом работы с API, необходимо установить и реализовать делегат, принимающий обратные вызовы:
// Setting
// 'this' conforms to 'IMRGSAuthenticationDelegate' protocol
MRGSAuthenticationAmazon.Instance.Delegate = this;
// Implementation
// The method that is called when the user has logged out of the social network remotely, or his session has ended.
public void OnAuthenticationProviderDidLogoutUser(MRGSAuthentication provider, MRGSAuthenticationUser user){
Debug.Log("MRGSAuthentication<Unity> - OnAuthenticationProviderDidLogoutUser: " + user + "\nNetwork: " + provider.SocialId().ToString());
}
// Установка
[MRGSAuthenticationAmazon sharedInstance].delegate = self;
//Реализация
// Метод, который вызывается, когда пользователь удаленно вышел из социальной сети, или его сессия закончилась.
- (void)authenticationProvider:(id<MRGSAuthentication>)provider didLogoutUser:(MRGSAuthenticationUser *)user{
NSLog(@"User did logout: \n%@", user);
}
// Метод, который вызывается в случае необходимости отображения контроллера для авторизации пользователя.
- (void)shouldPresentAuthorizationController:(UIViewController *)viewController {
UIViewController *rootVC = [UIApplication sharedApplication].keyWindow.rootViewController;
[rootVC presentViewController:viewController animated:YES completion:nil];
}
import androidx.annotation.NonNull;
import games.my.mrgs.authentication.MRGSAuthentication;
import games.my.mrgs.authentication.amazon.MRGSAmazon;
// Set a listener
MRGSAmazon.getInstance().setOnExternalLogoutListener(new MRGSAuthentication.OnExternalLogoutListener() {
@Override
public void onUserLogout(@NonNull String socialId) {
// Handel result.
}
});
Статус🔗
Затем, необходимо проверить статус авторизации (залогинен ли пользователь):
Вход🔗
Для обычного входа воспользуйтесь одним из методов:
// If error occured, error object will be non-null
MRGSAuthenticationAmazon.Instance.Login((MRGSError error) => {
if (error == null) {
// Auth success
}
});
// The response will include an object describing the user and the token, and an error object, if any.
MRGSAuthenticationAmazon.Instance.Login((MRGSAuthenticationCredential credentials, MRGSError error) => {
Debug.Log("MRGSAuthenticationAmazon:\nCredentials: " + credentials + "\nError:\n" + error);
if (error == null) {
// Auth success
}
});
// В ответе придет только объект ошибки, если она случилась
[[MRGSAuthenticationAmazon sharedInstance] login:^(NSError *error) {
if (!error) {
// Auth success
}
}];
// В ответе придет объект, описывающий пользователя и токен, и объект ошибки, если она случилась
[[MRGSAuthenticationAmazon sharedInstance] loginWithCompletionHandler:^(MRGSAuthenticationCredential *credentials, NSError *error) {
NSLog(@"Result - %@. Error - %@", credentials, error);
if (!error) {
// Auth success
}
}];
import android.app.Activity;
import androidx.annotation.NonNull;
import games.my.mrgs.MRGSError;
import games.my.mrgs.authentication.MRGSCredentials;
import games.my.mrgs.authentication.MRGSLoginCallback;
import games.my.mrgs.authentication.amazon.MRGSAmazon;
MRGSAmazon.getInstance().login(activity, new MRGSLoginCallback() {
@Override
public void onSuccess(@NonNull MRGSCredentials credentials) {
// Handle result.
}
@Override
public void onError(@NonNull MRGSError error) {
// Handle error.
}
});
Вход с доп. разрешениями🔗
Также у пользователя можно запросить дополнительные данные:
- Profile - Имя и email пользователя
- Postal code - Почтовый индекс
Описание enum'a:
Для этого воспользуйтесь методом ниже, передав в него массив дополнительных разрешений, которые Вы хотите получить:
var scopes = new List<string>();
scopes.Add(MRGSAuthenticationAmazon.Scopes.Profile);
scopes.Add(MRGSAuthenticationAmazon.Scopes.PostalCode);
MRGSAuthenticationAmazon.Instance.Login(scopes, (MRGSAuthenticationCredential credentials, MRGSError error) => {
Debug.Log("MRGSAuthenticationAmazon:\nCredentials: " + credentials + "\nError:\n" + error);
if (error == null) {
// Auth success
}
});
import android.app.Activity;
import androidx.annotation.NonNull;
import java.util.Arrays;
import games.my.mrgs.MRGSError;
import games.my.mrgs.authentication.MRGSCredentials;
import games.my.mrgs.authentication.MRGSLoginCallback;
import games.my.mrgs.authentication.amazon.MRGSAmazon;
MRGSAmazon.getInstance().login(activity, Arrays.asList("profile", "postal_code"), new MRGSLoginCallback() {
@Override
public void onSuccess(@NonNull MRGSCredentials credentials) {
// Handle result
}
@Override
public void onError(@NonNull MRGSError error) {
// Handle error.
}
});
Статус авторизации🔗
Чтобы получить всю информацию о текущем состоянии авторизации, информацию пользователя, статусе авторизации, воспользуйтесь методами:
// The information about the user, identifier, name, email, etc.
MRGSAuthenticationAmazon.Instance.GetCurrentUser((MRGSAuthenticationUser user, MRGSError error) => {
Debug.Log("MRGSAuthenticationAmazon:\User: " + user + "\nError:\n" + error);
if (error == null) {
// Work with user data
}
});
// Information about the token, lifetime, etc.
MRGSAuthenticationAmazon.Instance.GetAccessToken((MRGSAuthenticationAccessToken token, MRGSError error) => {
Debug.Log("MRGSAuthenticationAmazon:\Token: " + token + "\nError:\n" + error);
if (error == null) {
// Work with token info
}
else if (error.Code == (int)MRGSAuthenticationErrorCode.ConnectionFailed)
{
// No network, try later
}
else
{
// Logout user from app (MRGS will logout automatically in SDK)
}
});
// Возвращается объект, объединяющий в себе информацию о пользователе(идентификатор, имя, email, и др) и о токене.
[[MRGSAuthenticationAmazon sharedInstance] getCredentials:^(MRGSAuthenticationCredential *credentials, NSError *error) {
NSLog(@"Result - %@. Error - %@", credentials, error);
if(!error){
// Credentials data work
}
}];
// Возвращается отдельно информация о пользователе, идентификатор, имя, email, и др.
[[MRGSAuthenticationAmazon sharedInstance] getCurrentUser:^(MRGSAuthenticationUser *user, NSError *error) {
NSLog(@"User - %@. Error - %@", user, error);
if(!error){
// User data work
}
}];
// Возвращается отдельно информация о токене, времени жизни и др.
[[MRGSAuthenticationAmazon sharedInstance] getAccessToken:^(MRGSAuthenticationAccessToken *token, NSError *error) {
if (!error) {
NSLog(@"getAccessToken result - %@", token);
} else {
NSLog(@"getAccessToken error - %@", error);
}
}];
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import games.my.mrgs.MRGSError;
import games.my.mrgs.authentication.MRGSAccessToken;
import games.my.mrgs.authentication.MRGSAuthentication;
import games.my.mrgs.authentication.MRGSUser;
import games.my.mrgs.authentication.amazon.MRGSAmazon;
import games.my.mrgs.utils.optional.BiConsumer;
// Returns user's information.
MRGSAmazon.getInstance().getCurrentUser(new MRGSAuthentication.UserCallback() {
@Override
public void onSuccess(@NonNull final MRGSUser user) {
}
@Override
public void onError(@NonNull MRGSError error) {
}
});
// Returns authentication's information.
MRGSAmazon.getInstance().getAccessToken(new BiConsumer<MRGSAccessToken, MRGSError>() {
@Override
public void accept(@Nullable MRGSAccessToken accessToken, @Nullable MRGSError error) {
if (error != null) {
Log.d("MRGSAuthentication", "AccessToken error: " + error.getErrorText());
} else {
Log.d("MRGSAuthentication", "AccessToken success: " + accessToken);
}
}
});
Выход🔗
Для того, чтобы "выйти" из аккаунта пользователя, воспользуйтесь методом:
Дополнительно🔗
Учтите, что если вы запросили дополнительные разрешения у пользователя на доступ к дополнительным полям его профиля, мы запросим их автоматически, и данные появятся либо в соответствующих полях объекта класса MRGSAuthenticationUser, или в поле optionalParams у этого объекта.
Дата создания: 2020-05-28