网易云信

2019-01-23  本文已影响0人  yangwenaho

项目用到的网易云信有单聊和发送货源链接的功能:


D)LA}OWGQC`%F%F0B5MO)Q3.png

第一步:在application那边初始化配置:

@Override
    public void onCreate() {
        super.onCreate();
        AbstractProxyObserver.setLoginClass(LoginActivity.class);
        NIMClient.init(this,loginfo(),new SDKOptions());
        if (NIMUtil.isMainProcess(this)){
            //初始化UIKIT模块
            initUIKIT();
        }
    }

    private void initUIKIT() {
        //初始化
        NimUIKit.init(this,buildUIKitOptions());
        //IM会话窗口定制初始化
        SessionHelper.init();
        // 设置地理位置提供者。如果需要发送地理位置消息,该参数必须提供。如果不需要,可以忽略。
        NimUIKit.setLocationProvider(new NimDemoLocationProvider());
    }
    private UIKitOptions buildUIKitOptions() {
        UIKitOptions options = new UIKitOptions();
        // 设置app图片/音频/日志等缓存目录
        options.appCacheDir = NimSDKOptionConfig.getAppCacheDir(this) + "/app";
        return options;
    }
    private LoginInfo loginfo() {
        String account  = SpUtil.getString(ConstUtils.IM_ACCID);
        String token  = SpUtil.getString(ConstUtils.IM_TOKEN);
        if (!TextUtils.isEmpty(account) && !TextUtils.isEmpty(token)){
            DemoCache.setAccount(account.toLowerCase());
            return new LoginInfo(account,token);
        }
        return null;
    }

第二步:自定义类继承P2PMessageActivity:

public class CommodityActivity extends P2PMessageActivity{
    public  static void start(Context context, String contactId, SessionCustomization customization,Bundle bundle){
        Intent intent = new Intent();
        intent.putExtra(Extras.EXTRA_ACCOUNT, contactId);
        intent.putExtra(Extras.EXTRA_CUSTOMIZATION, customization);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        intent.setClass(context, CommodityActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        context.startActivity(intent);

    }
    
}

第三步:跳转到聊天界面:

Bundle bundle = new Bundle();
                //在这里构造一个自定义消息
                bundle.putSerializable("data",detailsBean);//实体数据
                CommodityActivity.start(getActivity(),detailsBean.getUser().getAccid(), SessionHelper.getMyP2pCustomization(),bundle);

这里的数据是聊天界面需要的数据。
第四步:在MessageFragment 类中自定义自己的头部局,然后拿到实体做进一步操作。
获取实体数据:

 data = (DetailsBean) getArguments().getSerializable("data");

拿到数据后进行相关的操作。
第五步:在CustomAttachmentType自定义类型:

int Supply= 7;

第六步:进行相关的注册

public class CustomAttachParser implements MsgAttachmentParser {

    private static final String KEY_TYPE = "type";
    private static final String KEY_DATA = "data";

    @Override
    public MsgAttachment parse(String json) {
        CustomAttachment attachment = null;
        try {

            JSONObject object = new JSONObject(json);
            int type = object.getInt(KEY_TYPE);
            JSONObject data = object.getJSONObject(KEY_DATA);
            switch (type) {

                case CustomAttachmentType.SnapChat:
                    return new SnapChatAttachment(data);
                case CustomAttachmentType.Sticker:
                    attachment = new StickerAttachment();
                    break;
                case CustomAttachmentType.RTS:
                    attachment = new RTSAttachment();
                    break;        
                case CustomAttachmentType.Supply:
                    attachment = new CommodityMoneyAttachment();
                    break;
               
            }

            if (attachment != null) {
                attachment.fromJson(data);
            }
        } catch (Exception e) {

        }

        return attachment;
    }

    
    public static String packData(int type, JSONObject data) {
        JSONObject object = new JSONObject();
        try {
            object.put(KEY_TYPE, type);
            if (data != null) {
                object.put(KEY_DATA, data);
            }
        } catch (JSONException e) {
        }
        return object.toString();
    }

NimUIKit.registerMsgItemViewHolder(MoneyAttachment.class, MsgViewHolderMoney.class);

第七步:解析数据格式相关的类

public class SupplyAttachment extends CustomAttachment implements Serializable{

   private static final String STARTCITY = "startcity";
   private static final String ENDCITY = "endcity";
   private static final String TYPES = "types";
   private static final String ID = "id";
   private static final String ORDER = "order";
   private static final String IDENTIFICATION_MODEL = "Identification_Model";

   private String startcity;
   private String endcity;
   private String types;
   private String id;
   private String order;
   private String Identification_Model;


   public SupplyAttachment() {
       super(CustomAttachmentType.Supply);

   }

   @Override
   public String toJson(boolean send) {
       return CustomAttachParser.packData(CustomAttachmentType.Supply,packData());
   }

   @Override
   protected void parseData(JSONObject data) {
       startcity = data.optString(STARTCITY);
       endcity = data.optString(ENDCITY);
       types = data.optString(TYPES);
       id = data.optString(ID);
       order = data.optString(ORDER);
       Identification_Model = data.optString(IDENTIFICATION_MODEL);

   }



   //数据打包
   @Override
   protected JSONObject packData() {
       JSONObject data = new JSONObject();
       try {
           data.put(STARTCITY,startcity);
           data.put(ENDCITY,endcity);
           data.put(TYPES,types);
           data.put(ID,id);
           data.put(ORDER,order);
           data.put(IDENTIFICATION_MODEL,Identification_Model);
       } catch (JSONException e) {
           e.printStackTrace();
       }

       return data;
   }


   public String getIdentification_Model() {
       return Identification_Model;
   }

   public void setIdentification_Model(String identification_Model) {
       Identification_Model = identification_Model;
   }

   public String getStartcity() {
       return startcity;
   }

   public void setStartcity(String startcity) {
       this.startcity = startcity;
   }

   public String getEndcity() {
       return endcity;
   }

   public void setEndcity(String endcity) {
       this.endcity = endcity;
   }


   public String getTypes() {
       return types;
   }

   public void setTypes(String types) {
       this.types = types;
   }

   public String getId() {
       return id;
   }

   public void setId(String id) {
       this.id = id;
   }

    public String getOrder() {
       return order;
   }

   public void setOrder(String order) {
       this.order = order;
   }

   @Override
   public String toString() {
       return "SupplyAttachment{" +
               "startcity='" + startcity + '\'' +
               ", endcity='" + endcity + '\'' +
               ", types='" + types + '\'' +
               ", id='" + id + '\'' +
               ", order='" + order + '\'' +
               '}';
   }
}

第八步:在MessageFragment界面发送数据:

@Override
   public void onClick(View v) {
       
       SupplyAttachment attachment = new SupplyAttachment();
       attachment.setStartcity(data.getStart_city_name());
       attachment.setEndcity(data.getEnd_city_name());
       attachment.setId(data.getId());
       attachment.setTypes(data.getFreight_detail()+"/"+data.getCar_type_and_length());
       if (data.getOrder_number() != null){
           attachment.setOrder("订单号:"+ data.getOrder_number());
       }else {
           attachment.setOrder("");
       }

       Gson gson = new Gson();
       String jsonStr = gson.toJson(data);
       attachment.setIdentification_Model(jsonStr);

       IMMessage  message = MessageBuilder.createCustomMessage(sessionId, SessionTypeEnum.P2P,attachment);
       sendMessage(message);
   }

sessionId是对方的账号。

最后需要云信demo的UIKIT项目包。

上一篇下一篇

猜你喜欢

热点阅读