質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

332閲覧

[Swift] TwitterKitを用いたFirebase認証について

ishiishiyay

総合スコア33

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/10/07 12:29

Twitter認証で困っています。ご助言頂けますと幸いです。

ユーザーがアプリに新規登録の際に、Twitter認証を可能にしたく思います。TwitterのAPIを用いて、情報を取得し、Firebaseに連携させています。Twitterのアプリが入っていれば、そのままアプリが開き、連携ボタンをワンプッシュするだけ登録できるようにしたいです。

下記のコードで実行しますと、スクリーンショットの通り上手く行きますが、
![イメージ説明

キャンセルを押すと、次にWeb版のTwitter?(SFSafariView)が呼ばれてしまいます。

![イメージ説明

あるいは、最初のTwitterネイティブアプリで連携を押しても、時たま、その後にWeb版Twitter画面が出てくることがあります。(呼び出されず、そのまま先に進めることもあります。)一切Web版が出てこないようにする、あるいは、Twitterアプリがインストールされていない時にだけWeb版を呼び出すといった処理をするにはどうしたら良いでしょうか。アドバイス頂けますと幸いです。下記コード記載します。

Swift

1import TwitterKit 2 3class LoginVC: UIViewController { 4 var twitterSession: TWTRSession? 5 var uid2: String = "" 6 var name: String = "" 7 var username: String = "" 8 var profileImage: UIImage? 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 13 } 14 15 @IBAction func loginWithTwitter(_ sender: Any) { 16 TWTRTwitter.sharedInstance().logIn { (session, err) in 17 if let err = err { 18 return 19 } 20 guard let session = session else { return } 21 self.twitterSession = session 22 self.signupToFirebaseWithTwitter() 23 } 24 25 } 26 27 func signupToFirebaseWithTwitter(){ 28 guard let twitterSession = twitterSession else {return} 29 let credential = TwitterAuthProvider.credential(withToken: twitterSession.authToken, secret: twitterSession.authTokenSecret) 30 Auth.auth().signIn(with: credential) { (user, err) in 31 if let err = err { 32 print("Failed to create Firebase user:", err) 33 } 34 self.fetchTwitterUser() 35 } 36 } 37 38 func fetchTwitterUser() { 39 guard let twitterSession = twitterSession else { return } 40 let client = TWTRAPIClient() 41 client.loadUser(withID: twitterSession.userID) { (user, err) in 42 if let err = err { 43 return 44 } 45 guard let user = user else { return } 46 self.name = user.name 47 self.username = twitterSession.userName 48 let profilePictureUrl = user.profileImageLargeURL 49 guard let url = URL(string: profilePictureUrl) else { 50 return 51 } 52 53 URLSession.shared.dataTask(with: url, completionHandler: { (data, response, err) in 54 if err != nil { 55 return 56 } 57 guard let data = data else { 58 return 59 } 60 self.profileImage = UIImage(data: data) 61 self.saveUserIntoFirebaseDatabase() 62 63 }).resume() 64 65 } 66 67 } //func end 68 69 func saveUserIntoFirebaseDatabase() { 70 71 guard let uid = Auth.auth().currentUser?.uid, 72 let profileImageUploadData = profileImage?.jpegData(compressionQuality: 1) else {return} 73 74 let imageName = UUID().uuidString 75 76 Storage.storage().reference().child("profile_images").child(imageName).putData(profileImageUploadData, metadata: nil) { (metadata, err) in 77 let profileImageUrl = metadata?.downloadURL()?.absoluteString 78 print("Successfully uploaded profile image into Firebase storage with URL") 79 let dictionaryValues = ["name": self.name, 80 "username": self.username, 81 "profileImageUrl": profileImageUrl, 82 "uid": uid 83 ] 84 let values = [uid: dictionaryValues] 85 86 Database.database().reference().child("Contacts").updateChildValues(values, withCompletionBlock: { (err, reference) in 87 print("success") 88 }) 89 } 90 let storyboard: UIStoryboard = self.storyboard! 91 let nextVC = storyboard.instantiateViewController(withIdentifier: "TabBarController") 92 self.present(nextVC, animated: true, completion: nil) 93 } 94} 95

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問