1

私のアプリケーションでは、Firebase/FirebaseAuth/FirebaseDatabase/FirebaseStorage /などのPodをダウンロードしてインストールし、AppDelegateなどでFIRApp.configure()を使用しました。ユーザーのログインとログアウトに成功し、アップロード/ダウンロードできましたデータ。突然Firebaseが私のユーザのUUIDを認識していません。なぜ私は分からないが、それはちょうど停止した。Firebase Unique Identifier(ユーザID)が認識されず、データベースにアクセスしようとするとアプリがクラッシュしますか? Swift iOS9

アプリがすべてロードされても(まだUUIDはありませんが、実際にアプリが読み込まれます)、Firebaseに接続してデータをアップロード/ダウンロードする必要がある画面に移動しようとするとクラッシュします。これはFirebaseにアクセスする必要があるすべての画面で行われますが、他の画面では実行されません。クラッシュが発生する行を表示するために、以下のColorControllerビューコントローラーを追加しました。

私のAppDelegate 'didFinishLaunchingWithOptions'では、アプリケーションがFirebaseに接続されていることを確認するコードを追加し、「正常に接続されました」と記録します。しかし、print文でUUIDをチェックするコードをいくつか追加し、nilを返します。

アイデア?ここで

import UIKit 
import Firebase 
import FirebaseAuth 
import FirebaseDatabase 
import FirebaseStorage 
import GoogleMaps 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 

    override init() { 
     super.init() 

     //Configure App for FireBase 
     FIRApp.configure() 

     //Firebase app Offline Updates 
     FIRDatabase.database().persistenceEnabled = true 

     GMSServices.provideAPIKey("myAPIKey") 
    }//end override init 


func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    //Make sure the app is connected to Firebase 
    let connectedRef = FIRDatabase.database().referenceWithPath(".info/connected") 
    connectedRef.observeEventType(.Value, withBlock: { 

     (connected) in 

    let currentUserID = FIRAuth.auth()?.currentUser?.uid 

    if let boolean = connected.value as? Bool where boolean == true { 
     //This line successfully prints 
     print("\nApp Delegate: Firebase is successfully connected\n") 
     print("\nApp Delegate: UUID is \(currentUserID)\n") 
    } else { 
     print("\nApp Delegate: Firebase is NOT connected\n") 
     } 
    }) 


    if currentUserID != nil{ 
     print("\nApp Delegate: UUID is \(currentUserID)\n") 
    } else{ 
     //These 2 lines print and UUID prints as "nil" 
     print("\nApp Delegate: No User ID Available\n") 
     print("\nApp Delegate: UUID is \(currentUserID)\n") 
    } 
} 

ColorController

//this is from line 'let usersRef = self.dbRef.child("users")' 
Thread1: EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP, subcode=0x0) 
+0

「UUID」とは、ユーザーの** UID **(各Firebase認証ユーザーの一意のID)を参照しているようです。そのことを理解するまでにはしばらく時間がかかりました。正しい用語を使用するように質問を更新したい場合があります。 –

+0

何がクラッシュするのか分かりません...(クラッシュのスタックトレースのような)詳細を取得して質問に追加できる場合は、役立つかもしれません。 –

+0

@ Frank van Puffelen私は頭字語を今更新するつもりです。私は一意のユーザーIDを略してuuidを使用しました。 –

答えて

0

問題は、私はこのページには含まれていないSignUp VC。 @ジャスティン・ドーンはそれを理解した。あなたはこの方法では、ユーザー(使用者から、エラー)を使用して、新しいアカウントを作成すると、私はsignUpButtonアクションで

//SignUpController Property 
let userID = FIRAuth.auth()?.currentUser?.uid 

にクラスのプロパティの1つを設定していたサインアップVCの私は

FIRAuth.auth()?.createUserWithEmail(self.emailTextField.text!, password: self.passwordTextField.text!, completion: { 

      (user, error) in 

を持っていましたuser!uidを介してアクセスできるuidを持つ新しく作成されたユーザーです。 userIDプロパティとこのuidには2つの異なる値があります。

FIRAuth.auth()?.createUserWithEmail(self.emailTextField.text!, password: self.passwordTextField.text!, completion: { 

       (user, error) in 

     //The property should be removed from the top of the class to here 
     let userID = FIRAuth.auth()?.currentUser?.uid 

     //This should always print a successful match 
     if user!.uid != currentUserID{ 
       print("\nYOUR USER ID'S DON'T MATCH") 
      }else{ 
       print("\nTHE USER ID'S SUCCESSFULLY MATCH") 
      } 

SignUpControllerコード、質問、と答え:それを修正するために、私はクラスのトップから財産を処分し、FIRAuth.auth()?。createUserWithEmailのようなので、完了ブロック内を移動しなければなりませんでしたここにあります:Firebase issuing out 2 different uid's -Swift iOS

これは誰かを助けてくれるでしょう!

1

からクラッシュがちょうど

let usersRef = self.dbRef.child("users") 
を変更さFirebaseへのアクセス権を持つビューコントローラの一つであるが、ここで

import UIKit 
import Firebase 
import FirebaseAuth 
import FirebaseDatabase 

class ColorController: UIViewController { 

@IBOutlet weak var colorLabel: UILabel! 

var dbRef: FIRDatabaseReference! 
let userID = FIRAuth.auth()?.currentUser?.uid 

override func viewDidLoad() { 
     super.viewDidLoad() 

    //I tried both of these Separately. I commented out the one I didn't use 
    self.dbRef = FIRDatabase.database().referenceFromURL("https://myApp.firebaseio.com") 

    //I also tried switching to 
    self.dbRef = FIRDatabase.database().reference() 
} 

override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(true) 

    let usersRef = self.dbRef.child("users")//it crashes on this line 
    let userIDRef = usersRef.child(userID!) 
    let colorData = userIDRef.child("colorData") 

    colorData.observeEventType(.Value, withBlock: { 

     (snapshot) in 

     if let dict = snapshot.value as? [String:AnyObject]{ 

     let chosenColor = dict["chosenColor"] as? String 

     self.colorLabel = chosenColor! 
    } 
    }) 
} 
} 

をクラッシュ

{ 
    "rules": { 
     ".read": "auth != null", 
     ".write": "auth != null" 

    } 
    } 

- :から - :あなたは、データベース内のノードにアクセスする前にユーザーを認証するされていない場合、あなたはセキュリティルールを変更する必要が

let usersRef = FIRDatabase.database().reference().child("users") let userIDRef = usersRef.child(FIRAuth!.auth()!.currentUser!.uid) let colorData = userIDRef.child("colorData") 

{ 
    "rules": { 
    ".read": true, 
    ".write": true 
    } 
} 
+0

両方とも正常に動作しますが、今のところ 'if let'となります – Dravidian

+0

この回答の警告の部分を見てください: - http://stackoverflow.com/a/39515281/6297658..これはあなたが現在のユーザーIDを使用しようとしています... – Dravidian

+0

Ahhhhh私は最終的に問題を発見したと思います。アプリが最初に起動されたとき、FireAuthは私にあなたを1つのUID(#1)で発行します。ユーザーが電子メールでFirAuth.createAccount ...を使用してアカウントを作成すると、別のuid(#2)が発行されます。 #1のuidは、データベースに表示されているものです。 #2のuidはAuthにあるものです。基本的に私は2つの異なるuidを持っています。 Firebaseは私が誰であるかを知らない。後で新しい質問としてコードを投稿します。それは奇妙な問題です。 –

関連する問題