Skip to content

Instantly share code, notes, and snippets.

@masashi-sutou
Last active June 15, 2019 02:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save masashi-sutou/cecc9467c09943fd04657e50de6dc7d7 to your computer and use it in GitHub Desktop.
Save masashi-sutou/cecc9467c09943fd04657e50de6dc7d7 to your computer and use it in GitHub Desktop.
import Foundation
import Swifter
@objc class SwifterWrapper: NSObject {
@objc static let share: SwifterWrapper = SwifterWrapper()
private var twitter: Swifter?
private var callbackUrl: URL?
private override init() {
}
// MARK: - キーとシークレットの設定
@objc func setup(consumerKey: String, consumerSecret: String) {
callbackUrl = URL(string: "twitterkit-" + consumerKey + "://")
twitter = Swifter(consumerKey: consumerKey, consumerSecret: consumerSecret)
}
// MARK: - スキーマのコールバックハンドリング
@objc class func handleOpen(url: URL) -> Bool {
Swifter.handleOpenURL(url)
return true
}
// MARK: - 連携
@objc func login(controller: UIViewController, success: @escaping (_ userID: String?, _ screenName: String?, _ token: String?, _ tokenSecret: String?) -> Void, failure: @escaping (_ error: Error?) -> Void) {
guard let callbackUrl = self.callbackUrl else {
failure(nil)
return
}
twitter?.authorize(withCallback: callbackUrl, presentingFrom: controller, success: { (accessToken, _) in
guard let key = accessToken?.key else {
failure(nil)
return
}
guard let secret = accessToken?.secret else {
failure(nil)
return
}
guard let userID = accessToken?.userID else {
failure(nil)
return
}
guard let screenName = accessToken?.screenName else {
failure(nil)
return
}
success(userID, screenName, key, secret)
}, failure: { (error) in
failure(error)
})
}
// MARK: - つぶやき投稿
func inviteTweet(status: String, media: Data?) {
guard let media = media else {
twitter?.postTweet(status: status)
return
}
twitter?.postTweet(status: status, media: media)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment