如何构建 swift POST 请求以满足 Sign In With Apple 令牌撤销要求?
我不确定 form-data、client_id、client_secret、token 或 token_type_hint 应该是什么。我能够实现“使用 Apple 登录”来创建用户,但对其中的撤销部分非常迷失。
我希望用 Swift 来执行这个客户端,因为那是最方便的。Firebase 可能正在开发一种内置于其 SDK 中的解决方案,但不确定这是否是适合使用 Firebase 的开发人员的通用解决方案。
https://developer.apple.com/documentation/sign_in_with_apple/revoke_tokens#url
编辑:要求来源https://developer.apple.com/support/offering-account-deletion-in-your-app
以下函数位于同一类 (ViewModel) 中。第一个是我的登录/注册流程。一些代码与 Firebase 流相关,基本上可以忽略,但您可以看到我抓取了 client_secret 的令牌字符串和随机数。第二个函数类似于令牌撤销的 POST 请求(从未显示的删除帐户函数调用)。有人使用这种方法/样板取得过成功吗?
在我的应用程序中点击按钮来测试下面的令牌撤销方法会返回状态代码 400。我无法使用此方法撤销令牌,并且我不确定还能做什么。
public func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
// Sign in using Firebase Auth
if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
guard let nonce = currentNonce else {
print("Invalid state: A login callback was received, but no login request was sent.") …Run Code Online (Sandbox Code Playgroud) 有人在 Firebase 版本 8.11.0 中遇到过此问题吗?我不确定如何为我的应用程序抑制它。我需要将 AppCheck 集成到我的项目中吗?
\n[Firebase/Firestore][I-FST000001] AppCheck failed: 'The operation couldn\xe2\x80\x99t be completed. Too many attempts. Underlying error: The operation couldn\xe2\x80\x99t be completed. The server responded with an error: \n - URL: https://firebaseappcheck.googleapis.com/v1beta/projects/............\n - HTTP status code: 400 \n - Response body: {\n "error": {\n "code": 400,\n "message": "App not registered: ...............",\n "status": "FAILED_PRECONDITION"\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n 我在 iOS 15 和 iOS 16 中一直使用以下扩展,似乎没有任何问题。对于上下文,我在项目中实现了此功能,以提供保留向后滑动手势的功能,以便在视图层次结构(子级到父级)中向后导航。这是因为使用后退按钮的自定义实现(出于 UI 样式目的)隐藏 SwiftUI 中的工具栏或导航栏会导致向后滑动手势丢失。
这就是这个扩展发挥作用的地方。感谢尼克·贝鲁奇的最高评价答案,我在这里找到了这一点。隐藏导航栏而不丢失 SwiftUI 中的向后滑动手势
现在的问题是,在 iOS 17.0 中,当从子视图滑回后返回到根视图时,根视图会在设备和模拟器上冻结并中断。有没有人重现或遇到过这个问题?要完全重新创建场景,只需.toolbar(.hidden)在子视图上使用即可,或者.navigationBarBackButtonHidden()改为使用。
还需要注意的是,我正在使用dismiss()弹出的视图。下面的片段...您只需根据自己的喜好将自定义后退按钮放置在子视图中即可重新创建此示例。
extension UINavigationController: UIGestureRecognizerDelegate {
override open func viewDidLoad() {
super.viewDidLoad()
interactivePopGestureRecognizer?.delegate = self
}
public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
return viewControllers.count > 1
}
}
Run Code Online (Sandbox Code Playgroud)
struct CustomBackButton: View {
@Environment(\.dismiss) var dismiss
var body: some View {
Button(action: {
dismiss()
}) {
// your pretty swiftui code here
}
}
} …Run Code Online (Sandbox Code Playgroud) 我正在下面的示例代码中寻找以下错误的解决方案。我尝试使用 SwiftUI 4 和 iOS 16.0 导航 API 变更集实现导航器模式。
下面的示例将在 Xcode 14.0+ 中编译,如果在模拟器或 iOS 16.0 设备中运行,将会产生我所描述的错误。我想知道这是缺乏知识还是平台错误。通过我的日志,我可以看到,当我用不完整的向后滑动手势引发错误时,导航路径的元素计数上升到 2,而实际上它应该在根处返回到 0,并且仅在第一层保留 1 个元素看法。
有没有办法可以更好地管理此类视图层次结构的路径?或者,这是一个平台级错误吗?
import SwiftUI
enum AppViews: Hashable {
case kombuchaProductsView
case coffeeProductsView
case customerCartView
}
struct RootView: View {
@StateObject var drinkProductViewModel = DrinkProductViewModel()
var body: some View {
NavigationStack(path: self.$drinkProductViewModel.navPath) {
List {
Section("Products") {
NavigationLink(value: AppViews.kombuchaProductsView) {
HStack {
Text("View all Kombuchas")
Spacer()
Image(systemName: "list.bullet")
}
}
NavigationLink(value: AppViews.coffeeProductsView) {
HStack {
Text("View all Coffees")
Spacer()
Image(systemName: "list.bullet")
} …Run Code Online (Sandbox Code Playgroud) drag swiftui swiftui-navigationlink ios16 swiftui-navigationstack