🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Firebase

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

Firebase Authentication

Firebase Authenticationは、Firebaseを利用したユーザーの認証機能です。バックエンドサービス、SDK、アプリでのユーザー認証に使用できるUIライブラリが用意されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

1191閲覧

ボタンによって違う遷移先に飛びたい

Superlounge1998

総合スコア15

Firebase

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

Firebase Authentication

Firebase Authenticationは、Firebaseを利用したユーザーの認証機能です。バックエンドサービス、SDK、アプリでのユーザー認証に使用できるUIライブラリが用意されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2020/12/03 09:19

前提・実現したいこと

FirebaseのAuthenticationをswiftで使用しています。
2つのうちどちらかのボタンを選択するとそれぞれでauthViewControllerが出現する
ログインが完了したらそれぞれの遷移先にうつる、という仕様を考えています

発生している問題・エラーメッセージ

ボタンが二つありそれぞれ遷移先が違うためこんがらがってしまいました

該当のソースコード

import UIKit import Firebase import FirebaseUI import FirebaseAuth import GoogleSignIn class CentralSigninViewController: UIViewController, FUIAuthDelegate { @IBOutlet weak var authButtonP: UIButton! @IBOutlet weak var authButtonC: UIButton! var PauthUI: FUIAuth { get { return FUIAuth.defaultAuthUI()!}} var CauthUI: FUIAuth { get { return FUIAuth.defaultAuthUI()!}} let providers: [FUIAuthProvider] = [ FUIGoogleAuth(), FUIFacebookAuth(), FUIEmailAuth() ] override func viewDidLoad() { super.viewDidLoad() self.PauthUI.delegate = self self.PauthUI.providers = providers self.CauthUI.delegate = self self.CauthUI.providers = providers authButtonP.addTarget(self,action: #selector(self.authButtonPTapped(sender:)),for: .touchUpInside) authButtonC.addTarget(self,action: #selector(self.authButtonCTapped(sender:)),for: .touchUpInside) } //ボタンPを押した時の動作 @objc func authButtonPTapped(sender : AnyObject) { // FirebaseUIのViewの取得 let authViewController = self.PauthUI.authViewController() // FirebaseUIのViewの表示 self.present(authViewController, animated: true, completion: nil) } //ボタンCを押した時の操作 @objc func authButtonCTapped(sender : AnyObject) { // FirebaseUIのViewの取得 let authViewController = self.CauthUI.authViewController() // FirebaseUIのViewの表示 self.present(authViewController, animated: true, completion: nil) } //この行以降がおかしいと考えています public func authUI(_ authUI: FUIAuth, didSignInWith user: User?, error: Error?){ // 認証に成功した場合 if error == nil { self.performSegue(withIdentifier: "CentralViewController", sender: nil) } else { //失敗した場合 print("error") } } public func authUI(_ authUI: FUIAuth, didSignInWith user: User?, error: Error?){ // 認証に成功した場合 if error == nil { self.performSegue(withIdentifier: "PeripheralViewController", sender: nil) } else { //失敗した場合 print("error") } } }

試したこと

https://qiita.com/matsuei/items/4f56c0f8d9a1b96cd9f0
このサイトなどを参考にさせていただいています
このサイトでは認証画面から離れた時に呼ばれる関数とあるので、それをPボタンとCボタンで分けたいのですがどうすればいいかわかりません
アイデアだけでもいただければ幸いです

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

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

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

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

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

guest

回答1

0

ベストアンサー

swift

1public func authUI(_ authUI: FUIAuth, didSignInWith user: User?, error: Error?)

というメソッドはFUIAuthのデリゲートメソッドなので、処理が完了したら自動的に呼び出されます。
ですので、メソッドの呼び出しで処理を分けることはちょっとむずかしいと思います。

いくつか方法はあると思いますが、最も手軽な方法としては、あまりおすすめはできませんがどちらのボタンが押されたかを保持しておくことです。
例えば、タップしたボタンのタイプをenumなどで表現して、それを変数に保持しておきます。

swift

1enum ButtonType { 2 case p 3 case c 4} 5 6var type: ButtonType! 7 8@objc func authButtonPTapped(sender : AnyObject) { 9 self.type = .p 10 let authViewController = self.PauthUI.authViewController() 11 self.present(authViewController, animated: true, completion: nil) 12} 13 14@objc func authButtonCTapped(sender : AnyObject) { 15 self.type = .c 16 let authViewController = self.CauthUI.authViewController() 17 self.present(authViewController, animated: true, completion: nil) 18} 19 20public func authUI(_ authUI: FUIAuth, didSignInWith user: User?, error: Error?){ 21 switch type { 22 case .p: 23 // pボタンが押されたときの処理 24 case .c: 25 // cボタンが押されたときの処理 26 } 27}

上記のコードは変数を強制的にunwrapしたりしているので気をつけてください。
また、より堅牢に実装を行うのであればデリゲートのオブジェクトを個別に用意したりするほうが良いと思います。

投稿2020/12/04 02:04

KyoheiG3

総合スコア59

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

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

Superlounge1998

2020/12/04 06:55

ありがとうございます! swith typeにcase none: breakを追加して思い通り動作させることができました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問