3

Firebase のセキュリティ設定をテストできるように、Firebase ユーザーの作成と認証ルーチンの簡単なテストを作成しようとしています。コードはスムーズに実行されますが、コールバックは呼び出されず、Firebase 側でユーザーは作成されません。

print ステートメントを使用した以下の出力は次のとおりです。

Begin process
Start Create User
Creating User
End Creating User
End process

Process finished with exit code 0

Mac OS で Java アプリケーションとしてテストを実行しているだけですが、コードは Firebase クラスに firebase-client-android-2.2.3.jar ファイルを使用しています。後でこれは Android アプリに入りますが、今のところ IDE 内で実行できるようにしたいと考えています。経験豊富な Firebase コーダーからの洞察は大歓迎です。

import com.firebase.client.Firebase;
import com.firebase.client.AuthData;
import com.firebase.client.FirebaseError;

import java.util.*;

public class FireRulesTest {


static String firebase_baseUrl = "https://<myfirebase>.firebaseio.com/";

public static void main(String[] args)
        throws FirebaseException {

    System.out.println("Begin process");

    FireRulesTest tester = new FireRulesTest();
    tester.createUser();

    System.out.println("End process");
}

private void createUser()
        throws FirebaseException {

    try {
        System.out.println("Start Create User");

        final String mEmail = "me@email.com";
        final String mPassword = "password";

        final Firebase ref = new Firebase(firebase_baseUrl);
        System.out.println("Creating User");

        ref.createUser(mEmail, mPassword,
                new Firebase.ValueResultHandler<Map<String, Object>>() {

                    @Override
                    public void onSuccess(Map<String, Object> result) {
                        System.out.println("Successfully created user account with uid: " + result.get("uid"));
                        ref.authWithPassword(mEmail, mPassword, new Firebase.AuthResultHandler() {
                            @Override
                            public void onAuthenticated(AuthData authData) {
                                //success, save auth data
                                HashMap<String, Object> authMap = new HashMap<String, Object>();
                                authMap.put("uid", authData.getUid());
                                authMap.put("token", authData.getToken());
                                authMap.put("email", mEmail);
                                authMap.put("password", mPassword);

                                Firebase currentUserRef = new Firebase(firebase_baseUrl + "movo/users/" + authData.getUid());
                                authMap.put("currentUser", currentUserRef);

                                System.out.println("User ID: " + authData.getUid() +
                                        ", Provider: " + authData.getProvider() +
                                        ", Expires:" + authData.getExpires());


                                System.out.println("Authentication complete");
                            }

                            @Override
                            public void onAuthenticationError(FirebaseError firebaseError) {
                                System.out.println("Authentication Error authenticating newly created user. This could be an issue. ");
                                System.out.println(firebaseError.getMessage());
                            }

                        });

                        }

                        @Override
                        public void onError(FirebaseError firebaseError) {
                        System.out.println("On Error authenticating newly created user. This could be an issue. ");
                            System.out.println(firebaseError.getMessage());
                        }
            });

            System.out.println("End Creating User");

        } catch (Exception fbe) {
            System.out.println("Exception: " + fbe.getMessage());
            fbe.printStackTrace();
        }

    }

}
4

1 に答える 1

3

Thread.sleepプログラムの最後にa を追加します。Firebase がサーバーに何かを送信する機会を得る前に、プログラムが終了する可能性があります。

createUserより適切な解決策は、呼び出しが終了するのを待つなど、実際のライフサイクル管理をアプリに導入することです。しかし、これを Android に移行することを考えると (Android はアプリのライフサイクルをまったく異なる方法で処理します)、努力する価値はないかもしれません。

于 2015-04-30T20:32:23.370 に答える