zoukankan      html  css  js  c++  java
  • GoBelieve Android SDK接入备忘

     

    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之前必须要设置用户的accessTokentoken是由第三方应用服务器调用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);
  • 相关阅读:
    【DFS】XIII Open Championship of Y.Kupala Grodno SU Grodno, Saturday, April 29, 2017 Problem D. Divisibility Game
    【二分】【三分】【计算几何】XIII Open Championship of Y.Kupala Grodno SU Grodno, Saturday, April 29, 2017 Problem L. Lines and Polygon
    【线段树】XIII Open Championship of Y.Kupala Grodno SU Grodno, Saturday, April 29, 2017 Problem J. Jedi Training
    【贪心】【后缀自动机】XIII Open Championship of Y.Kupala Grodno SU Grodno, Saturday, April 29, 2017 Problem E. Enter the Word
    【转载】随机生成k个范围为1-n的随机数,其中有多少个不同的随机数?
    【推导】【贪心】XVII Open Cup named after E.V. Pankratiev Stage 4: Grand Prix of SPb, Sunday, Octorber 9, 2016 Problem H. Path or Coloring
    【枚举】XVII Open Cup named after E.V. Pankratiev Stage 4: Grand Prix of SPb, Sunday, Octorber 9, 2016 Problem D. Cutting Potatoes
    【找规律】【递归】XVII Open Cup named after E.V. Pankratiev Stage 4: Grand Prix of SPb, Sunday, Octorber 9, 2016 Problem F. Doubling
    【贪心】Codeforces Round #436 (Div. 2) D. Make a Permutation!
    【计算几何】【圆反演】计蒜客17314 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 G. Finding the Radius for an Inserted Circle
  • 原文地址:https://www.cnblogs.com/nuanshou/p/4401105.html
Copyright © 2011-2022 走看看