Sign in with Apple🔗

Sign in with Apple облегчает пользователям вход в ваши приложения и веб-сайты с использованием их Apple ID. Вместо того чтобы заполнять формы, проверять адреса электронной почты и выбирать новые пароли, они могут использовать Вход в Apple, чтобы создать учетную запись и сразу начать использовать ваше приложение. Для обеспечения максимальной безопасности все учетные записи защищены двухфакторной аутентификацией, и Apple не будет отслеживать активность пользователей в вашем приложении или на веб-сайте.
Sign in with Apple обязателен для внедрения
Согласно Apple App store guidelines, в случаях, если у Вас в проекте есть возможность авторизации через любой сторонний сервис (например, Facebook), то Sign in with Apple должен быть обязательно интегрирован в Ваше приложение.
Чтобы использовать Sign in with Apple, пользователи должны:
- Иметь iOS 13 и выше.
- Иметь Apple ID с включенной двухфакторной аутентификацией (2FA).
- Войти в iCloud на устройстве.
Подробнее смотрите на официальном сайте Apple
Предварительная настройка🔗
Перед началом работы, Вам необходимо настроить сертификаты и ключи в своей учетной записи Apple Developer, чтобы активировать функционал Sign in with Apple. Добавьте Sign in with Apple для своего приложения на странице Certificates, Identifiers & Profiles в личном кабинете разработчика.
Если вы хотите отправлять сообщения электронной почты пользователям
Если вы хотите отправлять сообщения электронной почты пользователям, которые при входе скрыли свой email через службу ретрансляции Apple, вам необходимо зарегистрировать свои исходящие почтовые домены, субдомены или адреса электронной почты. Подробнее читайте на официальном сайте
Также, в XCode проекте во вкладке 'Signing & Capabilities' необходимо добавить Sign in with Apple, для этого:
В Unity
Добавьте код в Unity post build process:
public class PostBuildProcessSample
{
[PostProcessBuild]
public static void PostProcessBuild(BuildTarget target, string path)
{
if (target == BuildTarget.iOS)
{
#if UNITY_IOS
string projPath = PBXProject.GetPBXProjectPath(path);
PBXProject proj = new PBXProject();
proj.ReadFromString(File.ReadAllText(projPath));
#if UNITY_2019_3_OR_NEWER
string projectTarget = proj.GetUnityMainTargetGuid();
#else
string targetName = PBXProject.GetUnityTargetName();
string projectTarget = proj.TargetGuidByName(targetName);
#endif
//Adding capabilities
#if UNITY_2019_3_OR_NEWER
ProjectCapabilityManager projectManager = new ProjectCapabilityManager(projPath, "ios.entitlements", targetGuid: projectTarget);
#else
ProjectCapabilityManager projectManager = new ProjectCapabilityManager(projPath, "ios.entitlements", targetName);
#endif
projectManager.AddSignInWithApple();
projectManager.WriteToFile();
#endif
}
}
}
Или вручную включите его в уже сгенерированном проекте:

В iOS
В проекте XCode:

Добавление зависимостей🔗
Далее необходимо добавить в проект MRGS SDK:
Unity:
Добавление в проект (общая инструкция)
Шаг 1. Добавьте источники
Для того, чтобы добавить MRGS в проект через Unity Package Manager (доступно с Unity 2018+) просто добавьте в файл Packages/manifest.json раздел scopedRegistries, добавив в него следующую запись:
{
"dependencies": {
...
},
"scopedRegistries": [
{
"name": "MRGS",
"url": "https://mrgs-nexus.my.games/repository/mrgs-uninty-plugins/",
"scopes": [
"games.my.mrgs"
]
}
]
}
Альтернативно, можно нажать Edit -> Project Settings -> Package Manager -> '+' in scoped registry section, и заполнить поля в соответствии с данными выше.
Шаг 2. Добавьте зависимость
- Нажмите
Window -> Package Manager -> select 'Packages: MyRegistries' from dropdown list, выберите пакетMRGSAuthenticationиз списка, затем нажмите "Install" - Импортируйте модуль:
using MRGS;
- Загрузите последнюю версию библиотеки. Распакуйте архив.
- (Для интеграции unitypackage) В Unity нажмите
Assets -> Import Package -> Custom Package, и выберите пакетgames.my.mrgs.authentication.unitypackageиз скачанного архива. - (Для интеграции tgz) В Unity нажмите
Window -> Package Manager -> '+' -> Add package from tarball, и выберите пакетgames.my.mrgs.authentication-<version>.tgzиз скачанного архива. - Импортируйте модуль:
using MRGS;
iOS:
Добавление в проект (общая инструкция)
Шаг 1. Добавьте зависимости
Через Package collection
- В Xcode выберите File > Add Packages
- Выберите «+» > "Add Swift Package Collection"
- Вставьте URL:
https://mrgs-nexus.my.games/repository/ios-sdks/MRGSPackageCollection.json - Выберите модуль MRGSAuthentication из "MRGS Package Collection".
- Или вы можете выбрать пакет «MRGS» из "MRGS Package Collection" (содержит все модули mrgs в качестве продуктов), а затем выбрать только продукт "MRGS/Authentication".
Отдельными пакетами
- В Xcode выберите File > Add Packages
- В строке поиска в правом верхнем углу вставьте URL:
https://mrgs-gitea.my.games/mrgs/mrgsauthentication-ios-sdk.git - Добавьте модуль в свой проект
- Или вы можете вставить URL
https://mrgs-gitea.my.games/mrgs/ios-sdks.git, чтобы подключить пакет "MRGS", который содержит все модули mrgs в качестве продуктов, а затем выбрать только продукт "MRGS/Authentication".
Шаг 2. Добавьте поддержку категорий ObjectiveC
- В настройках проекта установите флаг
-ObjCв поле "Other linker Flags". - Импортируйте модуль в коде:
@import MRGServiceKit;или@import MRGSAuthentication;или#import <MRGSAuthentication/MRGSAuthentication.h>
Шаг 1. Добавьте источники
В вашем podfile добавьте источники в начало файла:
source 'https://github.com/CocoaPods/Specs.git' # For main repo
source 'https://mrgs-gitea.my.games/mrgs/cocoapods-specs.git' # For MRGS repo
Шаг 2. Добавьте зависимости
В target добавьте последнюю версию MRGSAuthentication:
Чтобы добавить через subspecs:
Для добавления через отдельные модули:
Чтобы добавить все модули mrgs:
Шаг 3. Установите зависимости
- Выполните
pod install(илиpod install --repo-updateесли необходимо) - Импортируйте модуль в коде:
@import MRGServiceKit;или@import MRGSAuthentication;или#import <MRGSAuthentication/MRGSAuthentication.h>
Шаг 1. Добавьте зависимости
Добавьте зависимость в ваш Cartfile:
binary "https://mrgs-nexus.my.games/repository/ios-sdks/MRGSAuthentication/MRGSAuthentication.json" ~> 5.0.0
Шаг 2. Установите зависимости
- Выполните
carthage update --use-xcframeworks - Добавьте загруженные фреймворки в свой проект (убедитесь, что опция "do not embed" включена)
- В настройках проекта установите флаг
-ObjCв поле "Other linker Flags". - Импортируйте модуль в коде:
@import MRGServiceKit;или@import MRGSAuthentication;или#import <MRGSAuthentication/MRGSAuthentication.h>
- Загрузите последнюю версию библиотеки. Распакуйте архив.
-
Добавьте
MRGSAuthentication.xcframeworkиз скачанного архива в ваш проект (Перетащите библиотеки в раздел "Linked frameworks and Libraries") (для совместимости в архиве также находится MRGSAuthentication.framework - fat framework старого вида) -
В настройках проекта установите флаг
-ObjCв поле "Other linker Flags". - Импортируйте модуль в коде:
@import MRGSAuthentication;или#import <MRGSAuthentication/MRGSAuthentication.h> - Также, вы можете добавить из архива файлы
MRGServiceKit.hиmodule.modulemapв свой проект, либо в настройках проекта укажите путь до них в разделеBuild Settings -> Header search paths. Теперь вместо импорта каждого из наших фреймворков по отдельности, вы можете импортировать только один заголовочный файл:@import MRGServiceKit;
Добавление кнопки🔗
Затем, Вам необходимо добавить на экран входа кнопку 'Sigh in with Apple', в соответствии с Human interface guidelines.
Пример добавления нативного объекта кнопки (только для iOS)
Пример добавления нативного объекта кнопки:
ASAuthorizationAppleIDButton *appleIDButton = [ASAuthorizationAppleIDButton new];
appleIDButton.frame = CGRectMake(.0, .0, 200, 100.0);
appleIDButton.cornerRadius = 10;
[self.view addSubview:appleIDButton];
[appleIDButton addTarget:self action:@selector(handleAuthrization:) forControlEvents:UIControlEventTouchUpInside];
Обратите внимание, что Sign in With Apple работает только на iOS 13 и выше, так что перед показом кнопки, необходимо проверить, доступен ли данный функционал на устройстве:
Работа с MRGSAuthentication интерфейсом🔗
Для работы с Sign in with Apple воспользуйтесь классом MRGSAuthenticationSignInWithApple. Обращаем внимание, что данный класс реализует наш основной протокол MRGSAuthentication, то есть имеет все методы этого протокола. Далее описана стандартная реализация интерфейса MRGSAuthentication:
Делегат🔗
Перед началом работы с API, необходимо установить и реализовать делегат, принимающий обратные вызовы:
// Setting
// 'this' conforms to 'IMRGSAuthenticationDelegate' protocol
MRGSAuthenticationSignInWithApple.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());
}
// Установка
[MRGSAuthenticationSignInWithApple 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];
}
Статус🔗
Затем, необходимо проверить статус авторизации (залогинен ли пользователь):
Вход🔗
Для обычного входа воспользуйтесь одним из методов:
// If error occured, error object will be non-null
MRGSAuthenticationSignInWithApple.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.
MRGSAuthenticationSignInWithApple.Instance.Login((MRGSAuthenticationCredential credentials, MRGSError error) => {
Debug.Log("MRGSAuthenticationSignInWithApple:\nCredentials: " + credentials + "\nError:\n" + error);
if (error == null) {
// Auth success
}
});
// В ответе придет только объект ошибки, если она случилась
[[MRGSAuthenticationSignInWithApple sharedInstance] login:^(NSError *error) {
if (!error) {
// Auth success
}
}];
// В ответе придет объект, описывающий пользователя и токен, и объект ошибки, если она случилась
[[MRGSAuthenticationSignInWithApple sharedInstance] loginWithCompletionHandler:^(MRGSAuthenticationCredential *credentials, NSError *error) {
NSLog(@"Result - %@. Error - %@", credentials, error);
if (!error) {
// Auth success
}
}];
Вход с доп. разрешениями🔗
Также у пользователя можно запросить дополнительные данные:
- Имя
Описание enum'a:
Для этого воспользуйтесь методом ниже, передав в него массив дополнительных разрешений, которые Вы хотите получить:
var scopes = new List<string>();
scopes.Add(MRGSAuthenticationSignInWithApple.Scopes.Email);
scopes.Add(MRGSAuthenticationSignInWithApple.Scopes.FullName);
MRGSAuthenticationSignInWithApple.Instance.Login(scopes, (MRGSAuthenticationCredential credentials, MRGSError error) => {
Debug.Log("MRGSAuthenticationSignInWithApple:\nCredentials: " + credentials + "\nError:\n" + error);
if (error == null) {
// Auth success
}
});
Важно
Поскольку у Sign in with Apple нет метода "выхода", а разрешения нельзя перезапросить пока пользователь не вышел из аккаунта (на момент написания документации механизм таков), то примите во внимание, что лучше сразу запрашивать те данные, которые вам нужны, иначе потом при обновлении у вас не получится дозапросить их.
Валидация полученных данных
После входа через Sign in with Apple приложение получает identityToken (хранится в MRGSAuthenticationAccessToken.AccessToken) и authorizationCode (хранится в MRGSAuthenticationAccessToken.TokenSecret), с помощью токена можно проверить полученные данные(действует 600 секунд), а с помощью кода можно получить refresh token для обновления токена. Данная операция должна производится на стороне проекта. Подробнее можно прочитать на сайте Apple, полезные ссылки также можно посмотреть тут.
Статус авторизации🔗
Чтобы получить всю информацию о текущем состоянии авторизации, информацию пользователя, статусе авторизации, воспользуйтесь методами:
// The information about the user, identifier, name, email, etc.
MRGSAuthenticationSignInWithApple.Instance.GetCurrentUser((MRGSAuthenticationUser user, MRGSError error) => {
Debug.Log("MRGSAuthenticationSignInWithApple:\User: " + user + "\nError:\n" + error);
if (error == null) {
// Work with user data
}
});
// Information about the token, lifetime, etc.
MRGSAuthenticationSignInWithApple.Instance.GetAccessToken((MRGSAuthenticationAccessToken token, MRGSError error) => {
Debug.Log("MRGSAuthenticationSignInWithApple:\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, и др) и о токене.
[[MRGSAuthenticationSignInWithApple sharedInstance] getCredentials:^(MRGSAuthenticationCredential *credentials, NSError *error) {
NSLog(@"Result - %@. Error - %@", credentials, error);
if(!error){
// Credentials data work
}
}];
// Возвращается отдельно информация о пользователе, идентификатор, имя, email, и др.
[[MRGSAuthenticationSignInWithApple sharedInstance] getCurrentUser:^(MRGSAuthenticationUser *user, NSError *error) {
NSLog(@"User - %@. Error - %@", user, error);
if(!error){
// User data work
}
}];
// Возвращается отдельно информация о токене, времени жизни и др.
[[MRGSAuthenticationSignInWithApple sharedInstance] getAccessToken:^(MRGSAuthenticationAccessToken *token, NSError *error) {
if (!error) {
NSLog(@"getAccessToken result - %@", token);
} else {
NSLog(@"getAccessToken error - %@", error);
}
}];
Выход🔗
Для того, чтобы "выйти" из аккаунта пользователя, воспользуйтесь методом:
Важно
Поскольку у Sign in with Apple нет метода "выхода", то выход осуществляется с помощью удаления данных о сессии у нас. То есть фактически пользователь остается залогинен, но мы считаем, что нет. Единственная возможность выйти - это зайти в настройки системы, и в соответствующем разделе деавторизовать приложение (в таком случае мы вызовем метод делегата didLogoutUser).
Дата создания: 2020-03-02