C#关于HttpClient的应用(二):极光推送IM集成

    public class JPushClient:BaseHttpClient
    {
        private String appKey;
        private String masterSecret;

        public JPushClient()
        {
            this.appKey = BaseHelper.GetValue("PushMessageAppKey");
            this.masterSecret = BaseHelper.GetValue("PushMessageMasterSecret");
        }

        public JPushClient(String appKey, String masterSecret)
        {
            this.appKey = appKey;
            this.masterSecret = masterSecret;
        }

        /// <summary>
        /// HTTP 验证
        /// </summary>
        /// <returns></returns>
        public override Dictionary<string,string> Authorization()
        {
            var auth = BaseHelper.GetBase64Encode(this.appKey + ":" + this.masterSecret);
            return new Dictionary<string, string> { { "Authorization","Basic "+ auth } };
        }
    }

Server层:

    public class JMessageServer
    {
        #region 请求地址

        private const String HOST_PATH = "https://api.im.jpush.cn";
        private const String USERS_PATH = HOST_PATH + "/v1/users/";
        private const String GROUP_PATH = HOST_PATH + "/v1/groups/";
        private const String Message_PATH = HOST_PATH + "/v1/messages";
        private const String ADMIN_PATH = HOST_PATH + "/v1/admins/";

        #endregion

        /// <summary>
        /// 添加多个用户
        /// </summary>
        /// <param name="users"></param>
        /// <returns></returns>
        public bool AddUsers(List<JUserDTO> users)
        {
            String url = USERS_PATH;
            JPushClient client=new JPushClient();
            //ResponseWrapper result = sendPost(url, Authorization(), JsonHelper.ToJson(users));

            if (result.responseCode == HttpStatusCode.Created)
            {
                return true;
            }
            else
            {
                //移除已经注册过的用户,重新添加
                var content = JsonHelper.ToObject<List<MessageUser>>(result.responseContent);
                bool flag = true;
                foreach (var item in content)
                {
                    if (item.error.code == (int)EnumMessageError.用户已存在)
                    {
                        var user = users.First(p => p.username == item.username);
                        users.Remove(user);
                    }
                    else
                    {
                        flag = false;
                    }
                }
                if (flag)
                {
                    AddUsers(users);
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }

        /// <summary>
        /// 添加单个用户
        /// </summary>
        /// <param name="users"></param>
        /// <returns></returns>
        public ResultDTO AddUser(JUserDTO users)
        {
            String url = HOST_NAME_SSL;
            url += USERS_PATH;

            ResponseWrapper result = sendPost(url, Authorization(), "[" + JsonHelper.ToJson(users) + "]");

            if (result.responseCode == HttpStatusCode.Created)
            {
                return new ResultDTO
                {
                    Result = 1,
                    Info = string.Empty
                };
            }
            else
            {
                var content = JsonHelper.ToObject<MessageGroup>(result.responseContent);
                return new ResultDTO
                {
                    Result = 0,
                    Info = BaseHelper.GetEnumKey<EnumMessageError>(content.error.code)
                };
            }
        }

        /// <summary>
        /// 添加管理员(注:管理员不能和用户重复注册)
        /// </summary>
        /// <param name="users"></param>
        /// <returns></returns>
        public ResultDTO AddAdmin(JUserDTO users)
        {
            String url = HOST_NAME_SSL;
            url += ADMIN_PATH;

            ResponseWrapper result = sendPost(url, Authorization(), JsonHelper.ToJson(users));

            if (result.responseCode == HttpStatusCode.Created)
            {
                return new ResultDTO
                {
                    Result = 1,
                    Info = string.Empty
                };
            }
            else
            {
                var content = JsonHelper.ToObject<MessageGroup>(result.responseContent);
                return new ResultDTO
                {
                    Result = 0,
                    Info = BaseHelper.GetEnumKey<EnumMessageError>(content.error.code)
                };
            }
        }

        /// <summary>
        /// 获取管理员列表
        /// </summary>
        /// <param name="start"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        public string GetAdminsList(int start, int count)
        {
            String url = HOST_NAME_SSL;
            url += ADMIN_PATH + string.Format("?start={0}&count={1}", start, count);

            ResponseWrapper result = sendGet(url, Authorization(), null);
            return result.responseContent;
        }

        //修改用户昵称
        public ResultDTO UpdateUserInfo(string userId, string nickName)
        {
            String url = HOST_NAME_SSL;
            url += USERS_PATH + userId;
            var param = "{\"nickname\":\"" + nickName + "\"}";
            ResponseWrapper result = sendPut(url, Authorization(), param);
            if (result.responseCode == HttpStatusCode.NoContent)
            {
                return new ResultDTO
                {
                    Result = 1,
                    Info = string.Empty
                };
            }
            else
            {
                var content = JsonHelper.ToObject<MessageGroup>(result.responseContent);
                return new ResultDTO
                {
                    Result = 0,
                    Info = BaseHelper.GetEnumKey<EnumMessageError>(content.error.code)
                };
            }
        }

        /// <summary>
        /// 获取用户信息
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        public string GetUserInfo(string userId)
        {
            String url = HOST_NAME_SSL;
            url += USERS_PATH + userId;

            ResponseWrapper result = sendGet(url, Authorization(), null);
            return result.responseContent;
        }

        /// <summary>
        /// 修改登录密码
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        public ResultDTO ModifyLoginPassword(string userId, string password)
        {
            String url = HOST_NAME_SSL;
            url += USERS_PATH + userId + "/password";
            var param = "{\"new_password\":\"" + password + "\"}";
            ResponseWrapper result = sendPut(url, Authorization(), param);
            if (result.responseCode == HttpStatusCode.NoContent)
            {
                return new ResultDTO
                {
                    Result = 1,
                    Info = string.Empty
                };
            }
            else
            {
                var content = JsonHelper.ToObject<MessageGroup>(result.responseContent);
                return new ResultDTO
                {
                    Result = 0,
                    Info = BaseHelper.GetEnumKey<EnumMessageError>(content.error.code)
                };
            }
        }

        /// <summary>
        /// 创建群组
        /// </summary>
        /// <param name="group"></param>
        /// <returns></returns>
        public ResultDTO AddGroup(JGroupDTO group)
        {
            String url = HOST_NAME_SSL;
            url += GROUP_PATH;

            ResponseWrapper result = sendPost(url, Authorization(), JsonHelper.ToJson(group));
            if (result.responseCode == HttpStatusCode.Created)
            {
                var content = JsonHelper.ToObject<JGroupDTO>(result.responseContent);
                return new ResultDTO
                {
                    Result = 1,
                    Info = content.gid
                };
            }
            else
            {
                var content = JsonHelper.ToObject<MessageGroup>(result.responseContent);
                return new ResultDTO
                {
                    Result = 0,
                    Info = BaseHelper.GetEnumKey<EnumMessageError>(content.error.code)
                };
            }
        }

        /// <summary>
        /// 删除群组
        /// </summary>
        /// <param name="gid">群组ID</param>
        public ResultDTO DeleteGroup(string gid)
        {
            String url = HOST_NAME_SSL;
            url += GROUP_PATH;

            ResponseWrapper result = sendDelete(url + gid, Authorization(), "");
            if (result.responseCode == HttpStatusCode.NoContent)
            {
                return new ResultDTO
                {
                    Result = 1,
                    Info = string.Empty
                };
            }
            else
            {
                var content = JsonHelper.ToObject<MessageGroup>(result.responseContent);
                return new ResultDTO
                {
                    Result = 0,
                    Info = BaseHelper.GetEnumKey<EnumMessageError>(content.error.code)
                };
            }
        }

        /// <summary>
        /// 退出群组
        /// </summary>
        /// <param name="gid">群组ID</param>
        /// <param name="userId">用户ID</param>
        /// <returns></returns>
        public ResultDTO DeleteGroupUser(string gid, string userId)
        {
            String url = HOST_NAME_SSL;
            url += GROUP_PATH + gid + "/members";
            JGroupUserDTO dto = new JGroupUserDTO();
            dto.remove = new[] { userId };
            var param = JsonHelper.ToJson(dto);
            ResponseWrapper result = sendPost(url, Authorization(), param);
            if (result.responseCode == HttpStatusCode.NoContent)
            {
                return new ResultDTO
                {
                    Result = 1,
                    Info = string.Empty
                };
            }
            else
            {
                var content = JsonHelper.ToObject<MessageGroup>(result.responseContent);
                return new ResultDTO
                {
                    Result = 0,
                    Info = BaseHelper.GetEnumKey<EnumMessageError>(content.error.code)
                };
            }
        }

        /// <summary>
        /// 添加群组成员
        /// </summary>
        /// <param name="gid">群组ID</param>
        /// <param name="userId">用户ID</param>
        /// <returns></returns>
        public ResultDTO AddGroupUser(string gid, string userId)
        {
            String url = HOST_NAME_SSL;
            url += GROUP_PATH + gid + "/members";
            JGroupUserDTO dto = new JGroupUserDTO();
            dto.add = new[] { userId };
            var param = JsonHelper.ToJson(dto);
            ResponseWrapper result = sendPost(url, Authorization(), param);
            if (result.responseCode == HttpStatusCode.NoContent)
            {
                return new ResultDTO
                {
                    Result = 1,
                    Info = string.Empty
                };
            }
            else
            {
                var content = JsonHelper.ToObject<MessageGroup>(result.responseContent);
                return new ResultDTO
                {
                    Result = 0,
                    Info = BaseHelper.GetEnumKey<EnumMessageError>(content.error.code)
                };
            }
        }

        /// <summary>
        /// 更新群组成员
        /// </summary>
        /// <param name="gid">群组ID</param>
        /// <param name="addUsers">新增的成员IDs</param>
        /// <param name="removeUsers">移除的群组IDs</param>
        /// <returns></returns>
        public ResultDTO UpdateGroupUsers(string gid, string[] addUsers, string[] removeUsers)
        {
            String url = HOST_NAME_SSL;
            url += GROUP_PATH + gid + "/members";
            JGroupUserDTO dto = new JGroupUserDTO { remove = removeUsers, add = addUsers };
            var param = JsonHelper.ToJson(dto);
            ResponseWrapper result = sendPost(url, Authorization(), param);
            if (result.responseCode == HttpStatusCode.NoContent)
            {
                return new ResultDTO
                {
                    Result = 1,
                    Info = string.Empty
                };
            }
            else
            {
                var content = JsonHelper.ToObject<MessageGroup>(result.responseContent);
                return new ResultDTO
                {
                    Result = 0,
                    Info = BaseHelper.GetEnumKey<EnumMessageError>(content.error.code)
                };
            }
        }

        /// <summary>
        /// 发送个人信息
        /// </summary>
        /// <param name="fromUserId"></param>
        /// <param name="toUserId"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        public string SendSingleMessage(string fromUserId, string toUserId, MsgContent content)
        {
            String url = HOST_NAME_SSL;
            url += Message_PATH;
            var message = new JMessageDTO
            {
                version = 1,
                target_type = JTargetType.single.ToString(),
                from_type = JFromType.admin.ToString(),
                msg_type = JMsgType.text.ToString(),
                from_id = fromUserId,
                target_id = toUserId,
                msg_body = content
            };
            var param = JsonHelper.ToJson(message);
            ResponseWrapper result = sendPost(url, Authorization(), param);
            return result.responseContent;

        }

        /// <summary>
        /// 发送群组信息
        /// </summary>
        /// <param name="fromUserId"></param>
        /// <param name="gid"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        public string SendGroupMessage(string fromUserId, string gid, MsgContent content)
        {
            String url = HOST_NAME_SSL;
            url += Message_PATH;
            var message = new JMessageDTO
            {
                version = 1,
                target_type = JTargetType.group.ToString(),
                from_type = JFromType.admin.ToString(),
                msg_type = JMsgType.text.ToString(),
                from_id = fromUserId,
                target_id = gid,
                msg_body = content
            };
            var param = JsonHelper.ToJson(message);
            ResponseWrapper result = sendPost(url, Authorization(), param);
            return result.responseContent;
        }
    }
时间: 2024-08-06 19:59:32

C#关于HttpClient的应用(二):极光推送IM集成的相关文章

(转载)iOS 极光推送SDK 集成指南

iOS SDK 集成指南 使用提示 本文匹配的 SDK版本:r1.2.5 以后. 查看最近更新了解最新的SDK更新情况. 产品功能说明 极光推送(JPush)是一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上,让开发者积极地保持与用户的连接,从而提高用户活跃度.提高应用的留存率.极光推送客户端支持 Android, iOS 两个平台. 本 iOS SDK 方便开发者基于 JPush 来快捷地为 iOS App 增加推送功能,减少集成 APNs 需要的工作量.开发复杂度. 主要

JPush 极光推送 (集成流程)

JPush说明文档 JPush iOS 推送原理及问题 (参考:http://blog.jpush.cn/apns/) JPush iOS 初步了解推送方式 (详解: http://docs.jpush.io/client/ios_sdk/) 从上图可以看出,JPush iOS Push 包括 2 个部分,APNs 推送(代理),与 JPush 应用内消息. 红色部分是 APNs 推送,JPush 代理开发者的应用(需要基于开发者提供的应用证书),向苹果 APNs 服务器推送.由 APNs Se

android 极光推送sdk集成

一.注册 二.在官网登录,右上角,点击控制台 进去后点创建应用 填好应用名称和应用包名 点击下面的图片 左上角有一个选择应用,进入你刚才创建的应用,你会得到一个AppKey,后面会用到 三.创建应用后,我们来创建一个应用.注意应用名称和包名要和刚才的相同. 然后去官网->文档->资源下载->JPush->下载Android-SDK,如果需要x86 SDK和MIPS SDK框架的,可以全部下载. 四.将下载的文件解压,libs文件夹下面的文件全部复制粘贴到你项目的libs中,将jpu

Swift集成极光推送

今天介绍一下用swift集成极光推送 一.首先到极光推送的官网下载iOS对应的SDK包   SDK下载地址 二.第二步在极光的官网创建账号配置对应的应用信息,推送证书的这些就不介绍了很基本,官网的很详细 配置应用地址 三.第三创建一个工程,导入下载的SDK包,并且导入依赖的库文件,编译看有没有错误提示 四.配置工程的相关信息 五.开始代码编写,集成Jpush 六.运行工程,检测是否集成正确 七.后台测试,来到极光推送的应用后台测试 滑动消息进入前台,控制台打印通知消息 以上便是极光推送的集成步骤

【Android应用开发】 推送原理解析 极光推送使用详解 (零基础精通推送)

作者 : octopus_truth 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/45046283 推送技术产生场景 : -- 服务器端主动性 : 客户端与服务器交互都是客户端主动的, 服务器一般不能主动与客户端进行数据交互, 因为服务器端无法得知客户端的 IP 地址 及 状态; -- 数据实时性 : 如果服务器端有紧急数据要传递给客户端, 就必须主动向客户端发送数据; -- 基本原理 : 使客户端实时获取服务器端消息,

推送原理解析 极光推送使用详解

推送原理解析 极光推送使用详解 原军锋 12016.09.22 18:10:07字数 5,705阅读 19,494 推送技术产生场景: --服务器端主动性: 客户端与服务器交互都是客户端主动的, 服务器一般不能主动与客户端进行数据交互, 因为服务器端无法得知客户端的 IP 地址 及 状态; --数据实时性: 如果服务器端有紧急数据要传递给客户端, 就必须主动向客户端发送数据; --基本原理: 使客户端实时获取服务器端消息, Pull 方式, 小周期轮询, 费电费流量; 另一个就是 Push 方式

极光推送使用实例(二) Android客户端

上一篇简单介绍了极光推送在Java服务端的实现,如果感兴趣的可以看一下极光推送使用实例(一)JAVA服务端.这篇文章介绍下极光推送在Android客户端的实现. JPush Android SDK 是作为 Android Serivice 长期运行在后台的,从而创建并保持长连接,保持永远在线的能力.JPush Android SDK 由于使用自定义协议,协议体做得极致地小,流量消耗非常地小.电量方面,JPush Android SDK 经过持续地优化,尽可能减少不必要的代码执行:并且,长期的版本

关于极光推送Jpush的demo

关于极光推送Jpush 推送是手机app必不可少的一样功能,这次由于公司项目需要研究了一下.由于推送一般写于服务端,所以对于不会Android的javaweb程序员要写出一个完整的demo是一件很头痛的事情.所以我就在这里从头到尾写一个例子以示参考.由于我也不懂Android 只是由于项目需要百度了一个demo,当中有很多不足的地方忘各位大神指正. 一.首先先简单的介绍一下什么是极光推送 ①为什么需要推送:为了解决数据同步的问题,在手机平台上,常用的方法有2种.一种是定时去服务器上查询数据,也叫

极光推送开发(一)

网上面关于极光推送的文章不多,再此写一篇文章进行说明. 极光推送的官方网站:https://www.jpush.cn/common/ (一)准备工作 在官方网站中,它已经对极光推送如何开发进行了详细的说明,照着上面的步骤是不难把极光推送应用到自己开发的客户端中的. 极光推送官方网站的说明文档链接: http://docs.jpush.io/guideline/android_guide/ 点击打开如图所示: 在这里详细介绍了集成的步骤. 首先到资源下载处下载客户端SDK,本文主要讲解androi