好吧所以我的情况有点复杂,但基本上我有一个Apple Watch扩展程序与我的应用程序连接,它使用Firebase接收和发送数据。我想在手表中使用与应用程序相同的功能,唯一的问题是我需要使用相同的Firebase参考,因为我使用Google身份验证,我需要保持身份验证数据相同(除非有另一种方式)。所以我手表所做的是最初请求一些数据:所选计时器的索引(它是一个计时器应用程序)和Firebase参考变量。但是,当iPhone应用程序使用reply()函数并发送回如下字典时:
reply(["replyInfoType": "watchInfo", "selectedTimerKey": keySelected, "refFirebase": ref])
ref
变量定义为var ref = Firebase(url:"https://my-app-url.firebaseio.com/")
。
编译时没有错误,但是当我运行watch扩展并附加到应用程序进程时,我的应用程序在这里抛出了一个不错的SIGABRT:
根本没有在日志中打印任何内容。在我取消暂停过程后,应用程序崩溃了。我没有关于它来自哪里的线索。如果我没有在字典中包含ref
变量,那么它运行正常,除非我的监视应用没有阅读Firebase数据库的权限。
答案 0 :(得分:3)
有official documentation for Firebase and the Apple Watch on user authentication。
为主机应用和扩展程序启用应用组。然后使用NSUserDefaults
在用户登录时将用户的身份验证令牌保存在主机应用程序中。
let defaults = NSUserDefaults(suiteName: "group.username.SuiteName")!
ref.observeAuthEventWithBlock { [unowned self] (authData: FAuthData!) in
if authData != nil {
defaults.setObject(authData.token, forKey: "FAuthDataToken")
defaults.synchronize()
}
}
在Watch App Extension中,从NSUserDefaults
检索身份验证令牌,并在authWithCustomToken
功能中调用awakeWithContext
。
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
ref = Firebase(url: "https://<your-firebase-app>.firebaseio.com/updates")
updates = [FDataSnapshot]()
// Use the same suiteName as used in the host app
let defaults = NSUserDefaults(suiteName: "group.username.SuiteName")!
// Grab the auth token
let authToken = defaults.objectForKey("FAuthDataToken") as? String
// Authenticate with the token from the NSUserDefaults object
ref.authWithCustomToken(authToken, withCompletionBlock: { [unowned self] (error: NSError!, authData: FAuthData!) in
if authData != nil {
println("Authenticated inside of the Watch App!")
} else {
println("Not authenticated")
}
})
}
答案 1 :(得分:1)
通过 handleWatchKitRequest 方法在手表和iOS设备之间移动的所有数据都必须是可序列化的。
您可以尝试在Firebase对象上使用NSKeyedArchiver来查明它是否可序列化。
您是否尝试将Firebase参考的链接作为字符串返回,然后在Watch上实例化Firebase对象? (但可能不是在iOS和Watch应用程序中监听firebase节点的最佳解决方案)
另外,我建议您查看NSUserDefaults和共享容器,这可能是实现您想要做的事情的好方法,这里是链接:https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/WatchKitProgrammingGuide/DesigningaWatchKitApp.html#//apple_ref/doc/uid/TP40014969-CH3-SW4