未在 GetStream Swift SDK 上调用回调

Callbacks not called on GetStream Swift SDK

我有一个集成了 GetStream 的空白 Xcode 项目

播客文件:

  pod 'GetStream'

已在 AppDelegate 上初始化 GetStream:

Client.config = .init(apiKey: "XXXXX", appId: "XXXX", logsEnabled: true)
Client.shared.setupUser(token: "XXXXX") { (result) in
      // THIS IS SUCCESSFUL, working perfectly
}

在 ViewController 上,尝试从提要中获取活动(其中包含活动)

let userFeed = Client.shared.flatFeed(feedSlug: "FLAT_FEED_ID", userId: "LOGGED_USER_ID")

let activity = Activity(actor: User.current!, verb: "pin", object: "Place:72482734")

userFeed.add(activity) { result in
   print("Callback called") // ----> Never called
   if let activity = try? result.get() {
         print(activity.id) // ----> Never called
   } else {
         print("FAILED") // ----> Never called
   }
}

userFeed.get() { result in
        print(result) // ---->  Never called
}

但是,由于我有 logsEnabledtrue,我能够在 Xcode 控制台中看到原始的 JSON 值以及我的所有活动那个饲料。活动已成功发布到提要,但只是没有调用闭包。

GetStream 环境

GetStream版本:2.2.2 Xcode版本:11.5 Swift版本:5 平台 运行 GetStream:iOS 13.5 macOS 版本 运行 Xcode:macOS 10.15.4

附加信息

我还尝试删除所有 pods 并使用 pod 'GetStream', '~> 2.2.2'pod 'GetStreamActivityFeed'

安装 GetStream

`

找到解决方案,检查代码,发现从本地范围调用方法时 self 变为 nil。创建对 Feed 的强引用或 activity 解决了这个问题。

class ViewController {

    var userFeed : FlatFeed! // create strong reference
    var activity : Activity! // create strong reference

    override func viewDidLoad() {
        super.viewDidLoad()
        userFeed = Client.shared.flatFeed(feedSlug: "FLAT_FEED_ID", userId: "LOGGED_USER_ID")

        activity = Activity(actor: User.current!, verb: "pin", object: "Place:72482734")

        userFeed.add(activity) { [weak self] result in
                if let activity = try? result.get() {
                        print(activity.id)
                } else {
                          print("FAILED")
                }
        }

        userFeed.get() {  [weak self] result in
                print(result)
        }
    }

}

回调存储在 userFeed 对象中,我认为该对象的寿命不足以接收响应(超出范围)。要解决此问题,只需将 userFeed 对象保存在范围之外。使用您的代码作为 ViewController 属性 的示例:

class ViewController: UIViewController {
    let userFeed = Client.shared.flatFeed(feedSlug: "FLAT_FEED_ID", userId: "LOGGED_USER_ID")

    func doTheThing() {
        let activity = Activity(actor: User.current!, verb: "pin", object: .text("Place:72482734"))

        userFeed.add(activity) { result in
            print("Callback called") // ----> Never called
            if let activity = try? result.get() {
                print(activity.id) // ----> Never called
            } else {
                print("FAILED") // ----> Never called
            }
        }

        userFeed.get() { result in
            print(result) // ---->  Never called
        }
    }
}