在新的SwiftUI生命周期中,通常不再有AppDelegate
。但是,为了实现Firebase消息传递,建议在Firebase文档中实现AppDelegate
,并使用以下命令将其附加:
@main
struct ExampleApp: SwiftUI.App {
// register app delegate for Firebase setup
@UIApplicationDelegateAdaptor(AppDelegate.self) var delegate //<--- HERE
@StateObject var appState = AppState()
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(appState)
}
}
}
在此AppDelegate
函数中,用户可获取FCM令牌,通过该令牌识别设备,以便随后向其远程发送通知。此令牌必须发送到服务器。这可在AppDelegate
中的相应函数内完成。但是,存在AppState
类(ObservableObject协议),其处理用户数据并写入服务器,所以写传递给这个类(或者在类中从AppDelegate
检索?)然后从那里推送它会更有意义。
如何才能做到这一点?
编辑:我想这可以通过在AppDelegate
中使用static
属性来实现,如this answer中所述。使用静态全局访问变量不是坏习惯吗?有没有其他(更好的)方法?
2条答案
按热度按时间t3irkdon1#
您可以使用访问
delegate
的“老方法”来完成此操作然后你就可以用
yourToken
引用delegate
中的属性mf98qq942#
下面是我如何将AppDelegate与ObservableObject协议结合使用,包括发布属性:
要读取令牌,请在需要令牌的视图中分配一个environmentObject:
然后根据需要引用appDelegate: