Интерфейсы🔗
MRGSAuthentication module содержит несколько интерфейсов сгруппирован по функционалу, который предоставляет доступ к разному функционалу различных соцсетей.
Интерфейс MRGSAuthentication (базовый)🔗
MRGSAuthentication - основной протокол (интерфейс) для работы с любым сервисом авторизации, содержит основной набор методов, позволяющих авторизоваться, разлогиниться, получить данные пользователя, необходимую информацию о токенах и разрешениях.
Для получения информации о типе сервиса авторизации и текущего статуса авторизации, предусмотрены методы:
Для начала процедуры входа предусмотрены следующие методы:
- (void)login:(void (^nullable)(NSError* error))completionHandler;
- (void)loginWithCompletionHandler:(void (^nullable)(MRGSAuthenticationCredential *credentials, NSError* error))completionHandler;
- (void)loginWithScopes: (NSArray<MRGSAuthenticationScope>*)requestedScopes completionHandler:(void (^nullable)(MRGSAuthenticationCredential *credentials, NSError* error))completionHandler;
Для того, чтобы "выйти" из аккаунта пользователя, предусмотрен метод:
Чтобы получить всю информацию о текущем состоянии авторизации, информацию пользователя, статусе авторизации, предусмотрены методы:
Этот интерфейс реализуют все классы по работе с авторизацией, вне зависимости от типа сети. Таким образом, вы можете использовать эти методы, не указывая явно, с каким сервисом вы работаете. Например:
// Or any other networks
MRGSAuthentication _socialNetwork = MRGSAuthenticationSignInWithApple.Instance;
_socialNetwork.Login((MRGSAuthenticationCredential credentials, MRGSError error) => {
Debug.Log("Login result:\nCredentials: " + credentials + "\nError:\n" + error);
if (error == null) {
// Auth success
}
});
_socialNetwork.GetCurrentUser((MRGSAuthenticationUser user, MRGSError error) => {
Debug.Log("Result:\User: " + user + "\nError:\n" + error);
if (error == null) {
// Work with user data
}
});
_socialNetwork.GetAccessToken((MRGSAuthenticationAccessToken token, MRGSError error) =>
{
Debug.Log("Result:\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)
}
});
_socialNetwork.Logout();
// Or any other networks
id<MRGSAuthentication> _socialNetwork = [MRGSAuthenticationSignInWithApple sharedInstance];
[_socialNetwork loginWithCompletionHandler:^(MRGSAuthenticationCredential *credentials, NSError *error) {
NSLog(@"Result - %@. Error - %@", credentials, error);
if(!error){
// Authorization was successful.
}
}];
[_socialNetwork getCurrentUser:^(MRGSAuthenticationUser *user, NSError *error) {
NSLog(@"User - %@. Error - %@", user, error);
if(!error){
// User data work
}
}];
[_socialNetwork getAccessToken:^(MRGSAuthenticationAccessToken *token, NSError *error) {
if (!error) {
NSLog(@"getAccessToken result - %@", token);
} else {
NSLog(@"getAccessToken error - %@", error);
}
}];
[_socialNetwork logout];
// Or any other networks
MRGSAuthentication socialNetwork = MRGSFacebook.getInstance();
socialNetwork.login(activity, new MRGSLoginCallback() {
@Override
public void onSuccess(MRGSCredentials credentials) {
// Authorization was successful.
}
@Override
public void onError(MRGSError error) {
// Authorization error
}
});
socialNetwork.getCurrentUser(new MRGSAuthentication.UserCallback() {
@Override
public void onSuccess(final MRGSUser user) {
}
@Override
public void onError(MRGSError error) {
}
});
socialNetwork.getAccessToken(new BiConsumer<MRGSAccessToken, MRGSError>() {
@Override
public void accept(MRGSAccessToken accessToken, MRGSError error) {
if (error != null) {
Log.d("MRGSAuthentication", "AccessToken error: " + error.getErrorText());
} else {
Log.d("MRGSAuthentication", "AccessToken success: " + authInfo);
}
}
});
socialNetwork.logout();
Также, у большинства наших классов есть поля для делегата MRGSAuthenticationDelegate (OnExternalLogoutListener на Android). Он содержит в себе методы:
// Setting
// 'this' conforms to 'IMRGSAuthenticationDelegate' protocol
<network>.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 - OnAuthenticationProviderDidLogoutUser: " + user + "\nNetwork: " + provider.SocialId().ToString());
}
// Метод, который вызывается в случае необходимости отображения контроллера для авторизации пользователя.
- (void)shouldPresentAuthorizationController:(UIViewController *)viewController;
// Метод, который вызывается, когда пользователь удаленно вышел из социальной сети, или его сессия закончилась.
- (void)authenticationProvider:(id<MRGSAuthentication>)provider didLogoutUser:(MRGSAuthenticationUser *)user;
Возможные ошибки🔗
Список ошибок, которые могут быть получены:
typedef NS_ERROR_ENUM(kMRGSAuthenticationErrorDomain, MRGSAuthenticationErrorCode) {
MRGSAuthenticationErrorNotLoggedIn = -100,
MRGSAuthenticationErrorUserCanceledOperation = -101,
MRGSAuthenticationErrorNotAvailable = -102,
MRGSAuthenticationErrorOperationFailed = -105,
MRGSAuthenticationErrorInvalidInput = -107,
MRGSAuthenticationErrorNoScopePermission = -108,
MRGSAuthenticationErrorConnectionFailed = -109,
};
public enum MRGSAuthenticationError {
NOT_LOGGED_IN(-100, "User not logged in."),
USER_CANCELED(-101, "User canceled login."),
NOT_AVAILABLE(-102, "No available service."),
API_ERROR(-105, "Api error."),
INVALID_INPUT(-107, "Invalid input param."),
NO_SCOPE_PERMISSION(-108, "No scope permission."),
NO_CONNECTION(-109, "No internet connection."),
BROWSER_NOT_FOUND(-110, "Browser not found.");
}
Интерфейс MRGSAuthenticationGames (для игровых социальных сетей)🔗
Протокол для работы с игровыми социальными сетями - MRGSAuthenticationGames (MRGSGames на Android). Он позволяет взаимодействовать с достижениями игрока и таблицами рейтингов игроков.
Работа с достижениями игрока (Achievements)🔗
Для получения списка доступных достижений, воспользуйтесь методом:
При успешном выполнении вы получите массив объектов типа MRGSAuthenticationAchievement, описывающих каждое достижение, в противном случае придет ошибка.
Для установки прогресса для пользователя для конкретного достижения, воспользуйтесь методом:
В метод передается процент выполнения достижения и его идентификатор (можно получить из ранее полученных объектов типа MRGSAuthenticationAchievement), в ответ придет ошибка, если она произошла.
Для показа экрана с достижениями, воспользуйтесь методом:
Callback будет вызван на событие закрытия пользователем экрана достижений.
Работа с таблицами рейтингов игроков (Leaderboards)🔗
Для получения списка доступных таблиц рейтингов, воспользуйтесь методом:
При успешном выполнении вы получите массив объектов типа MRGSAuthenticationLeaderboard, описывающих каждую таблицу рейтингов, в противном случае придет ошибка.
Для установки очков для пользователя для конкретной таблицы рейтингов, воспользуйтесь методом:
В метод очки для текущего пользователя в таблице рейтингов и идентификатор конкретной таблицы (можно получить из ранее полученных объектов типа MRGSAuthenticationLeaderboard), в ответ придет ошибка, если она произошла.
Для показа экрана со всеми таблицами рейтингов, воспользуйтесь методом:
Callback будет вызван на событие закрытия пользователем экрана со всеми рейтингами.
Для показа экрана с конкретной таблицей рейтингов, воспользуйтесь методом:
В метод передается идентификатор таблицы рейтингов. Callback будет вызван на событие закрытия пользователем экрана таблицы рейтингов.
Для получения текущего рейтинга для пользователя, или для всех пользователей этого рейтинга, воспользуйтесь соответствующими методами:
// For current user
void GetCurrentPlayerScoreForLeaderboard(string leaderboardId, MRGSAuthenticationLeaderboardTimeScope timeScope, MRGSAuthenticationLeaderboardCollectionType collection, Action<MRGSAuthenticationLeaderboardScore, MRGSError> completionHandler);
// For all users
void GetAllPlayersScoresForLeaderboard(string leaderboardId, MRGSAuthenticationLeaderboardTimeScope timeScope, MRGSAuthenticationLeaderboardCollectionType collection, Action<List<MRGSAuthenticationLeaderboardScore>, MRGSError> completionHandler);
// Для текущего пользователя
- (void)getCurrentPlayerScoreForLeaderboardWithId:(NSString *)leaderboardId timeScope:(MRGSAuthenticationLeaderboardTimeScope)timeScope collectionType:(MRGSAuthenticationLeaderboardCollectionType)collection completionHandler:(void (^nullable)(MRGSAuthenticationLeaderboardScore *score, NSError* error))completionHandler;
// Для всех пользователей
- (void)getAllPlayersScoresForLeaderboardWithId:(NSString *)leaderboardId timeScope:(MRGSAuthenticationLeaderboardTimeScope)timeScope collectionType:(MRGSAuthenticationLeaderboardCollectionType)collection completionHandler:(void (^nullable)(NSArray<MRGSAuthenticationLeaderboardScore*> *scores, NSError* error))completionHandler;
MRGSLeaderBoards leaderBoards = getLeaderBoards();
// Для текущего пользователя
leaderBoards.getCurrentPlayerScore(final String leaderboardId, final int timeSpan, final int collection, final MRGSGetScoreCallback callback);
// Для всех пользователей
leaderBoards.getTopScores(final String leaderboardId, final int timeSpan, final int collection, final int maxResult, final boolean forceLoad, final MRGSGetScoreListCallback callback);
В метод передается идентификатор таблицы рейтингов, время, за которое нужно собрать данные, тип собираемых данных (видимость для всех, или только для друзей). В ответ придет объект, или массив объектов типа MRGSAuthenticationLeaderboardScore, описывающих очки рейтинга пользователя.
Интерфейс MRGSAuthenticationSocialNetwork (для социальных сетей)🔗
Протокол для работы с социальными сетями - MRGSAuthenticationSocialNetwork. Он позволяет получать друзей пользователя, его аватарку, делать игровые запросы и приглашения в игру, а также открывать страницу "поделиться".
Для получения аватарки пользователя с заданным идентификатором и размером, предусмотрены методы:
Для получения списка друзей или пользователей, предусмотрены методы:
// Method for obtaining a list of friends identifiers of a user in a social network. (Important: for facebook, only the list of friends who installed this application will be returned.). Usually, this method requires permission to the friends list (specified in the loginWithScopes method).
void GetFriendsIds(Action<List<string>, MRGSError> completionHandler);
// Method for obtaining a user profile with the specified identifier in a social network. No additional permissions needed.
void GetUser(string userId, Action<MRGSAuthenticationUser, MRGSError> completionHandler);
// Method for obtaining multiple user profiles with the specified identifiers in a social network.
void GetUsers(List<string> usersIds, Action<List<MRGSAuthenticationUser>, MRGSError> completionHandler);
// Метод для получения списка идентификаторов друзей пользователя в социальной сети. (Важно: для facebook вернется только список друзей, установивших данное приложение.). Обычно для работы данного метода необходимо разрешение на список друзей (указывается в методе loginWithScopes).
- (void)getFriendsIds:(void (^nullable)(NSArray<NSString*>*ids, NSError* error))completionHandler;
// Метод для получения профиля пользователя с указанным идентификатором в социальной сети. Дополнительные разрешения не нужны.
- (void)getUserWithId:(NSString *)userId completionHandler:(void (^nullable)(MRGSAuthenticationUser *user, NSError* error))completionHandler;
// Метод для получения нескольких профилей пользователей с указанными идентификаторами в социальной сети.
- (void)getUsersWithIds:(NSArray *)usersIds completionHandler:(void (^nullable)(NSArray<MRGSAuthenticationUser*> *users, NSError* error))completionHandler;
// Метод для получения списка друзей пользователя в социальной сети. (Важно: для facebook вернется только список друзей, установивших данное приложение.). Обычно для работы данного метода необходимо разрешение на список друзей (указывается в методе loginWithScopes).
void getFriends(FriendsCallback callback);
// Метод для получения профиля пользователя с указанным идентификатором в социальной сети. Дополнительные разрешения не нужны.
void getUserWithId(String userId, MRGSAuthentication.UserCallback callback);
// Метод для получения нескольких профилей пользователей с указанными идентификаторами в социальной сети.
void getUsersWithId(List<String> userId, FriendsCallback callback);
Для того, чтобы открыть диалог создания нового поста в ленте текущего пользователя с заданными параметрами, воспользуйтесь методом:
// Метод для открытия диалога создания нового поста в ленте текущего пользователя. Принимает объект класса MRGSAuthenticationPost, описывающий данные, которыми будет заполнен открытый диалог.
- (void)showPostOnWallDialog:(MRGSAuthenticationPost *)post completionHandler:(void (^nullable)(NSError* error))completionHandler;
Для отправки приглашений в игру и игровых запросов (с помощью них в некоторых случаях можно отправлять "подарки"), а также проверки входящих запросов, предусмотрены методы:
// Method for sending an invitation. The user will be shown a dialog for confirmation. In the response, if successful, an MRGSAuthenticationInvite object will be returned with filled in fields, such as request identifier, sent users. (Important: a window will open for facebook where the user himself selects friends to invite)
void SendInvite(MRGSAuthenticationInvite invite, Action<MRGSAuthenticationInvite, MRGSError> completionHandler);
// Method for sending a game request. The user will be shown a dialog for confirmation. In the response, if successful, an MRGSAuthenticationInvite object will be returned with filled in fields, such as request identifier, sent users. (Important: a window will open for facebook where the user himself selects friends to whom to send a request)
void SendGameRequest(MRGSAuthenticationInvite invite, Action<MRGSAuthenticationInvite, MRGSError> completionHandler);
// Method for receiving game requests or invitations sent by others to the current user. (The method is relevant only for Facebook, since there you need to manually delete requests.)
void GetGameRequests(Action<List<Dictionary<string, object>>, MRGSError> completionHandler);
// Метод для отправки приглашения. Пользователю будет показан диалог для подтверждения. В ответе в случае успеха придет объект MRGSAuthenticationInvite с заполненными полями, такими как идентификатор запроса, приглашенные пользователи. (Важно: для facebook будет открыто окно, где пользователь сам выбирает друзей, которых пригласить)
- (void)sendInvite:(MRGSAuthenticationInvite *)invite completionHandler:(void (^nullable)(MRGSAuthenticationInvite* invite, NSError* error))completionHandler;
// Метод для отправки игрового запроса. Пользователю будет показан диалог для подтверждения. В ответе в случае успеха придет объект MRGSAuthenticationInvite с заполненными полями, такими как идентификатор запроса, приглашенные пользователи. (Важно: для facebook будет открыто окно, где пользователь сам выбирает друзей, которым отправить запрос)
- (void)sendGameRequest:(MRGSAuthenticationInvite*)invite completionHandler:(void (^nullable)(MRGSAuthenticationInvite* invite, NSError* error))completionHandler;
// Метод для получения игровых запросов или приглашений, отправленных другими текущему пользователю. (Метод актуален только для Facebook, т.к. там нужно вручную удалять запросы.)
-(void)getGameRequests:(MRGSAuthenticationGetGameRequestsHandler)completionHandler;
// Метод для отправки приглашения. Пользователю будет показан диалог для подтверждения. В ответе в случае успеха придет объект MRGSAuthenticationInvite с заполненными полями, такими как идентификатор запроса, приглашенные пользователи. (Важно: для facebook будет открыто окно, где пользователь сам выбирает друзей, которых пригласить). С помощью параметра notInGame можно выбирать - это приглашение установить игру (true), или игровой запрос (false)
void sendGameRequest(String title, String message, boolean notInGame, GameRequestResultCallback callback);
// Метод для получения игровых запросов или приглашений, отправленных другими текущему пользователю. (Метод актуален только для Facebook, т.к. там нужно вручную удалять запросы.)
void getGameRequests(GameRequestCallback callback);
// Метод удаления игрового запроса, после того, как игра его обработала
void deleteGameRequest(String requestId, GameRequestDeleteCallback callback);
Дата создания: 2020-03-02