2022-02-27 23:02:58 +08:00
|
|
|
//
|
|
|
|
// WXDelegate.swift
|
|
|
|
// PushDeer
|
|
|
|
//
|
|
|
|
// Created by HEXT on 2022/2/26.
|
|
|
|
//
|
|
|
|
|
|
|
|
import Foundation
|
|
|
|
|
|
|
|
#if !targetEnvironment(macCatalyst) && !APPCLIP && !SELFHOSTED
|
|
|
|
|
|
|
|
@MainActor
|
|
|
|
class WXDelegate: NSObject, WXApiDelegate {
|
|
|
|
|
|
|
|
static let shared = WXDelegate()
|
|
|
|
private override init() { super.init() }
|
|
|
|
|
|
|
|
func onReq(_ req: BaseReq) {
|
|
|
|
print(#function, req.type, req.openID)
|
|
|
|
}
|
|
|
|
func onResp(_ resp: BaseResp) {
|
|
|
|
print(#function, resp.type, resp.errCode, resp.errStr)
|
|
|
|
if let resp = resp as? SendAuthResp { // 是登录授权的响应
|
|
|
|
print(resp.code as Any, resp.state as Any, resp.lang as Any, resp.country as Any)
|
|
|
|
switch resp.errCode {
|
|
|
|
case 0: // 用户同意
|
|
|
|
if let code = resp.code, let state = resp.state {
|
|
|
|
Task {
|
|
|
|
do {
|
|
|
|
if state == "login" {
|
|
|
|
AppState.shared.token = try await HttpRequest.wechatLogin(code: code).token
|
|
|
|
// 给 AppState 的 token 赋值后, SwiftUI 写的 ContentView 页面会监听到并自动进入主页
|
2022-09-14 00:14:19 +08:00
|
|
|
// 登录成功后的处理
|
|
|
|
AppState.shared.loginAfter()
|
|
|
|
|
2022-02-27 23:02:58 +08:00
|
|
|
} else if state == "bind" {
|
|
|
|
_ = try await HttpRequest.mergeUser(type: "wechat", tokenorcode: code)
|
|
|
|
// 合并成功, 更新数据
|
|
|
|
AppState.shared.userInfo = try await HttpRequest.getUserInfo()
|
|
|
|
}
|
|
|
|
} catch {
|
|
|
|
HToast.showError(error.localizedDescription)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break
|
|
|
|
case -2: // 用户取消
|
|
|
|
HToast.showWarning(NSLocalizedString("你已取消授权", comment: ""))
|
|
|
|
break
|
|
|
|
case -4: // 用户拒绝授权
|
|
|
|
HToast.showError(NSLocalizedString("你已拒绝授权", comment: ""))
|
|
|
|
break
|
|
|
|
default:
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|