我已经将Firebase集成到我的应用程序中。我可以通过电子邮件/密码向Firebase进行身份验证。然后我初始化ChatSDK并从那里调用InterfaceManager.shared().a.startLoginActivity(this,true);,应用程序被默认的聊天用户界面“接管”,功能运行良好,ChatSDK.currentUser()返回预期的User对象。
我想用我自己的UI做同样的事情。为了在ChatSDK初始化后对用户进行身份验证,我尝试过:ChatSDK.auth().authenticateWithCachedToken(); ChatSDK.auth().authenticate(AccountDetails.signUp(email,pwd)); ChatSDK.auth().authenticate(AccountDetails.username(email,pwd));
据我所知,除非我有一个有效的User,否则我不能做ChatSDK.thread().createThread(...)。但是,在每次身份验证尝试之后,ChatSDK.currentUser()为null。
查看ChatSDK source code和documentation,这似乎是用于身份验证的机制。我是不是漏掉了什么?
发布于 2018-08-22 23:31:22

订阅是必要的,即使你不使用它。
ChatSDK.auth()
.authenticateWithCachedToken()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action() {
@Override
public void run() throws Exception {
Log.d("Success","We're in!");
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
Log.d("Err",throwable.toString());
}
});此外,这里有一些使用已知用户id启动新聊天线程的代码。
UserWrapper userWrapper = UserWrapper.initWithEntityId(firebaseUser.uid);
userWrapper.metaOn();
userWrapper.onlineOn();
User otherUser = userWrapper.getModel();
ProgressDialog pd = new ProgressDialog(MainActivity.this);
pd.show();
ChatSDK.thread().createThread("", otherUser, ChatSDK.currentUser())
.observeOn(AndroidSchedulers.mainThread())
.doFinally(() -> {
pd.dismiss();
})
.subscribe(thread -> {
ChatSDK.ui().startChatActivityForID(getApplicationContext(), thread.getEntityID());
}, throwable -> {
ToastHelper.show(getApplicationContext(), throwable.getLocalizedMessage());
});https://stackoverflow.com/questions/51968567
复制相似问题