GoBelieve文档中心
  • Android开发文档
  • IOS开发文档
  • JS开发文档
  • 服务器RestAPI文档

Android SDK 接入指南

应用集成到客户端

  1. import asynctcp, imsdk, imkit模块到自己的app工程
  2. 在Application的onCreate初始化

     String androidID = Settings.Secure.getString(this.getContentResolver(),
             Settings.Secure.ANDROID_ID);
    
     //设置设备唯一标识,用于多点登录时设备校验
     IMService.getInstance().setDeviceID(androidID);
    
     //监听网路状态变更
     IMService.getInstance().registerConnectivityChangeReceiver(getApplicationContext());
    
     mIMService.setPeerMessageHandler(PeerMessageHandler.getInstance());
     mIMService.setGroupMessageHandler(GroupMessageHandler.getInstance());
     mIMService.setCustomerMessageHandler(CustomerMessageHandler.getInstance());
    
  3. 登录成功后设置uid,token

     IMService.getInstance().setToken(token);
     PeerMessageHandler.getInstance().setUID(uid);
     GroupMessageHandler.getInstance().setUID(uid);
     CustomerMessageHandler.getInstance().setAppId(appid);
     CustomerMessageHandler.getInstance().setUID(uid);
     SyncKeyHandler handler = new SyncKeyHandler(this.getApplicationContext(), String.format("sync_key_%d", uid));
     handler.load();
     IMService.getInstance().setSyncKeyHandler(handler);
    
  4. 打开消息db, 数据库表结构参照demo中的MessageDatabaseHelper源代码

     File p = this.getDir("db", MODE_PRIVATE);
     File f = new File(p, String.format("gobelieve_%d.db", uid));
     String path = f.getPath();
     MessageDatabaseHelper dh = MessageDatabaseHelper.getInstance();
     dh.open(this.getApplicationContext(), path);
     SQLiteDatabase db = dh.getDatabase();
     PeerMessageDB.getInstance().setDb(db);
     GroupMessageDB.getInstance().setDb(db);
     CustomerMessageDB.getInstance().setDb(db);
    
  5. 启动IMService接受消息

     IMService.getInstance().start();
    
  6. 添加消息observer,处理相应类型的消息

     //连接状态
     IMService.getInstance().addObserver(ob);
    
     //点对点消息
     IMService.getInstance().addPeerObserver(ob);
     //群组消息
     IMService.getInstance().addGroupObserver(ob);
     //客服消息
     IMService.getInstance().addGroupObserver(ob);
     //直播的聊天室消息
     IMService.getInstance().addRoomObserver(ob);
     //实时消息,用于voip的信令
     IMService.getInstance().addRTObserver(ob);
     //系统消息
     IMService.getInstance().addSystemObserver(ob); 
    
  7. 应用进入后台,断开socket链接

     IMService.getInstance().enterBackground();
    
  8. 应用返回前台,重现链接socket

     IMService.getInstance().enterForeground();
    
  9. 发送点对点消息

     IMMessage im = new IMMessage();
     im.msgLocalID = 本地数据库的消息id
     im.sender = 当前用户id
     im.receiver = 对端的id
     im.content = "可以是任意格式的字符串"
     IMService.getInstance().sendPeerMessageAsync(im);
    
  10. 发送群组消息

    IMMessage im = new IMMessage();
    im.msgLocalID = 本地数据库的消息id
    im.sender = 当前用户id
    im.receiver = 群组id
    im.content = "可以是任意格式的字符串"
    IMService.getInstance().sendGroupMessageAsync(im);
    
  1. 发送聊天室消息

    IMMessage im = new RoomMessage();
    im.sender = 当前用户id
    im.receiver = roomid
    im.content = "可以是任意格式的字符串"
    IMService.getInstance().sendRoomMessageAsync(im);
    
  1. 打开点对点会话

    Intent intent = new Intent(this, PeerMessageActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra("peer_uid", peer_uid);
    intent.putExtra("peer_name", "");
    intent.putExtra("current_uid", uid);
    startActivity(intent);
    
  1. 打开群聊会话

    Intent intent = new Intent(this, GroupMessageActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra("group_id", groupId);
    intent.putExtra("group_name", "");
    intent.putExtra("current_uid", uid);
    startActivity(intent);
    
  1. 打开客服会话

    Intent intent = new Intent(this, CustomerMessageActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra("store_id", storeId);
    intent.putExtra("app_id", APP_ID);
    intent.putExtra("current_uid", uid);
    intent.putExtra("store_name", "商店名称");
    intent.putExtra("app_name", "app名称");
    intent.putExtra("name", "用户昵称");
    startActivity(intent);
    
  1. 用户注销

    IMService.getInstance().stop()
    

AndroidManifest.xml配置

  • manifest 标签下添加:

      <!-- 必需: 权限配置 -->
      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    
  • application 标签下添加:

     <activity
         android:name="com.beetle.bauhinia.PeerMessageActivity"
         android:exported="true"
         android:windowSoftInputMode="adjustResize|stateHidden"
         android:theme="@style/imkit.ActionBar">
         <intent-filter>
             <action android:name="android.intent.action.VIEW" />
         </intent-filter>
     </activity>
    
     <activity
         android:name=".GroupMessageActivity"
         android:exported="true"
         android:theme="@style/imkit.ActionBar"
         android:windowSoftInputMode="adjustResize|stateHidden">
         <intent-filter>
             <action android:name="android.intent.action.VIEW" />
         </intent-filter>
     </activity>
    
     <activity
         android:name=".CustomerMessageActivity"
         android:exported="true"
         android:theme="@style/imkit.ActionBar"
         android:windowSoftInputMode="adjustResize|stateHidden">
         <intent-filter>
             <action android:name="android.intent.action.VIEW" />
         </intent-filter>
     </activity>
    
     <activity
         android:name="com.beetle.bauhinia.activity.PhotoActivity"
         android:label="照片"
         android:theme="@style/imkit.ActionBar">
     </activity>
    
     <activity
         android:name="com.beetle.bauhinia.MapActivity"
         android:label="位置"
         android:theme="@style/imkit.ActionBar">
     </activity>
     <activity
         android:name="com.beetle.bauhinia.LocationPickerActivity"
         android:label="位置"
         android:theme="@style/imkit.ActionBar">
     </activity>
    
     <activity
         android:name="com.beetle.bauhinia.WebActivity"
         android:label=""
         android:theme="@style/imkit.ActionBar">
     </activity>
    
     <activity
         android:name="com.beetle.bauhinia.gallery.ui.GalleryGridUI"
         android:label="@string/gallery_chat_files"
         android:launchMode="singleTop"
         android:screenOrientation="portrait"
         android:theme="@style/imkit.ActionBar" />
     <activity
         android:name="com.beetle.bauhinia.gallery.ui.GalleryUI"
         android:launchMode="singleTop"
         android:screenOrientation="portrait"
         android:theme="@style/imkit.NoActionBar" />
     <activity
         android:name="com.beetle.bauhinia.activity.OverlayActivity"
         android:theme="@style/NoActionBar" />
     <activity
         android:name="com.beetle.bauhinia.activity.MessageFileActivity"
         android:label="文件预览"
         android:theme="@style/imkit.ActionBar" />
    
      <!-- authorities 当前包名+'.fileprovider' -->
     <provider
         android:name="android.support.v4.content.FileProvider"
         android:authorities="com.beetle.im.demo.fileprovider"
         android:exported="false"
         android:grantUriPermissions="true">
         <meta-data
             android:name="android.support.FILE_PROVIDER_PATHS"
             android:resource="@xml/file_paths" />
     </provider>
    

类IMService

设置当前用户的access token

方法名:public void setAccessToken(String token)
功能:在调用start之前必须要设置用户的accessToken,token是由第三方应用服务器调用IM服务器RestAPI所得。
参数说明: 
    * token  客户端连接IM服务必须的acessToken
返回值:无返回值

设置当前用户id

方法名:public void setUID(long uid)
参数说明: 
    * uid  当前用户id
返回值:无返回值

设置当前设备id

方法名:public void setDeviceID(String deviceID)
功能:设备id可以用户多点登陆的唯一性判断,可选调用
参数说明:
    *deviceID 设备id
返回值:无返回值

监控网络变化

方法名: public void registerConnectivityChangeReceiver(Context context)
功能: 可以及时的根据网络变化情况,断开,建立socket链接。

设置观察者

方法名: 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 void sendPeerMessageAsync(IMMessage msg)
参数说明:
    *msg 消息对象

发送群组消息

方法名:public void sendGroupMessageAsync(IMMessage msg)
参数说明:
    *msg 消息对象

接口IMServiceObserver

连接状态

方法名:public void onConnectState(IMService.ConnectState state)
功能:连接状态变更通知
参数说明:
    *state 连接的状态 STATE_UNCONNECTED, STATE_CONNECTING, STATE_CONNECTED, STATE_CONNECTFAIL
返回值:无返回值

接口PeerMessageObserver

消息

方法名:public void onPeerMessage(IMMessage msg)
功能:接受到一条im消息
参数说明:
    *msg 消息对象
返回值:无返回值

消息ACK

方法名:public void onPeerMessageACK(IMMessage msg)
功能:服务器对收到消息的ack,此时这条消息才能标志为发送成功
参数说明:
    *msg 消息对象
返回值:无返回值

消息发送失败

方法名:public void onPeerMessageFailure(IMMessage msg)
功能:消息发出后,未收到服务器的ack,在和服务器的连接断开后,会通知消息发送失败。
参数说明:
    *msg 消息对象
返回值:无返回值

接口GroupMessageObserver

消息

方法名:public void onGroupMessage(IMMessage msg)
功能:接受到一条im消息
参数说明:
    *msg 消息对象
返回值:无返回值

消息ACK

方法名:public void onGroupMessageACK(IMMessage msg)
功能:服务器对收到消息的ack,此时这条消息才能标志为发送成功
参数说明:
    *msg 消息对象
返回值:无返回值

消息发送失败

方法名:public void onGroupMessageFailure(IMMessage msg)
功能:消息发出后,未收到服务器的ack,在和服务器的连接断开后,会通知消息发送失败。
参数说明:
    *msg 消息对象
返回值:无返回值

类IMApi

设置当前用户的device token

方法名:public boolean bindDeviceToken(PostDeviceToken token)
功能:设置device token后,im服务器会对用户推送离线消息,device token来自于push系统生成。
参数说明:
    *deviceToken 推送的deviceToken
返回值:boolean 是否设置成功。

清空当前用户关联的device token

方法名:public boolean unbindDeviceToken(PostDeviceToken token)
功能:im服务器不会再对这台设备推送离线消息
参数说明:
    *deviceToken 推送的deviceToken
返回值:boolean 是否清空成功。
回顶部