Android SDK版本
- 目前SDK只支持Android 2.2或以上版本的手机系统。
AndroidManifest.xml配置
- 以下配置可以在IMDemo/AndroidManifest.xml 找到并直接拷贝放置进自己的应用工程中的AndroidManifest.xml文件对应的tag中.
- manifest 标签下添加:
<!-- 必需: 权限配置 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.BATTERY_STATS" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.BROADCAST_STICKY" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" />
- application 标签下添加:
<!-- 必需: 应用ID(此处的id为您申请的应用id) --> <meta-data android:name="GOBELIEVE_APPID" android:value="7" /> <!-- 必需: 应用KEY (此处appkey为您申请的应用密钥)--> <meta-data android:name="GOBELIEVE_APPKEY" android:value="HS5NVruwDJxFwUPEdzqo7gBrQCSFsIhA" /> <!-- 必需: 推送页面配置 --> <activity android:name="com.gameservice.sdk.push.ui.SmartPushActivity" /> <!-- 必需: push 服务配置 --> <service android:name="com.beetle.push.PushService" android:process=":push" /> <!-- 必需: push 消息接收配置 --> <receiver android:name="com.beetle.push.PushReceiver" android:enabled="true" android:exported="false" android:priority="90000" android:process=":push"> <intent-filter> <action android:name="android.intent.action.PACKAGE_ADDED" /> <action android:name="android.intent.action.PACKAGE_CHANGED" /> <action android:name="android.intent.action.PACKAGE_DATA_CLEARED" /> <action android:name="android.intent.action.PACKAGE_INSTALL" /> <action android:name="android.intent.action.PACKAGE_REMOVED" /> <action android:name="android.intent.action.PACKAGE_REPLACED" /> <action android:name="android.intent.action.PACKAGE_RESTARTED" /> <action android:name="android.intent.action.USER_PRESENT" /> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver>
IMSDK
- imsdk只包含消息基础通讯功能
初始化IM
- 在开始IM服务之前需要设置用户accessToken以及添加IMServiceObserver监听状态回调.
//获取IMService mIMService = IMService.getInstance(); String androidID = Settings.Secure.getString(this.getContentResolver(), Settings.Secure.ANDROID_ID); //设置设备唯一标识,用于多点登录时设备校验 mIMService.setDeviceID(androidID); //注册回调 mIMService.addObserver(new IMServiceObserver() { }); //监听网路状态变更 mIMService.registerConnectivityChangeReceiver(getApplicationContext()); //设置推送服务的回调 Push.registerReceiver(new IMsgReceiver{ }); //启动后台推送服务 Push.registerService(getApplicationContext());
用户登录成功后启动IM,设置用户的accesstoken并启动im
mIMService.setAccessToken(token); mIMService.start();
用户注销后清空用户的devicetoken并停止IM
IMApi.unbindDeviceToken(deviceToken, accessToken); mIMService.setAccessToken(""); mIMService.stop();
应用切到后台暂停IM,此后所有的消息将通过推送通道下发
mIMService.enterBackground()
应用切到前台恢复IM
mIMService.enterForeground()
发送消息
- 启动IM服务设置好用户id之后便可以开始发送消息,消息发送的代码需要在UI线程中调用(消息内容大小限制为4k) :
//建立消息对象 IMMessage msg = new IMMessage(); //设置发送方id msg.sender = senderId; //设置接收方id msg.receiver = receiverId; //消息本地id msg.msgLocalID = msgLocalId; //设置消息内容 msg.content = "早上好"; IMService.sendPeerMessage(msg);
类IMService
设置当前用户的access token
方法名:public void setAccessToken(String token)
功能:在调用start之前必须要设置用户的accessToken,token是由第三方应用服务器调用IM服务器RestAPI所得。
参数说明:
* token 客户端连接IM服务必须的acessToken
返回值:无返回值
设置当前设备的id
方法名:public void setDeviceID(String deviceID)
功能:设备id可以用户多点登陆的唯一性判断,可选调用
参数说明:
*deviceID 设备id
返回值:无返回值
设置观察者
方法名: public void addObserver(IMServiceObserver observer)
功能:设置observer,在observer中处理接受到的消息。
参数说明:
* observer 观察者
返回值:无返回值
开始接受消息
方法名:public void start()
功能:用户登陆成功后,连接im服务器来接受在线消息。
停止接受消息
方法名:public void stop()
功能:用户注销后,断开和im服务器的连接,从而终止接受在线消息。
应用进入到前台
方法名:public void enterForeground()
功能:应用进入前台,im服务器将停止将消息推送到通知栏
应用进入到后台
方法名:public void enterBackground()
功能:应用进入后台,im服务器会将将消息推送到通知栏
发送消息
方法名:public boolean sendPeerMessage(IMMessage msg)
功能:发送im消息,如果当前连接处于断开状态,消息会发送失败, 函数返回true,也不能表明服务器已经接收到消息。
参数说明:
*msg 消息对象
返回值:boolean
接口IMServiceObserver
连接状态
方法名:public void onConnectState(IMService.ConnectState state)
功能:连接状态变更通知
参数说明:
*state 连接的状态 STATE_UNCONNECTED, STATE_CONNECTING, STATE_CONNECTED, STATE_CONNECTFAIL
返回值:无返回值
异地登陆
方法名: public void onLoginPoint(LoginPoint lp)
功能:当前登陆用户在异地登陆
参数说明:
*lp 登录点信息
返回值:无返回值
消息
方法名:public void onPeerMessage(IMMessage msg)
功能:接受到一条im消息
参数说明:
*msg 消息对象
返回值:无返回值
消息ACK
方法名:public void onPeerMessageACK(int msgLocalID, long uid)
功能:服务器对收到消息的ack,此时这条消息才能标志为发送成功
参数说明:
*msgLocalID 消息的本地ID
*uid 消息接受者
返回值:无返回值
消息接受者ACK
方法名:public void onPeerMessageRemoteACK(int msgLocalID, long uid)
功能:消息已经被对端接收到。
参数说明:
*msgLocalID 消息的本地ID
*uid 消息接受者
返回值:无返回值
消息发送失败
方法名:public void onPeerMessageFailure(int msgLocalID, long uid)
功能:消息发出后,未收到服务器的ack,在和服务器的连接断开后,会通知消息发送失败。
参数说明:
*msgLocalID 消息的本地ID
*uid 消息接受者
返回值:无返回值
类IMApi
设置当前用户的device token
方法名:public boolean bindDeviceToken(byte[] deviceToken, String accessToken)
功能:设置device token后,im服务器会对用户推送离线消息,device token来自于push系统生成。
参数说明:
*deviceToken 推送的deviceToken
*accessToken 用户当前的accessToken
返回值:boolean 是否设置成功。
清空当前用户关联的device token
方法名:public boolean unbindDeviceToken(byte[] deviceToken, String accessToken)
功能:im服务器不会再对这台设备推送离线消息
参数说明:
*deviceToken 推送的deviceToken
*accessToken 用户当前的accessToken
返回值:boolean 是否清空成功。
类PushSDK
注册回调
方法名:public void registerReceiver(IMsgReceiver receiver)
功能:回调接口用于接受推送的devicetoken
参数说明:
*receiver 回调对象
返回值:无返回值
启动推送服务
方法名:public void registerService(Context context)
功能: 应用启动后,启动推送服务
参数说明:
*context 应用的ApplicationContext
返回值:无返回值
接口IMsgReceiver
获得devicetoken
方法名: public void onDeviceToken(byte[] deviceToken)
功能:推送服务注册成功后,将deviceToken通知到应用
参数说明:
*deviceToken 用于推送的设备唯一标识
返回值:无返回值
IMKit
- imkit包含了完整的聊天界面和历史消息的存储
初始化IMKit
- 除了imsdk必要的初始化动作外,使用imkit需要初始化存储类
FileCache fc = FileCache.getInstance(); fc.setDir(this.getDir("cache", MODE_PRIVATE)); PeerMessageDB db = PeerMessageDB.getInstance(); db.setDir(this.getDir("peer", MODE_PRIVATE)); mIMService.setPeerMessageHandler(PeerMessageHandler.getInstance());
打开聊天界面
Intent intent = new Intent(this, IMActivity.class); intent.putExtra("peer_uid", peerUID); intent.putExtra("peer_name", peerName); intent.putExtra("current_uid", currentUID startActivity(intent);
时间: 2024-10-10 00:28:37