Files
peko-ios/YuMi/Tools/YMLine/PILineManager.swift
2024-03-20 19:55:26 +08:00

67 lines
2.4 KiB
Swift

//
// YMLineManager.swift
// YuMi
//
// Created by duoban on 2023/12/29.
//
import Foundation
import LineSDK
@objc public enum LineLoginResultStatus: NSInteger {
case error
case cancelled
case success
}
public class PILineLoginManager: NSObject {
private static var manager: PILineLoginManager?
@objc public class func getSharedInstance() -> PILineLoginManager {
guard let instance = manager else {
manager = PILineLoginManager()
return manager!
}
return instance
}
@objc public class func registerLine() {
LoginManager.shared.setup(channelID: "1657475529", universalLinkURL: nil)
}
@objc public class func applicationOpenurl(_ app: UIApplication,
open url: URL?) -> Bool {
return LoginManager.shared.application(app, open: url)
}
@objc public class func application(
_ application: UIApplication,
continueWithUserActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
return LoginManager.shared.application(application, open: continueWithUserActivity.webpageURL)
}
@objc public func loginLine(fromController: UIViewController, completeWithError: @escaping (_ loginStatus: LineLoginResultStatus, _ token: String?, _ userId:String?, _ email: String? , _ error: Error?) -> Void) {
var param = LoginManager.Parameters.init()
param.allowRecreatingLoginProcess = true
LoginManager.shared.login(permissions: [.openID, .profile], in: fromController, parameters: param) { (result) in
switch result {
case .success(let loginResult):
if let _ = loginResult.accessToken.IDTokenRaw {
completeWithError(.success, loginResult.accessToken.value, loginResult.userProfile?.userID ?? "", nil, nil)
} else {
completeWithError(.success, "","", nil, nil)
}
case .failure(let error):
print(error)
completeWithError(.cancelled, "","", nil, nil)
}
}
}
@objc public class func destroyLine() {
PILineLoginManager.manager = nil
}
}