Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

사용자 ID 연결 - Swift SDK

이 페이지의 내용

  • 개요
  • 예시
  • 비동기/대기 예시

Atlas App Services 는 사용자를 앱 에 로그 할 수 있도록 많은 인증 제공자 를 제공합니다. 각 제공자 는 고유한 사용자 ID를 생성합니다. App Services 와 Realm Swift SDK 를 사용하면 여러 자격 증명 을 하나의 사용자 ID로 병합할 수 있습니다.

익명 로그인 을 제공하는 애플리케이션을 예로 들어 보겠습니다. 이를 통해 사용자는 등록하지 않고도 앱을 탐색할 수 있습니다. 사용자가 애플리케이션을 좋아하면 영구 계정을 만듭니다. SSO 또는 이메일/비밀번호 인증으로 등록합니다. 기본적으로 이렇게 하면 새 User 객체가 생성됩니다. 앱은 새 ID를 원래 사용자와 연결해야 합니다.

linkUser(credentials:Credentials) 을(를) 사용하여 ID를 연결할 수 있습니다. 이렇게 하면 인증 제공자가 로그인한 User 객체에 연결됩니다.

@interface LinkIdentitiesExample : NSObject
@end
@implementation LinkIdentitiesExample {
RLMApp *app;
RLMUser *anonymousUser;
}
// Entry-point for example.
- (void)runExample {
app = [RLMApp appWithId:YOUR_APP_ID];
[self logInAnonymously];
}
- (void)logInAnonymously {
[app loginWithCredential:[RLMCredentials anonymousCredentials] completion:^(RLMUser *user, NSError *error) {
if (error != nil) {
NSLog(@"Failed to log in: %@", [error localizedDescription]);
return;
}
// User uses app, then later registers an account
[self registerNewAccountAsAnonymousUser: user];
}];
}
- (void)registerNewAccountAsAnonymousUser:(RLMUser *)user {
NSString *email = @"link2@example.com";
NSString *password = @"ganondorf";
[[app emailPasswordAuth] registerUserWithEmail:email password:password completion:^(NSError *error) {
if (error != nil) {
NSLog(@"Failed to register new account: %@", [error localizedDescription]);
return;
}
// Successfully created account, now link it
// with the existing anon user
[self linkUser:self->anonymousUser withCredentials:[RLMCredentials credentialsWithEmail:email password:password]];
}];
}
- (void)linkUser:(RLMUser *)user withCredentials:(RLMCredentials *)credentials {
[[app currentUser] linkUserWithCredentials:credentials completion:^(RLMUser *user, NSError *error) {
if (error != nil) {
NSLog(@"Failed to link user: %@", [error localizedDescription]);
return;
}
NSLog(@"Successfully linked user: %@", user);
}];
}
@end
let app = App(id: YOUR_APP_SERVICES_APP_ID)
func logInAnonymously() {
app.login(credentials: Credentials.anonymous) { (result) in
switch result {
case .failure(let error):
print("Failed to log in: \(error.localizedDescription)")
case .success(let user):
// User uses app, then later registers an account
registerNewAccount(anonymousUser: user)
}
}
}
func registerNewAccount(anonymousUser: User) {
let email = "swift-link@example.com"
let password = "ganondorf"
app.emailPasswordAuth.registerUser(email: email, password: password) { (error) in
guard error == nil else {
print("Failed to register new account: \(error!.localizedDescription)")
return
}
// Successfully created account, now link it
// with the existing anon user
link(user: anonymousUser, with: Credentials.emailPassword(email: email, password: password))
}
}
func link(user: User, with credentials: Credentials) {
user.linkUser(credentials: credentials) { (result) in
switch result {
case .failure(let error):
print("Failed to link user: \(error.localizedDescription)")
case .success(let user):
print("Successfully linked user: \(user)")
}
}
}
logInAnonymously()

버전 10.16.0의 새로운 기능.

Realm Swift SDK는 User.linkUser의 비동기/대기 버전을 제공합니다.

let app = App(id: YOUR_APP_SERVICES_APP_ID)
func logInAnonymously() async throws -> User {
let anonymousUser = try await app.login(credentials: Credentials.anonymous)
// User uses app, then later registers an account
let newAccountLinkedUser = try await registerNewAccount(anonymousUser: anonymousUser)
return newAccountLinkedUser
}
func registerNewAccount(anonymousUser: User) async throws -> User {
let email = "swift-async-link@example.com"
let password = "ganondorf"
try await app.emailPasswordAuth.registerUser(email: email, password: password)
// Successfully created account, now link it
// with the existing anon user
let linkedUser = try await link(user: anonymousUser, with: Credentials.emailPassword(email: email, password: password))
return linkedUser
}
func link(user: User, with credentials: Credentials) async throws -> User {
try await user.linkUser(credentials: credentials)
}
do {
let linkedUser = try await logInAnonymously()
print("Successfully linked user async: \(linkedUser)")
} catch {
print("Failed to link user: \(error.localizedDescription)")
}

Realm Swift SDK 버전 10.15.0 및 10.16.0부터 많은 Realm API가 Swift async/await 구문을 지원합니다. 프로젝트는 다음 요구 사항을 충족해야 합니다.

Swift SDK 버전
Swift 버전 요구 사항
지원되는 OS
10.25.0
Swift 5.6
iOS 13.x
10.15.0 또는 10.16.0
Swift 5.5
iOS 15.x

앱이 async/await 컨텍스트에서 Realm에 액세스하는 경우 코드를 @MainActor(으)로 표시하여 스레드 관련 충돌을 방지합니다.

돌아가기

다중 사용자 애플리케이션