#swift #aws-amplify #aws-appsync
#swift #aws-усилить #aws-appsync
Вопрос:
Я использую AWS amplify для создания серверной части моего приложения для ios. У меня возникла проблема с инициализацией клиента appsync. Я добавил аутентификацию в серверную часть и вошел в систему, но в консоли я получаю следующую ошибку:
КОНСОЛЬ:
Error initializing appsync client. invalidAuthConfiguration("AWSCognitoUserPoolsAuthProvider cannot be nil.")
В AppDelegate:
// CONFIGURE AWSAppSync
do {
// You can choose your database location if you wish, or use the default
let cacheConfiguration = try AWSAppSyncCacheConfiguration()
// AppSync configuration amp; client initialization
let appSyncConfig = try AWSAppSyncClientConfiguration(appSyncServiceConfig: AWSAppSyncServiceConfig(), cacheConfiguration: cacheConfiguration)
appSyncClient = try AWSAppSyncClient(appSyncConfig: appSyncConfig)
print("appSyncClient initialise success n")
} catch {
print("Error initializing appsync client. (error)")
}
Я просто предполагаю здесь, но переменная ‘appSyncConfig’ должна быть:
let appSyncConfig = try AWSAppSyncClientConfiguration(appSyncServiceConfig: AWSAppSyncServiceConfig.init(), cacheConfiguration: cacheConfiguration, userPoolsAuthProvider: AWSCognitoUserPoolsAuthProvider?)
Но как мне получить AWSCognitoUserPoolsAuthProvider????
Ответ №1:
При настройке AWS AppSync вам не хватает шага, который добавляет класс для получения токенов из пулов пользователей Cognito. Конечно, здесь я предполагаю, что вы выбрали пул пользователей Cognito в качестве типа авторизации по умолчанию!
Пожалуйста, дайте мне знать, если у вас есть еще какие-либо вопросы по поводу настройки amplify GraphQL или чего-то еще!
import UIKit
import AWSAppSync
import AWSMobileClient
class MyCognitoUserPoolsAuthProvider : AWSCognitoUserPoolsAuthProviderAsync {
func getLatestAuthToken(_ callback: @escaping (String?, Error?) -> Void) {
AWSMobileClient.default().getTokens { (tokens, error) in
if error != nil {
callback(nil, error)
} else {
callback(tokens?.idToken?.tokenString, nil)
}
}
}
}
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDelegate {
var window: UIWindow?
var appSyncClient: AWSAppSyncClient?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
//// Override point for customization after application launch.
self.initializeAppSync()
return true
}
func initializeAppSync() {
do {
// You can choose the directory in which AppSync stores its persistent cache databases
let cacheConfiguration = try AWSAppSyncCacheConfiguration()
// Initialize the AWS AppSync configuration
let appSyncConfig = try AWSAppSyncClientConfiguration(appSyncServiceConfig:
AWSAppSyncServiceConfig(),
userPoolsAuthProvider: MyCognitoUserPoolsAuthProvider(),
cacheConfiguration: cacheConfiguration)
// Initialize the AWS AppSync client
appSyncClient = try AWSAppSyncClient(appSyncConfig: appSyncConfig)
print("appSyncClient initialise success.")
} catch {
print("Error initializing appsync client. (error)")
}
}
}