Login with VKID🔗

Login with VKID — это единая платформа для авторизации и регистрации пользователей в разных сервисах экосистемы VK.
Android sdk-fingerprint is incorrect
Если вы используете новый механизм подписи apk/bundle в GooglePlay, вам следует взять SHA1 из GooglePlay Console вашего проекта.
VKID min api level
VKID требует Android 5.0+ (Api level 21+).
Предварительная настройка🔗
Получение ключей и необходимых данных🔗
Прежде чем начать, необходимо завести приложение на сайте VK platform. После создания приложения вы получите уникальный идентификатор для вашего приложения (ID приложения) и защищённый ключ.
Настройка проекта🔗
Настройте ваш проект согласно документации VK platform.
Также, необходимо добавить Сервисный ключ доступа из VK platform в MRGS консоль вашего проекта -> Интеграция -> VK access token
Добавление Universal links, schemas в iOS
VKId требует, чтобы приложение поддерживало universal links, а также были прописаны нужные схемы в plist приложения. Про настройку Universal links можно посмотреть в документации VK, указанной выше, но при необходимости можно использовать домен MRGS для universal links, для этого поставьте задачу на проект MRGS, или обратитесь к нам в чате поддержки, и мы пропишем ваш bundleId в наш файл app-site-associstion. Ниже приведен пример кода для Unity для добавления нужных данных в приложение:
[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;
PlistElementArray schemesToOpen = rootDict.CreateArray("LSApplicationQueriesSchemes");
schemesToOpen.AddString("vkauthorize-silent");
// Adding URL-scheme
PlistElementArray appSchemes = rootDict.CreateArray("CFBundleURLTypes");
PlistElementDict appSchemesDict = appSchemes.AddDict();
appSchemesDict.SetString("CFBundleURLName", "");
PlistElementArray appSchemesArray = appSchemesDict.CreateArray("CFBundleURLSchemes");
appSchemesArray.AddString("vk<VKontakte_APP_ID>");
File.WriteAllText(plistPath, plist.WriteToString());
// Adding Universal Links
var projectManager = new ProjectCapabilityManager(projPath, "ios.entitlements", targetGuid: projectTarget);
projectManager.AddAssociatedDomains(new []
{
"applinks:mrgs.astrum.team" // Your domain or mrgs domain if universal links is made via mrgs
});
projectManager.WriteToFile();
}
Для iOS Native:
Для добавления схем в LSApplicationQueriesSchemes (для открытия других приложений) необходимо:
- Зайдите в Info.plist вашего приложения
- Добавьте новую строку с названием LSApplicationQueriesSchemes и типом данных array
- Добавьте в созданный массив необходимые элементы (
vkauthorize-silent)
Для добавления URL-схемы (для открытия Вашего приложения извне) необходимо:
- Зайдите в Info.plist вашего приложения
- Добавьте строку «URL types»
- Разверните первый элемент («Item0»), добавьте строку «URL identifier» и добавьте значение с идентификатором своего приложения (например, com.company.appname).
- Добавьте строку в первый элемент («item0») в «URL types» и назовите его «URL Schemes» и добавьте новый элемент (нужную URL-схему) в «URL Schemes»
Для добавления Universal Links capability, в XCode проекте во вкладке 'Signing & Capabilities' необходимо добавить 'Universal Links'
Добавление зависимостей🔗
- Добавьте модуль MRGSAuthenticationVkId
Добавление в Unity проект (общая инструкция)
- Добавьте VK репозиторий в ваш root gradle файл:
allprojects {
repositories {
// others
maven { url "https://artifactory-external.vkpartner.ru/artifactory/superappkit-maven-public/" }
}
}
Шаг 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, выберите пакетMRGSAuthenticationVKIdиз списка, затем нажмите "Install" - Импортируйте модуль:
using MRGS;
- Загрузите последнюю версию библиотеки. Распакуйте архив.
- (Для интеграции unitypackage) В Unity нажмите
Assets -> Import Package -> Custom Package, и выберите пакетgames.my.mrgs.authenticationvkid.unitypackageиз скачанного архива. - (Для интеграции tgz) В Unity нажмите
Window -> Package Manager -> '+' -> Add package from tarball, и выберите пакетgames.my.mrgs.authenticationvkid-<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 - Выберите модуль MRGSAuthenticationVKId из "MRGS Package Collection".
- Или вы можете выбрать пакет «MRGS» из "MRGS Package Collection" (содержит все модули mrgs в качестве продуктов), а затем выбрать только продукт "MRGS/AuthenticationVKId".
Отдельными пакетами
- В Xcode выберите File > Add Packages
- В строке поиска в правом верхнем углу вставьте URL:
https://mrgs-gitea.my.games/mrgs/mrgsauthenticationvkid-ios-sdk.git - Добавьте модуль в свой проект
- Или вы можете вставить URL
https://mrgs-gitea.my.games/mrgs/ios-sdks.git, чтобы подключить пакет "MRGS", который содержит все модули mrgs в качестве продуктов, а затем выбрать только продукт "MRGS/AuthenticationVKId".
Шаг 2. Добавьте поддержку категорий ObjectiveC
- В настройках проекта установите флаг
-ObjCв поле "Other linker Flags". - Импортируйте модуль в коде:
@import MRGServiceKit;или@import MRGSAuthenticationVKId;или#import <MRGSAuthenticationVKId/MRGSAuthenticationVKId.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 добавьте последнюю версию MRGSAuthenticationVKId:
Чтобы добавить через subspecs:
Для добавления через отдельные модули:
Чтобы добавить все модули mrgs:
Шаг 3. Установите зависимости
- Выполните
pod install(илиpod install --repo-updateесли необходимо) - Импортируйте модуль в коде:
@import MRGServiceKit;или@import MRGSAuthenticationVKId;или#import <MRGSAuthenticationVKId/MRGSAuthenticationVKId.h>
Шаг 1. Добавьте зависимости
Добавьте зависимость в ваш Cartfile:
binary "https://mrgs-nexus.my.games/repository/ios-sdks/MRGSAuthenticationVKId/MRGSAuthenticationVKId.json" ~> 5.0.0
Шаг 2. Установите зависимости
- Выполните
carthage update --use-xcframeworks - Добавьте загруженные фреймворки в свой проект (убедитесь, что опция "do not embed" включена)
- В настройках проекта установите флаг
-ObjCв поле "Other linker Flags". - Импортируйте модуль в коде:
@import MRGServiceKit;или@import MRGSAuthenticationVKId;или#import <MRGSAuthenticationVKId/MRGSAuthenticationVKId.h>
- Загрузите последнюю версию библиотеки. Распакуйте архив.
-
Добавьте
MRGSAuthenticationVKId.xcframeworkиз скачанного архива в ваш проект (Перетащите библиотеки в раздел "Linked frameworks and Libraries") (для совместимости в архиве также находится MRGSAuthenticationVKId.framework - fat framework старого вида) -
В настройках проекта установите флаг
-ObjCв поле "Other linker Flags". - Импортируйте модуль в коде:
@import MRGSAuthenticationVKId;или#import <MRGSAuthenticationVKId/MRGSAuthenticationVKId.h> - Также, вы можете добавить из архива файлы
MRGServiceKit.hиmodule.modulemapв свой проект, либо в настройках проекта укажите путь до них в разделеBuild Settings -> Header search paths. Теперь вместо импорта каждого из наших фреймворков по отдельности, вы можете импортировать только один заголовочный файл:@import MRGServiceKit;
Добавление в Android проект
- Добавьте VK репозиторий в ваш root gradle фай:
allprojects {
repositories {
// others
maven { url "https://artifactory-external.vkpartner.ru/artifactory/superappkit-maven-public/" }
}
}
- Добавьте зависимости в ваши Application gradle file.
Скопируйте файл MRGSAuthenticationVKId.aar в директорию libs вашего проекта. Добавьте необходимые зависимости в файл build.gradle
VK авторизация
VKID не совместим с другой библиотекой для авторизации/регистрации в VK. Убедитесь что в сборку не попадают одновременно эти две библиотеки, или добавьте в ваш mainTemplate.gradle файл следующий скрипт, что бы исключить из компиляции старый вариант авторизации:
Настройка параметров MRGS🔗
Далее нужно передать VK project id и VK project secret в MRGS SDK. Для этого, при старте SDK MRGS необходимо добавить соответствующую настройку в параметрах внешних SDK:
using MRGS;
public class MasterController : MonoBehaviour
{
void Awake()
{
// Setting up mrgs params
// ...
var modulesParams = new List<MRGSExternalSDKSettings>
modulesParams.Add(new MRGSVKIdParams("<VK_PROJECT_ID>", "<VK_PROJECT_SECRET>"))
// Setting up external sdk params
// ...
MRGService.Instance.Initialize(serviceParams, sdkParams)
}
}
@import MRGService;
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//Setting up mrgs params
// ...
//Setting up external sdk params
MRGSVKIdParams* vkIdLoginParams = [[MRGSVKIdParams alloc] initWithClientId:@"<VK_PROJECT_ID>" clientSecret:@"<VK_PROJECT_SECRET>"];
NSArray *externalParams = @[ ..., vkIdLoginParams];
[MRGService startWithServiceParams:<params> externalSDKParams:externalParams delegate:nil];
}
Android
Настройки VKID нужно указать в ресурсах андроид согласно документации VK platform.
Работа с MRGSAuthentication интерфейсом🔗
Для работы с Login with VKID воспользуйтесь классом MRGSAuthenticationVKId (MRGSVKId на Android). Обращаем внимание, что данный класс реализует основной интерфейс MRGSAuthentication, то есть имеет все методы этого интерфейса. Далее описана стандартная реализация интерфейса MRGSAuthentication:
Делегат🔗
Перед началом работы с API, необходимо установить и реализовать делегат, принимающий обратные вызовы:
// Setting
// 'this' conforms to 'IMRGSAuthenticationDelegate' protocol
MRGSAuthenticationVKId.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());
}
// Установка
[MRGSAuthenticationVKId sharedInstance].delegate = self;
//Реализация
// Метод, который вызывается, когда пользователь удаленно вышел из социальной сети, или его сессия закончилась.
- (void)authenticationProvider:(id<MRGSAuthentication>)provider didLogoutUser:(MRGSAuthenticationUser *)user{
NSLog(@"User did logout: \n%@", user);
}
// Метод, который вызывается в случае необходимости отображения контроллера для авторизации пользователя.
- (void)shouldPresentAuthorizationController:(UIViewController *)viewController {
UIViewController *rootVC = [UIApplication sharedApplication].keyWindow.rootViewController;
[rootVC presentViewController:viewController animated:YES completion:nil];
}
import androidx.annotation.NonNull;
import games.my.mrgs.authentication.MRGSAuthentication.OnExternalLogoutListener;
import games.my.mrgs.authentication.vkid.MRGSVKId;
// Set a listener
MRGSVKId.getInstance().setOnExternalLogoutListener(new OnExternalLogoutListener() {
@Override
public void onUserLogout(@NonNull String socialId) {
// Handel result.
}
});
Статус🔗
Затем, необходимо проверить статус авторизации (залогинен ли пользователь):
Вход🔗
Для обычного входа воспользуйтесь одним из методов:
// If error occured, error object will be non-null
MRGSAuthenticationVKId.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.
MRGSAuthenticationVKId.Instance.Login((MRGSAuthenticationCredential credentials, MRGSError error) => {
Debug.Log("MRGSAuthenticationVKId:\nCredentials: " + credentials + "\nError:\n" + error);
if (error == null) {
// Auth success
}
});
// В ответе придет только объект ошибки, если она случилась
[[MRGSAuthenticationVKId sharedInstance] login:^(NSError *error) {
if (!error) {
// Auth success
}
}];
// В ответе придет объект, описывающий пользователя и токен, и объект ошибки, если она случилась
[[MRGSAuthenticationVKId 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.vkid.MRGSVKId;
MRGSVKId.getInstance().login(activity, new MRGSLoginCallback() {
@Override
public void onSuccess(@NonNull MRGSCredentials credentials) {
// Handle result.
}
@Override
public void onError(@NonNull MRGSError error) {
// Handle error.
}
});
Вход с доп. разрешениями🔗
Доп. разрешения больше нельзя передавать с клиента. Теперь нужные разрешения нужно настраивать в VK platform.
Важно
Учтите, что пользователь может не дать некоторые разрешения. Список полученных разрешений можно посмотреть в поле credentials.accessToken.authorizedScopes.
Статус авторизации🔗
Чтобы получить всю информацию о текущем состоянии авторизации, информацию пользователя, статусе авторизации, воспользуйтесь методами:
// The information about the user, identifier, name, email, etc.
MRGSAuthenticationVKId.Instance.GetCurrentUser((MRGSAuthenticationUser user, MRGSError error) => {
Debug.Log("MRGSAuthenticationVKId:\User: " + user + "\nError:\n" + error);
if (error == null) {
// Work with user data
}
});
// Information about the token, lifetime, etc.
MRGSAuthenticationVKId.Instance.GetAccessToken((MRGSAuthenticationAccessToken token, MRGSError error) => {
Debug.Log("MRGSAuthenticationVKId:\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, и др) и о токене.
[[MRGSAuthenticationVKId sharedInstance] getCredentials:^(MRGSAuthenticationCredential *credentials, NSError *error) {
NSLog(@"Result - %@. Error - %@", credentials, error);
if(!error){
// Credentials data work
}
}];
// Возвращается отдельно информация о пользователе, идентификатор, имя, email, и др.
[[MRGSAuthenticationVKId sharedInstance] getCurrentUser:^(MRGSAuthenticationUser *user, NSError *error) {
NSLog(@"User - %@. Error - %@", user, error);
if(!error){
// User data work
}
}];
// Возвращается отдельно информация о токене, времени жизни и др.
[[MRGSAuthenticationVKId 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.utils.optional.BiConsumer;
import games.my.mrgs.authentication.vkid.MRGSVKId;
// Returns user's information.
MRGSVKId.getInstance().getCurrentUser(new MRGSAuthentication.UserCallback() {
@Override
public void onSuccess(@NonNull final MRGSUser user) {
}
@Override
public void onError(@NonNull MRGSError error) {
}
});
// Returns authentication's information.
MRGSVKId.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);
}
}
});
Выход🔗
Для того, чтобы "выйти" из аккаунта пользователя, воспользуйтесь методом:
Получение аватарки🔗
Для получения аватарки пользователя с заданным идентификатором и размером, воспользуйтесь методом:
import android.graphics.Bitmap;
import androidx.annotation.NonNull;
import games.my.mrgs.MRGSError;
import games.my.mrgs.authentication.MRGSAvatarCallback;
import games.my.mrgs.authentication.vkid.MRGSVKId;
// Call #getCurrentUser() to get current user.
final MRGSUser user = ...
// Get user's avatar.
MRGSVKId.getInstance().getUserAvatar(user, new MRGSAvatarCallback() {
@Override
public void onSuccess(@NonNull Bitmap bitmap) {
// Handle result.
}
@Override
public void onError(@NonNull MRGSError error) {
// Handle error.
}
});
Дата создания: 2022-10-04