3
我正在尝试编写Firebase用户创建和身份验证例程的简单测试,以便测试我的Firebase安全设置。代码运行平稳,但不会调用回调,也不会在Firebase一侧创建用户。FIrebase Java/Android createUser失败
的下面报表的打印输出是:
Begin process
Start Create User
Creating User
End Creating User
End process
Process finished with exit code 0
的代码使用了火力地堡类火力点,客户端Android的2.2.3.jar文件,虽然我只是跑在我的测试作为Mac OS上的Java应用程序。后来这将进入一个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 = "[email protected]";
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();
}
}
}
您可能想在程序结尾添加一个'Thread.sleep'。在Firebase有机会向服务器发送任何内容之前,您的程序可能会退出。更合适的解决方案是将实际的生命周期管理引入您的应用程序,例如等待'createUser'调用完成。但是鉴于您将会将其迁移到Android(处理完全不同的应用程序生命周期),这可能不值得您付出努力。 –
谢谢,这让我几乎在那里。 “同行未经认证”的回调错误是我回来的。我可能需要真正在具有应用程序上下文的Android应用程序中运行才能正常工作。 – mba12
更新:那让我一直在那里。尝试第二次和第三次能够成功创建一个用户。第一次尝试发生了一些古怪的事情。谢谢弗兰克! – mba12