如何在App中实现IM功能之五快速实现图片接收和发送——箭扣科技Arrownock

如何在App中实现IM功能

之五

快速实现图片接收和发送

社交App中,用户聊天发送或接收图片,是一个非常常见的场景,这里给大家介绍如何利用Arrownock的anSocial的Photo API与anIM结合,来实现发送和接收图片。

发送端详情

当发送方选择好图片点击发送时,为了不影响用户聊天过程中的体验,我们一般会将消息先插入到sqlite数据库中,刷新界面,给这条消息加上Loading动画,表示发送中。而这背后的操作为了能够节省流量的消耗,开发时因为图片往往比较大,所以并不是直接将图片的二进制数据传输过去,而是先将图片压缩一下,再传输过去。

具体实现方式

anSocial的Photo API已经提供了多种任意压缩的尺寸,以Android开发为例,可以这么调用:

    //组装上传创建且压缩photo的数据
    Map<String, Object> params = new HashMap<String, Object>();
    InputStream inputStream = context.getResources().getAssets().open("testPhoto.png");
    //上传文件时需要使用AnSocialFile
    AnSocialFile file = new AnSocialFile("testPhoto.jpg", inputStream);
    params.put("photo", file);
    //组装想要压缩的尺寸
    Map<String, String> resolutions = new HashMap<String,String>();
    resolutions.put("small", "200x200");
    resolutions.put("middle", "400x400");
    params.put("resolutions", resolutions);

    try {
        //调用createPhoto API 上传图片
        anSocial.sendRequest("photos/create.json", AnSocialMethod.POST, 
            params, new IAnSocialCallback() {
            @Override
            public void onSuccess(JSONObject response) {
                try {
                    //上传图片成功后,根据返回的数据拿到原图的url,中等图,小图
                    JSONObject photo =response.getJSONObject("response")
                        .getJSONObject("photo");
                    String fileUrl =photo.getString("url");
                    String smallPhotoPath =photo.getJSONObject("resolutions")
                        .getString("small");
                    String middlePhotoPath= photo.getJSONObject("resolutions")
                        .getString("middle");
                    //组装原图,中等图,小图的url
                    Map<String, String>customMap = new HashMap<String,String>();
                    customMap.put("smallPhotoPath", smallPhotoPath);
                    customMap.put("middlePhotoPath", middlePhotoPath);
                    customMap.put("url", fileUrl);
                    //因为已经图片已经上传到服务器,所以聊天消息可以只发送一个空数组
                    byte[] b = new byte[1];
                    //调用anIM的sendBinary方法
                    anIM.sendBinary(clientId,b, "image", customMap);
                } catch (JSONException e) {
                }
            }
            @Override
            public void onFailure(JSONObject arg0) {
            }
        });
    } catch (ArrownockException e) {
    }

从上面的代码里可以看到,发送聊天消息时,只发送了图片地址。 在发送消息成功后,再刷新界面,将Loading动画去掉。

接收端详情:

接收方拿到消息时,从customData中可以根据设备的不同,屏幕大小的不同来获取不同的图片尺寸并展示到界面中。只有当用户点击图片时,才会跳转到一个展示图片的新界面中加载原图。

如何在App中实现IM功能系列文章:

之一离线消息常见浅析

之二快速实现离线消息模块

之三快速实现离线消息推送模块

之四创建稳健的消息发送模块

之五快速实现图片接收和发送

之六快速实现群聊的高级功能

之七快速实现聊天列表排序模块

时间: 2024-08-07 00:18:34

如何在App中实现IM功能之五快速实现图片接收和发送——箭扣科技Arrownock的相关文章

如何在App中实现IM功能之七快速实现聊天列表排序模块——箭扣科技Arrownock

如何在App中实现IM功能 之七 快速实现聊天列表排序模块 一台设备由于用户的使用习惯差异,可能导致设备的时间和实际收发消息的时间不同,这里与大家分享利用anIM收发消息时,如何根据数据中的msgId和timestamp来进行排序. 实现逻辑 发消息时,我们需要调用anIM的sendMessage方法(同类方法还有sendBinary, sendMessageToTopic等等),这个方法有一个返回数据为messageId,即当前这一条聊天消息的唯一标识,我们需要将这个messageId保存下来

如何在App中实现朋友圈功能之五点赞、评论属性详细解析——箭扣科技Arrownock

如何在App中实现朋友圈功能 之五 点赞.评论属性详细解析 快速查看评论和点赞数量: 当我们创建一个墙贴后,这个墙贴会自动带有评论数量commentCount.赞数量likeCount.讨厌数量dislikeCount三个属性. 当有用户对这个墙贴进行了评论,该墙贴的commentCount属性会自动增长,无需开发者来手动操作实现. 如果用户建立的Like中like=true,那么likeCount会自动增长,反之,dislikeCount会自动增长. 如果用户把评论删除了,或者是把点赞撤销了,

如何在App中实现IM功能之三快速实现离线消息推送模块——箭扣科技Arrownock

如何在App中实现IM功能 之三 快速实现离线消息推送模块 推送是社交功能里最常见的功能之一,许多使用IM++平台的开发者都会用到,本节我们将为大家带来如何使用IM++平台快速实现离线推送. 使用过Arrownock产品的开发者应该知道,如果要实现离线消息推送在Android设备上有4个步骤,iOS设备上有3个步骤. Android的步骤是: l anIM.connect,anPush.register,anPush.enable,anIM.bindAnPushService iOS的步骤是:

如何在App中实现朋友圈功能之二快速实现用户信息的自定义——箭扣科技Arrownock

如何在App中实现朋友圈功能 之二 快速实现用户信息的自定义 自我关联社交元素: anSocial中很多的社交元素API,如帖子(Post).相册(Album).文件(File)等,这些API的可选参数中允许传入其他社交元素的id. 当我们传了这些id时,服务器数据库里保存的是id,但是在返回结果里,会将这些id以对象的形式返回. 这样就大大提升了查询效率,原本需要查询两次的功能,现在可以一次实现,比如接下来要说的用户头像功能开发里可以利用的字段. 用户头像: 当我们在APP上创建用户,需要调用

如何在App中实现IM功能之二快速实现离线消息模块——箭扣科技Arrownock

如何在App中实现IM功能 之二 快速实现离线消息模块 一个App在实际使用聊天功能的时候,并非是一直呆在一个界面的,在等待好友发消息来的同时,有可能已经跳转到其他界面,也有可能切换到其他App. 在当前的App进入后台.好友发来消息时,需要给设备推送一条消息.以安卓为例,收取离线消息通知需要绑定anPush,具体做法是调用anIM.bindAnPushService(anID, AppKey, anPushType). 在App进入后台时,调用anIM.disconnect():在App回到前

如何在App中实现IM功能之四创建稳健的消息发送模块——箭扣科技Arrownock

如何在App中实现IM功能 之四 创建稳健的消息发送模块 anIM聊天是以心跳的方式保持设备和服务器之间的在线连接,有时候会因为网络或其他原因导致连接中断,则在该设备登录的用户在服务器端会自动下线.那么此时发送消息的话,服务器会返回用户已经下线的异常,导致消息无法发送成功. 为了避免这个问题的发生,我们可以在代码中使用一些技巧来解决. 1. 设置变量 设置一个全局变量isFromSendMsg为false. private boolean isFromSendMsg = false; 2. 判断

如何在App中实现朋友圈功能之一朋友圈实现原理浅析——箭扣科技Arrownock

如何在App中实现朋友圈功能 之一 朋友圈实现原理浅析 微信朋友圈.新浪微博.知乎等知名朋友圈类型功能,大家有没有想过其实现的逻辑呢? 本文以微信朋友圈功能为例,解析实现逻辑. 朋友圈的结构: 朋友圈从总体上来说会分为6块结构,分别是墙.用户.图片.墙贴.评论与点赞. 墙:一块公共的墙,所有的墙贴都位于其上,如果APP只实现朋友圈功能,那么墙贴其实是可以不用的,但是如果APP要实现朋友圈.新闻圈等等其他各种墙贴类型消息的话,那么墙就显得很有必要了,这时候我们需要通过建立不同的墙来展示不同类型的墙

如何在App中实现朋友圈功能之三快速实现双向好友功能——箭扣科技Arrownock

如何在App中实现朋友圈功能 之三 快速实现双向好友功能 在社交APP的使用中,用户相互添加好友是一个必要的场景,本期技术分享在这里给大家介绍如何利用AnSocial的Friend来实现微博粉丝和微信好友机制. 微博粉丝机制: 微博是一个单向的好友关系链,从单个用户出发,他拥有关注者和粉丝.利用Friend可以实现以下场景:用户A关注了B,用户C关注了A,即B拥有粉丝A,A拥有粉丝C. 具体实现方式: 用户A关注B,调用新建Friend(friends/add.json),参数中target_f

如何在App中实现朋友圈功能之七快速实现上拉加载朋友圈功能——箭扣科技Arrownock

如何在App中实现朋友圈功能 之七 快速实现上拉加载朋友圈功能 逻辑分析: 取出缓存postList里的最后一条数据postList a. 如果lastPost存在,说明缓存里有数据,接着取出数据库中与lastPost时间最接近的一条latestPost,以它们的created_at作为关键查询条件,去服务器取limit条(比如10)数据: 1. 如果服务器返回的Post数量大于0,将Post存入数据库,之后需要做两个查询动作: 查询出新的Like和Comment:根据本地数据库里的最新一条Li