1. 程式人生 > >環信sdk實現登入註冊功能(第三方通訊)

環信sdk實現登入註冊功能(第三方通訊)

最近寫聊天軟體,需要第三方通訊實現聊天功能,

下面再分享一下環信sdk整合

(個人心得:我是個新手,其實整合環信sdk我之前用了接近一個星期參考官方文件,也百度瞭解了很多,最後整合失敗了,,實在是心疼就放棄了環信,接著去學極光sdk的整合,極光弄成功之後再回來繼續研究環信的,給我最大的感覺就是我明明按著官方給出的文件一步一步去弄的,反覆弄過很多次都失敗就懵了,感覺簡直是美滋滋,現在極光和環信整合sdk之後,個人覺得不要只看官方給出的文件,要多下載幾個demo看看別人是怎麼整合的,然後對比官方文件,最後總結寫出自己的,要學會將別人寫的demo一步一步實現什麼功能拆分出來仔細研究弄懂變成自己的東西)

在這裡我使用的是官網下載的sdk裡面的easeui快速整合,不需要新增libs,也不需要在build.gradle裡面新增什麼,很方便

@先看看效果是不是自己想要的吧@



第二步:使用android studio匯入examples資料夾裡面的easeui作為module



匯入成功後module的右下方會有圖示

第三步:新增module作為依賴



我新增之後是報下面的錯


這裡檢視專案新增的module和app的build.gradle裡面的minSdkVersion不一致,所以導致錯誤!

我專案app裡面的minSdkVersion是15,module裡面的是16,於是修改app裡面的版本為16,最後成功


第四步:配置AndroidManifest許可權(AppKey對應的value值修改為自己環信註冊應用對應的appkey值即可,application name為你後面初始化類名)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ied.hxchat">

    <!--======================================環信============================================-->
    <!-- Required -->
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <!--======================================環信============================================-->

    <application
        android:name=".application.HXApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".ui.LoginActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".ui.MainActivity"></activity>
        <activity android:name=".ui.RegisterActivity"></activity>

        <!--======================================環信============================================-->
        <!-- 設定環信應用的AppKey -->
        <meta-data android:name="EASEMOB_APPKEY"  android:value="1173180507177570#hxchat" />
        <!-- 宣告SDK所需的service SDK核心功能-->
        <service android:name="com.hyphenate.chat.EMChatService" android:exported="true"/>
        <service android:name="com.hyphenate.chat.EMJobService"
            android:permission="android.permission.BIND_JOB_SERVICE"
            android:exported="true"
            />
        <!-- 宣告SDK所需的receiver -->
        <receiver android:name="com.hyphenate.chat.EMMonitorReceiver">
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_REMOVED"/>
                <data android:scheme="package"/>
            </intent-filter>
            <!-- 可選filter -->
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
                <action android:name="android.intent.action.USER_PRESENT" />
            </intent-filter>
        </receiver>
        <!--======================================環信============================================-->


    </application>

</manifest>

第五步:初始化sdk

package com.ied.hxchat.application;

import android.app.Application;
import com.hyphenate.chat.EMOptions;
import com.hyphenate.easeui.EaseUI;

public class HXApplication extends Application{

    @Override
    public void onCreate() {
        super.onCreate();
        EMOptions options = new EMOptions();
        // 預設新增好友時,是不需要驗證的,改成需要驗證,true:自動驗證,false,手動驗證
        options.setAcceptInvitationAlways(false);
        EaseUI.getInstance().init(this, options);
    }
}

第六步:寫登入註冊程式碼

LoginActivity.java:

package com.ied.hxchat.ui;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.hyphenate.EMCallBack;
import com.hyphenate.chat.EMClient;
import com.ied.hxchat.R;

public class LoginActivity extends AppCompatActivity implements View.OnClickListener{

    private EditText edtUsername,edtPassword;
    private Button btnLogin;
    private TextView btnRegister;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        initView();
    }

    private void initView() {
        edtUsername = (EditText) findViewById(R.id.edt_username);
        edtPassword = (EditText) findViewById(R.id.edt_password);
        btnLogin = (Button) findViewById(R.id.btn_login);
        btnRegister = (TextView) findViewById(R.id.btn_register);

        btnLogin.setOnClickListener(this);
        btnRegister.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        String username = edtUsername.getText().toString().trim();
        String password = edtPassword.getText().toString().trim();

        switch (v.getId()) {
            case R.id.btn_login:
                if (TextUtils.isEmpty(username)) {
                    Toast.makeText(getApplicationContext(), "請輸入使用者名稱", Toast.LENGTH_SHORT).show();
                } else if (TextUtils.isEmpty(password)) {
                    Toast.makeText(getApplicationContext(), "請輸入密碼", Toast.LENGTH_SHORT).show();
                } else {
                    //登入
                    EMClient.getInstance().login(username,password,new EMCallBack() {//回撥
                        @Override
                        public void onSuccess() {
                            runOnUiThread(new Runnable() {
                                public void run() {
                                    //登入成功後需要呼叫EMClient.getInstance().chatManager().loadAllConversations(); 和EMClient.getInstance().groupManager().loadAllGroups();
                                    EMClient.getInstance().chatManager().loadAllConversations();
                                    EMClient.getInstance().groupManager().loadAllGroups();
                                    //以上兩個方法是為了保證進入主頁面後本地會話和群組都 load 完畢。
                                    Log.d("main", "登入聊天伺服器成功!");
                                    Toast.makeText(getApplicationContext(), "登陸成功", Toast.LENGTH_SHORT).show();
                                    startActivity(new Intent(LoginActivity.this, MainActivity.class));
                                }
                            });
                        }

                        @Override
                        public void onProgress(int progress, String status) {

                        }

                        @Override
                        public void onError(int code, String message) {
                            if (code == -1005) {
                                message = "使用者名稱或密碼錯誤";
                            }
                            final String msg = message;
                            runOnUiThread(new Runnable() {
                                public void run() {
                                    Log.d("main", "登陸聊天伺服器失敗!");
                                    Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
                                }
                            });
                        }
                    });

                }


                break;
            case R.id.btn_register:
                startActivity(new Intent(LoginActivity.this, RegisterActivity.class));
                break;
        }
    }

}

RegisterActivity.java

package com.ied.hxchat.ui;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import com.hyphenate.chat.EMClient;
import com.hyphenate.exceptions.HyphenateException;
import com.ied.hxchat.R;


public class RegisterActivity extends AppCompatActivity implements OnClickListener {

    private ImageView ivBack;
    private EditText edtUsername,edtPassword;
    private Button btnRegister;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        initView();
    }

    private void initView() {
        ivBack = (ImageView) findViewById(R.id.iv_back);
        edtUsername = (EditText) findViewById(R.id.edt_username);
        edtPassword = (EditText) findViewById(R.id.edt_password);
        btnRegister = (Button) findViewById(R.id.btn_register);

        btnRegister.setOnClickListener(this);
        ivBack.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        final String username = edtUsername.getText().toString().trim();
        final String password = edtPassword.getText().toString().trim();

        switch (v.getId()) {
            case R.id.btn_register:
                if (TextUtils.isEmpty(username)) {
                    Toast.makeText(getApplicationContext(), "請輸入使用者名稱",
                            Toast.LENGTH_SHORT).show();
                } else if (TextUtils.isEmpty(password)) {
                    Toast.makeText(getApplicationContext(), "請輸入密碼",
                            Toast.LENGTH_SHORT).show();
                } else {
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                EMClient.getInstance().createAccount(username,password);//同步方法
                                runOnUiThread(new Runnable() {
                                    @Override
                                    public void run() {
                                        Toast.makeText(RegisterActivity.this,"註冊成功請登入",Toast.LENGTH_SHORT).show();
                                    }
                                });
                            } catch (HyphenateException e) {
                                runOnUiThread(new Runnable() {
                                    @Override
                                    public void run() {
                                        Toast.makeText(RegisterActivity.this,"註冊失敗",Toast.LENGTH_SHORT).show();
                                    }
                                });
                            }

                        }
                    }).start();   
                }
                break;
            case R.id.iv_back:
                finish();
                break;
        }
    }

}

最後附上專案原始碼: