如何检测 iOS App 是由特定用户(不是在特定设备上)首次启动的?

Posted

技术标签:

【中文标题】如何检测 iOS App 是由特定用户(不是在特定设备上)首次启动的?【英文标题】:How to detect that iOS App was launched for first time by specific user (not on specific device)? 【发布时间】:2020-02-07 09:14:02 【问题描述】:

我在我的应用程序中使用 cloudKit + Core Data (ios 13+) (swift)。

我无法弄清楚如何检测应用程序的第一次运行无论设备如何以初始化一些默认数据。

有很多帖子如何检测 iOS 应用在特定设备上的首次启动 - 这很简单。我找不到检测特定用户首次运行应用程序的解决方案,或者换句话说 - 如果在用户的 iCloud 中确实存在具有特定容器标识符的初始化容器。

如果用户之前已经在另一台设备上使用过该应用程序,那么在新设备上首次启动时,将与 iCloud 同步,应用程序将使用用户的数据。但是如果用户之前从未使用过该应用程序,我需要初始化一些数据。

我正在寻找如何处理它几个小时的线索,找不到任何相关的东西。 任何的想法?

提前感谢您的帮助。

【问题讨论】:

只在云端查看初始数据? 是的。如果有或没有。 【参考方案1】:

更多关于您的 cloudkit 架构的信息会有所帮助,但假设您使用 publicDB 来存储信息,当用户第一次执行将数据保存到 cloudkit 的操作时,将为用户创建一条唯一记录。

因此,您可以检查并查看 cloudkit 中 User 对象的 createDate 时间戳,并与当前时间进行比较(有点笨拙,但可能)。

获取用户的示例代码:

iCloudUserIDAsync  (recordID: CKRecord.ID?, error: NSError?) in
    if let userID = recordID?.recordName 
        self.loggedInUserID = userID

        self.loggedInWithiCloud = true
     else 
        self.loggedInWithiCloud = false

        print("Fetched iCloudID was nil")
    

另外,更优雅的方式是,您可以在首次启动时将布尔标志写入用户对象 CloudKit(或在 CoreData 中本地)。然后在任何启动时为登录的 iCloud 用户获取整个用户对象,然后您可以对其进行初始化,然后从那里对您的布尔变量进行操作。

获取完整用户并在本地初始化的示例代码:

    CKContainer.default().publicCloudDatabase.fetch(withRecordID: userRecordID)  (results, error ) in
        if results != nil 
          //now that you have the user, you can perform your checks
            self.currentUser = MyUser(record: results!)
        
        if let error = error 
            print("couldn't set user reference")
        
        DispatchQueue.main.async 
            completion(nil)
        
    

【讨论】:

以上是关于如何检测 iOS App 是由特定用户(不是在特定设备上)首次启动的?的主要内容,如果未能解决你的问题,请参考以下文章

iOS WatchOS5 - 如何以编程方式检测 Apple Watch 是不是在特定时间间隔戴在手腕上(佩戴)?

如何使用消息队列处理特定的客户端/用户?

Ionic App 被 iOS“仅限特定网站”限制阻止

当用户触摸屏幕的特定部分时如何触发事件 - ios?

如何衡量 iOS 应用中用户完成特定操作所需的时间

如何检测 IP 属于美国的特定州