環信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;
}
}
}
最後附上專案原始碼: