【问题标题】:How to authenticate a Firebase user with ChatSDK?如何使用 ChatSDK 对 Firebase 用户进行身份验证?
【发布时间】:2018-08-22 13:59:17
【问题描述】:

我已将 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 codedocumentation,这似乎是身份验证机制。我有什么遗漏吗?

【问题讨论】:

    标签: android firebase firebase-authentication chat chatsdk


    【解决方案1】:

    订阅是必要的,即使您不使用它。

            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());
                });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-09
      • 2017-03-11
      • 1970-01-01
      • 2016-10-01
      • 2016-04-08
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      相关资源
      最近更新 更多