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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
        }
    }

 

以上是关于C#关于HttpClient的应用:极光推送IM集成的主要内容,如果未能解决你的问题,请参考以下文章

Android 极光推送造成IM服务绑定失败bug

iOS环信和极光推送消息角标记录

关于极光推送需要注意的几点

C# Jpush 极光推送消息推送

Jpush之如何利用HttpClient实现消息推送到手机

关于集成极光IM收到信息无法跳转的解决办法