LineSDKLoginManager.swift 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. //
  2. // LineSDKLoginManager.swift
  3. //
  4. // Copyright (c) 2016-present, LY Corporation. All rights reserved.
  5. //
  6. // You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
  7. // copy and distribute this software in source code or binary form for use
  8. // in connection with the web services and APIs provided by LY Corporation.
  9. //
  10. // As with any software that integrates with the LY Corporation platform, your use of this software
  11. // is subject to the LINE Developers Agreement [http://terms2.line.me/LINE_Developers_Agreement].
  12. // This copyright notice shall be included in all copies or substantial portions of the software.
  13. //
  14. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
  15. // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  17. // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  18. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  19. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  20. //
  21. @objcMembers
  22. public class LineSDKLoginManager: NSObject {
  23. let _value: LoginManager
  24. init(_ value: LoginManager) { _value = value }
  25. public static let sharedManager = LineSDKLoginManager(.shared)
  26. public var currentProcess: LineSDKLoginProcess? { return _value.currentProcess.map { .init($0) } }
  27. public var isSetupFinished: Bool { return _value.isSetupFinished }
  28. public var isAuthorized: Bool { return _value.isAuthorized }
  29. public var isAuthorizing: Bool { return _value.isAuthorizing }
  30. @available(*, deprecated,
  31. message: "Set `preferredWebPageLanguage` in `LineSDKLoginManagerParameters` instead.")
  32. public var preferredWebPageLanguage: String? {
  33. get { return _value.preferredWebPageLanguage?.rawValue }
  34. set { _value.preferredWebPageLanguage = newValue.map { .init(rawValue: $0) } }
  35. }
  36. public func setup(channelID: String, universalLinkURL: URL?) {
  37. _value.setup(channelID: channelID, universalLinkURL: universalLinkURL)
  38. }
  39. @discardableResult
  40. public func login(
  41. permissions: Set<LineSDKLoginPermission>?,
  42. inViewController viewController: UIViewController?,
  43. completionHandler completion: @escaping (LineSDKLoginResult?, Error?) -> Void
  44. ) -> LineSDKLoginProcess?
  45. {
  46. let parameters = LineSDKLoginManagerParameters()
  47. return login(
  48. permissions: permissions,
  49. inViewController: viewController,
  50. parameters: parameters,
  51. completionHandler: completion
  52. )
  53. }
  54. @discardableResult
  55. public func login(
  56. permissions: Set<LineSDKLoginPermission>?,
  57. inViewController viewController: UIViewController?,
  58. parameters: LineSDKLoginManagerParameters,
  59. completionHandler completion: @escaping (LineSDKLoginResult?, Error?) -> Void
  60. ) -> LineSDKLoginProcess?
  61. {
  62. let process = _value.login(
  63. permissions: Set((permissions ?? [.profile]).map { $0.unwrapped }),
  64. in: viewController,
  65. parameters: parameters._value)
  66. {
  67. result in
  68. result
  69. .map(LineSDKLoginResult.init)
  70. .match(with: completion)
  71. }
  72. return process.map { .init($0) }
  73. }
  74. public func logout(completionHandler completion: @escaping (Error?) -> Void) {
  75. _value.logout { result in result.matchFailure(with: completion) }
  76. }
  77. public func application(
  78. _ app: UIApplication,
  79. open url: URL,
  80. options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool
  81. {
  82. return _value.application(app, open: url, options: options)
  83. }
  84. // MARK: - Deprecated
  85. @available(*, deprecated, message: """
  86. Convert the `options` to a `LoginManager.Parameters` value and
  87. use `login(permissions:inViewController:parameters:completionHandler:)` instead.")
  88. """)
  89. @discardableResult
  90. public func login(
  91. permissions: Set<LineSDKLoginPermission>?,
  92. inViewController viewController: UIViewController?,
  93. options: [LineSDKLoginManagerOptions]?,
  94. completionHandler completion: @escaping (LineSDKLoginResult?, Error?) -> Void
  95. ) -> LineSDKLoginProcess?
  96. {
  97. let options: LoginManagerOptions = (options ?? []).reduce([]) { (result, option) in
  98. result.union(option.unwrapped)
  99. }
  100. let parameters = LoginManager.Parameters(
  101. options: options,
  102. language: preferredWebPageLanguage.map { .init(rawValue: $0) }
  103. )
  104. return login(
  105. permissions: permissions,
  106. inViewController: viewController,
  107. parameters: .init(parameters),
  108. completionHandler: completion
  109. )
  110. }
  111. }