aws appsync 离线:收到错误未提供变量 ID

Posted

技术标签:

【中文标题】aws appsync 离线:收到错误未提供变量 ID【英文标题】:aws appsync offline : getting error Variable id was not provided 【发布时间】:2018-11-09 20:00:51 【问题描述】:

我正在使用 AWS AppSync 进行离线/在线功能的移动开发 (ios)

我正在尝试以离线模式保存数据。但我收到错误“未提供变量 id/缺少值”

当应用上线时,它会自动同步到 DynamoDB,但问题只是在离线模式下无法获取已保存的记录

这是应用程序中使用的代码

`

    let userObjInput = userObjectInput(id: "id", firstName: "firstname", lastName: "lastName")

    let CategoryInputs = CreateUserCategoryInput(categoryName: "categoryValue" , user: userObjInput)

    let mutation =  CategoryMutation(input: CategoryInputs)

    appSyncClient?.perform(mutation: mutation, queue: .main, optimisticUpdate:  (transaction) in

            do 
                let selectionSets = try transaction?.read(query: query)
                try transaction?.update(query: GetUserCategoriesOfUserQuery(id: "id"))  (data: inout GetUserCategoriesOfUserQuery.Data) in
                  data.getAllCategoriesForUser?.append(GetUserCategoriesOfUserQuery.Data.GetAllCategoriesForUser?.init(GetUserCategoriesOfUserQuery.Data.GetAllCategoriesForUser.init(id: (UUID().uuidString), categoryName: CategoryInputs.categoryName!, isDeleted: false, user: GetUserCategoriesOfUserQuery.Data.GetAllCategoriesForUser.User?.init(GetUserCategoriesOfUserQuery.Data.GetAllCategoriesForUser.User.init(id: userObjInput.id!, firstName: userObjInput.firstName!, lastName: userObjInput.lastName!)))))
             catch 
                print(error.localizedDescription)
           
    , conflictResolutionBlock: nil, resultHandler:  (result, error) in

        if error == nil 
            fetchCategories()

         else 
            print(error?.localizedDescription)
        
    )`

【问题讨论】:

你是如何初始化你的 appsync 配置的?您是否使用“id”作为缓存键?示例应用程序中提到的乐观写法:github.com/aws-samples/aws-mobile-appsync-events-starter-ios/… 是否适合您?您可以为您的用例遵循类似的模式吗? 我遵循相同的模式并使用 id 作为缓存。 aws sdk 的问题是,如果我们在 get 查询中使用参数,它将无法获取记录。我发布了问题和示例以支持 2 个月前。他们仍在调查这个问题。 您找到解决方案了吗?我想我也有同样的问题。 AWS 支持没有响应。我正在获取所有记录并应用过滤器 这个错误已经在 iOS AppSync SDK 2.6.22的新版本中修复了 【参考方案1】:

对于那些对optimistic UI missing value 有问题的人。我发现了一种技巧,可以通过使用客户端应用程序中的Custom Request Header 传递参数来临时解决问题。 之前,您的查询看起来像这样allDiaries(author: String): [Diary] 只需将其更改为 => allDiaries: [Diary] 所以您的request mapping 如下所示:


    "version" : "2017-02-28",
    "operation" : "Scan",
    "filter" : 
        "expression" : "author = :author",
        "expressionValues" : 
            ":author" :  "S" : "$context.request.headers.author" 
        
    

参考:How to pass AWS AppSync custom request header in iOS client? 希望有用!祝你好运:)

【讨论】:

以上是关于aws appsync 离线:收到错误未提供变量 ID的主要内容,如果未能解决你的问题,请参考以下文章

迁移到纯 websocket 后,我​​在 AWS Appsync 上收到 GraphQL 订阅错误

为 AWS AppSync 客户端 iOS Swift 启用缓存

如何设置 AWS Appsync 请求超时限制 || AWSAppSync 客户端未提供回调

新设备上的 AWS Appsync 缓存未命中和 403 错误

AWS AppSync GraphQL 输入验证 - 忽略额外字段?

如何处理与 AWS AppSync 离线同步的数据?