Android Matrix Riot (IM) SDK 統合コラム (ログインして登録)

マトリックス・ライオットの紹介

私の理解では、電子メールに似た分散型オープンソース チャット ツール: https://matrix.org/、無料サービス、オンライン有料サービス (プライベート ドメイン名をバインドできる) を使用するか、自宅で構築することができます。
XMPP に似ていますが、XMPP は期待に応えられず、本当に使いやすいクライアントはほとんどなく、テキストと画像以外の高度な機能には互換性がありません。
マトリックスは現在、json + HTTP (RESTful) に基づいており、グループの自作サーバーも非常にシンプルです。

android、ios、ブラウザはすべて riot というソフトウェアを使用します (他のクライアントも存在します)。オンラインで https://riot.im https://matrixim.cc/ などを試してみてください (私が見つけた 2 つの FQ は遅いかもしれません。)
matrix のプロトコル変換プラグインも比較的完成されており、他のプラグインでも使用できます。 IRC XMPP 電子メール 交換を待ちます。

Matrix は現在人気があり、商用のクローズドソース ソフトウェアを置き換える機会を持っていますが、当時の xmpp と同じにならないことを願っています。

実際、要約として、Matrix についての私の理解を簡単に紹介しましたが、重要なのは Matrix SDK の使用です。わかりました、本題に移りましょう

マトリックスライオットサーバー

現在、同様のチュートリアルドキュメントはインターネット上に多数存在しますが、Android Matrix SDKの紹介同様、国内のものは比較的少ないです。

しかし、それでもチュートリアルを書きに来て、オープンソースとオープンの精神を称賛する熱心な学生がいます。

https://www.jianshu.com/p/5c445d8698a4

因为本次只着重介绍Android SDK ,
所以有需要帮助搭建服务端的同学可以加我微信  chason_win

マトリックス・ライオットからの重要なお知らせです!

Android Matrix Riot サンプル プログラムのコンパイル

Android Riot サンプル プログラムをコンパイルする場合、次のような依存パッケージをダウンロードできないため、コンパイルに失敗しやすくなります。

	org.jitsi.react:jitsi-meet-sdk:2.2.2

幸運にもパッケージが正常にダウンロードできたとしても、依然として問題が発生します

	com.facebook.react.modules.core.PermissionListener;


このクラスが見つからないと爆発します。検査の結果、反応ネイティブの依存関係が必要であることがわかり、バージョンが低すぎることはできません。後で誰でもダウンロードできるようにリリースします。お急ぎの場合は、 WeChat に私を追加していただければ、以下に書きます。

Android Matrix SDK モジュールのコンパイル

Android Matrix SDK は外部ネットワーク上にあるため、依存関係をダウンロードするときにダウンロードできないパッケージがあります。

react-native-webrtc-1.69.2-jitsi-2062090@aar

そのため、jar パッケージを手動でダウンロードしてプロジェクトに統合することができます。後でリリースします。緊急に必要な場合は、以下に記載されているように、WeChat で私に連絡してください。

Android マトリックス ライオット ログイン

これをすでに見たということは、準備作業は完了しているということですが、かなり複雑ですよね。1 日かけて、あらゆる方法を試しました。幸運です!

個人的には、これは登録後に言及すべきだと思いますが、登録に比べて非常に簡単なので、最初にこれを全員に覚えてもらい、達成感を与えてください。そうしないと、長時間手探りするのは少し不快になります。登録。

まずコードをアップロードします。

/*初始化*/

       hsConfig = new HomeServerConnectionConfig.Builder()
                .withHomeServerUri(Uri.parse(url))
                .build();

        loginRestClient = new LoginRestClient(hsConfig);
 /**
     * 使用账号密码进行登录
     * @param userName
     * @param password
     */
    private static void login(String userName,String password){
    
    
        
        loginRestClient.loginWithUser(userName, password, new ApiCallback<Credentials>() {
    
    
            @Override
            public void onNetworkError(Exception e) {
    
    
            }

            @Override
            public void onMatrixError(MatrixError e) {
    
    

            }

            @Override
            public void onUnexpectedError(Exception e) {
    
    

            }

            @Override
            public void onSuccess(Credentials info) {
    
    

            }
        });

事前に登録したアカウントを使用してログインすると、成功後に onSuccess インターフェイスがコールバックされます。


メインイベントが近づいているので、先に休憩します...

Android マトリックス ライオット登録

高エネルギー早期警告
この登録では 4 つのインターフェイス、つまり 3 つの異なるインターフェイスを呼び出す必要があります。

コードを見てください!

public static void register() {
    
    


        RegistrationParams params = new RegistrationParams();
        params.username = "dazhaung01";


        loginRestClient.register(params, new ApiCallback<Credentials>() {
    
    
            @Override
            public void onNetworkError(Exception e) {
    
    

                Log.e(TAG, "onNetworkError: " + e.getMessage());
            }

            @Override
            public void onMatrixError(MatrixError e) {
    
    
                Log.e(TAG, "onMatrixError: " + e.toString());
                Log.e(TAG, "onMatrixError errcode: " + e.errcode);
                Log.e(TAG, "onMatrixError mStatus: " + e.mStatus);


                if (TextUtils.equals(e.errcode, MatrixError.USER_IN_USE)) {
    
    
                    Log.d(TAG, "User name is used");
                } else if (TextUtils.equals(e.errcode, MatrixError.UNAUTHORIZED)) {
    
    
                    Log.d(TAG, "UNAUTHORIZED");
                } else if (null != e.mStatus && e.mStatus == 401) {
    
    

                    try {
    
    
                        if (registrationFlowResponse != null) {
    
    
                            Log.d(TAG, "registrationFlowResponse !=null ");
                            return;
                        }
                        registrationFlowResponse = JsonUtils.toRegistrationFlowResponse(e.mErrorBodyAsString);

                        //检查邮箱
                        doesServerRequireIdentityServerParam();

                        Log.d(TAG, "registrationFlowResponse ");
                    } catch (Exception castExcept) {
    
    
                        Log.e(TAG, "JsonUtils.toRegistrationFlowResponse " + castExcept.getLocalizedMessage(), castExcept);
                    }
//                    listener.onRegistrationFailed(ERROR_MISSING_STAGE);
//                    handler.sendEmptyMessage(1);
                    Log.d(TAG, "ERROR_MISSING_STAGE ");
                } else if (TextUtils.equals(e.errcode, MatrixError.RESOURCE_LIMIT_EXCEEDED)) {
    
    
//                    listener.onResourceLimitExceeded(e);
                    Log.d(TAG, "onResourceLimitExceeded ");
                } else {
    
    
//                    listener.onRegistrationFailed("");
                    Log.d(TAG, "onRegistrationFailed ");
                }
            }

            @Override
            public void onUnexpectedError(Exception e) {
    
    
                Log.e(TAG, "onUnexpectedError: " + e.getMessage());
            }

            @Override
            public void onSuccess(Credentials info) {
    
    
                Log.e(TAG, "onSuccess: " + info.toString());
            }
        });

    }


    private static void doesServerRequireIdentityServerParam() {
    
    
        loginRestClient.doesServerRequireIdentityServerParam(new ApiCallback<Boolean>() {
    
    
            @Override
            public void onNetworkError(Exception e) {
    
    

            }

            @Override
            public void onMatrixError(MatrixError e) {
    
    

            }

            @Override
            public void onUnexpectedError(Exception e) {
    
    

            }

            @Override
            public void onSuccess(Boolean info) {
    
    
                Log.e(TAG, "onSuccess  info : " + info);

                requestEmailValidationToken();
            }
        });
    }



    private static void requestEmailValidationToken(){
    
    
        profileRestClient.requestEmailValidationToken(
               "null",
                        "你的邮箱地址@qq.com",
                       "72916032-3204-4f9b-9602-72e136c7c3c6",
                       0,
                        /*nextLink*/null,
                        true,
                        new ApiCallback<RequestEmailValidationResponse>() {
    
    
                            @Override
                            public void onSuccess(RequestEmailValidationResponse info) {
    
    

                                clientSecret=info.clientSecret;
                                email=info.email;
                                sid=info.sid;
                                sendAttempt=info.sendAttempt;

                                Log.e(TAG, "onSuccess: " );

                            }

                            @Override
                            public void onNetworkError(final Exception e) {
    
    
                                Log.e(TAG, "onNetworkError: " );
                            }

                            @Override
                            public void onUnexpectedError(Exception e) {
    
    


                                Log.e(TAG, "onUnexpectedError: " );
                            }

                            @Override
                            public void onMatrixError(MatrixError e) {
    
    

                                Log.e(TAG, "onMatrixError: " );
//                                String errorMessage = null;
//                                if (TextUtils.equals(MatrixError.THREEPID_IN_USE, e.errcode)) {
    
    
//                                    errorMessage = build3PidErrorMessage(context, R.string.account_email_already_used_error, null);
//                                } else {
    
    
//                                    errorMessage = build3PidErrorMessage(context, R.string.account_email_error, e.getLocalizedMessage());
//                                }
//
//                                listener.onThreePidRequestFailed(errorMessage);
                            }
                        });
    }

    public static void registerRight() {
    
    

//--data $'
// {"auth":{"threepid_creds":
// {"client_secret":"359cef9b-f9c8-4359-b074-f84a7ed0b2e6",
// "sid":"1824741622"},
// "session":"KXoarSJvqbkvEtVCjEXorIPf",
// "type":"m.login.email.identity"},
// "initial_device_display_name":"移动设备",
// "password":"111111","username":"dazhuang8"}
// ' -H "User-Agent: Riot.im/0.9.13-dev(Linux; U; Android 7.0; SM-G9508 Build/NRD90; Flavour GooglePlay; MatrixAndroidSDK 0.9.36-dev)" '
// http://synapse-dev.gidepay.com/_matrix/client/r0/register' | python -m json.tool


        RegistrationParams params = new RegistrationParams();
        params.username = "dazhaung01";
        params.password = "111111";
        AuthParams authParams = getThreePidAuthParams(clientSecret, "",
                sid, LoginRestClient.LOGIN_FLOW_TYPE_EMAIL_IDENTITY);
        authParams.session=registrationFlowResponse.session;
        params.auth=authParams;
        loginRestClient.register(params, new ApiCallback<Credentials>() {
    
    
            @Override
            public void onNetworkError(Exception e) {
    
    

                Log.e(TAG, "onNetworkError: " + e.getMessage());
            }

            @Override
            public void onMatrixError(MatrixError e) {
    
    
                Log.e(TAG, "onMatrixError: " + e.toString());
                Log.e(TAG, "onMatrixError errcode: " + e.errcode);
                Log.e(TAG, "onMatrixError mStatus: " + e.mStatus);

                if (TextUtils.equals(e.errcode, MatrixError.USER_IN_USE)) {
    
    
                    Log.d(TAG, "User name is used");
                } else if (TextUtils.equals(e.errcode, MatrixError.UNAUTHORIZED)) {
    
    
                    Log.d(TAG, "电子邮件还没有进行确认");
                } else if (null != e.mStatus && e.mStatus == 401) {
    
    
                    Log.d(TAG, "mStatus");
                    try {
    
    
                        if (registrationFlowResponse != null) {
    
    
                            Log.d(TAG, "registrationFlowResponse !=null ");
                            return;
                        }
                        registrationFlowResponse = JsonUtils.toRegistrationFlowResponse(e.mErrorBodyAsString);

                        //检查邮箱
//                        doesServerRequireIdentityServerParam();

                        Log.d(TAG, "registrationFlowResponse ");
                    } catch (Exception castExcept) {
    
    
                        Log.e(TAG, "JsonUtils.toRegistrationFlowResponse " + castExcept.getLocalizedMessage(), castExcept);
                    }
//                    listener.onRegistrationFailed(ERROR_MISSING_STAGE);
//                    handler.sendEmptyMessage(1);
                    Log.d(TAG, "ERROR_MISSING_STAGE ");
                } else if (TextUtils.equals(e.errcode, MatrixError.RESOURCE_LIMIT_EXCEEDED)) {
    
    
//                    listener.onResourceLimitExceeded(e);
                    Log.d(TAG, "onResourceLimitExceeded ");
                } else {
    
    
//                    listener.onRegistrationFailed("");
                    Log.d(TAG, "onRegistrationFailed ");
                }
            }

            @Override
            public void onUnexpectedError(Exception e) {
    
    
                Log.e(TAG, "onUnexpectedError: " + e.getMessage());
            }

            @Override
            public void onSuccess(Credentials info) {
    
    
                Log.e(TAG, " 注册成功 onSuccess: " + info.toString());
            }
        });

    }

    /**
     * Format three pid params for registration request
     *
     * @param clientSecret
     * @param host
     * @param sid          received by requestToken request
     * @param medium       type of three pid
     * @return map of params
     */
    private static AuthParams getThreePidAuthParams(final String clientSecret,
                                                    final String host,
                                                    final String sid,
                                                    final String medium) {
    
    
        AuthParamsThreePid authParams = new AuthParamsThreePid(medium);

        authParams.threePidCredentials.clientSecret = clientSecret;

        authParams.threePidCredentials.idServer = host;
        authParams.threePidCredentials.sid = sid;

        return authParams;
    }

ああ~快適

不快に感じたら、WeChat に私を追加してください。快適に過ごせるようにお手伝いします

チャソンウィン

おすすめ

転載: blog.csdn.net/a_Chaon/article/details/107078409