SwiftUIでEvernoteの認証をする
前回の続き
前提
すでにEvernoteのAPIキーを取得済みで話を進めていきます。
サンドボックスで実験していくのですが、以下でAPIキーの取得ができます。
一年以上前にすでにAPIキーを取得していたのでここどうやってやったか忘れた。
一応こちらでざっくりとした内容を書いておきます。
以下を参考にすれば問題なくできるはずです。
実装
まずは認証に必要なConsumer KeyとConsumer Secretをセットする。
ENSession.setSharedSessionConsumerKey(<Consumer Key>, consumerSecret:<Consumer Secret>, optionalHost: ENSessionHostSandbox)
// using a developer token:
// ENSession.setSharedSessionDeveloperToken(<Dev Token>, noteStoreUrl: <Note Store URL>)
その後に以下認証を実行したい。
NSession.shared.authenticate(with: self, preferRegistration: false, completion: { (_error: Error?) in
})
ただ、中身を確認してみるとwithのところでUIViewControllerが必要となっている。
- (void)authenticateWithViewController:(UIViewController *)viewController
preferRegistration:(BOOL)preferRegistration
completion:(ENSessionAuthenticateCompletionHandler)completion;
というわけで、UIViewControllerを用意する。
UIViewControllerRepresentableを使って認証時のみUIKitに依存するような作りを用意する。
import UIKit
import SwiftUI
import EvernoteSDK
/**
SwiftUIでviewControllerを表示する際に必要なコード
*/
struct EvernoteViewControllerWrapper: UIViewControllerRepresentable {
typealias UIViewControllerType = EvernoteViewController
func makeUIViewController(context: Context) -> UIViewControllerType {
return EvernoteViewController()
}
func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {
}
}
/**
従来のViewControllerでviewの作成
*/
class EvernoteViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// Do any additional setup after loading the view.
// このタイミングならOK
initENSession()
}
fileprivate func initENSession() {
ENSession.setSharedSessionConsumerKey("your key", consumerSecret: "your secret", optionalHost: ENSessionHostSandbox)
if (ENSession.shared.isAuthenticated) {
print("Authenticated")
return
}
print(ENSession.shared.isAuthenticated)
ENSession.shared.authenticate(with: self, preferRegistration: false, completion: { (_error: Error?) in
print("Authenticate Completion")
})
}
}
以下のようにして使う。
これで画面が立ち上がったタイミングで認証しにいくようになる。
var body: some View {
EvernoteViewControllerWrapper().frame(height: 0)
}
ディスカッション
コメント一覧
まだ、コメントがありません