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 = ,
Info = string.Empty
};
}
else
{
var content = JsonHelper.ToObject<MessageGroup>(result.responseContent);
return new ResultDTO
{
Result = ,
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 = ,
Info = string.Empty
};
}
else
{
var content = JsonHelper.ToObject<MessageGroup>(result.responseContent);
return new ResultDTO
{
Result = ,
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 = ,
Info = string.Empty
};
}
else
{
var content = JsonHelper.ToObject<MessageGroup>(result.responseContent);
return new ResultDTO
{
Result = ,
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 = ,
Info = string.Empty
};
}
else
{
var content = JsonHelper.ToObject<MessageGroup>(result.responseContent);
return new ResultDTO
{
Result = ,
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 = ,
Info = content.gid
};
}
else
{
var content = JsonHelper.ToObject<MessageGroup>(result.responseContent);
return new ResultDTO
{
Result = ,
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 = ,
Info = string.Empty
};
}
else
{
var content = JsonHelper.ToObject<MessageGroup>(result.responseContent);
return new ResultDTO
{
Result = ,
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 = ,
Info = string.Empty
};
}
else
{
var content = JsonHelper.ToObject<MessageGroup>(result.responseContent);
return new ResultDTO
{
Result = ,
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 = ,
Info = string.Empty
};
}
else
{
var content = JsonHelper.ToObject<MessageGroup>(result.responseContent);
return new ResultDTO
{
Result = ,
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 = ,
Info = string.Empty
};
}
else
{
var content = JsonHelper.ToObject<MessageGroup>(result.responseContent);
return new ResultDTO
{
Result = ,
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 = ,
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 = ,
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集成的更多相关文章

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

    iOS SDK 集成指南 使用提示 本文匹配的 SDK版本:r1.2.5 以后. 查看最近更新了解最新的SDK更新情况. 产品功能说明 极光推送(JPush)是一个端到端的推送服务,使得服务器端消息能 ...

  2. ionic中极光推送的集成

    1.到极光官网注册账号,新建应用获得appkey. 详见:https://www.jiguang.cn/app/list 2.引入jpush插件 详见:https://github.com/jpush ...

  3. iOS 极光推送的集成以及一些集成后的狗血

    1.首先进入极光文档下载激光推送的SDk---传送门http://docs.jiguang.cn/jpush/client/iOS/ios_sdk/   将解压后的lib子文件夹(包含JPUSHSer ...

  4. ios极光推送快速集成教程

    内容中包含 base64string 图片造成字符过多,拒绝显示

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

    作者 : octopus_truth 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/45046283 推送技术产生场景 : -- ...

  6. JPushDemo【极光推送集成,基于v3.1.8版本】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个Demo只是记录极光推送的集成,不能运行. 使用步骤 一.项目组织结构图 注意事项: 1.  导入类文件后需要change包名以 ...

  7. 极光推送>>java SDK服务端集成后台项目(使用详解)

    PS:如果你是第一次用推送,那就直接按照我的步骤来,再去看官方文档,这样,更容易能理解操作流程.还有——-请耐心看 极光文档(java SDK)请参考 [ 极光文档 ] 步骤一: 首先,你必须在 [极 ...

  8. 李洪强iOS之集成极光推送二iOS 证书 设置指南

    李洪强iOS之集成极光推送二iOS 证书 设置指南 创建应用程序ID 登陆 iOS Dev Center 选择进入iOS Provisioning Portal. 在 iOS Provisioning ...

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

    上一篇简单介绍了极光推送在Java服务端的实现,如果感兴趣的可以看一下极光推送使用实例(一)JAVA服务端.这篇文章介绍下极光推送在Android客户端的实现. JPush Android SDK 是 ...

随机推荐

  1. cocos2dx --- Widget 载入中 CCNode

    如果说. Widget 有addChild()   与 addNode()  两个方法. 如今我要载入一个粒子特效进去,下图: Widget* layout = dynamic_cast<Wid ...

  2. 从头开始建网站(三)DNS

    前面介绍了站点搭建所须要的两大要素:域名和server,这次要说的是域名解析,也就是把域名和server进行绑定的过程. 我们在訪问网络时,网址会被发送到DNSserver,然后由DNSserver返 ...

  3. Java知多少(87)选择框和单选按钮(转)

    选择框.单选框和单选按钮都是选择组件,选择组件有两种状态,一种是选中(on),另一种是未选中(off),它们提供一种简单的 “on/off”选择功能,让用户在一组选择项目中作选择. 选择框 选择框(J ...

  4. 采用ToolRunner执行Hadoop基本面分析程序

    为了简化执行作业的命令行.Hadoop它配备了一些辅助类.GenericOptionsParser它是一类.经常用来解释Hadoop命令行选项,并根据需要.至Configuration采取相应的对象设 ...

  5. Extjs Web Desktop申请书

    今天我Web Desktop应用基本完成.多语言支持.现有asp,php,jsp版本号. 废话拍了几张照片让大家有一个直观的了解: watermark/2/text/aHR0cDovL2Jsb2cuY ...

  6. 自己主动机串标:Directed Acyclic Word Graph

    trie -- suffix tree -- suffix automa 有这么几个情况: 用户输入即时响应AJAX搜索框, 显示候选名单. 搜索引擎keyword统计数量. 后缀树(Suffix T ...

  7. 【Leetcode】Partition List (Swap)

    Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...

  8. redhat6.3已安装was6.1你可以不弹出安装程序

    这在为期两天的课程redhat6.3安装was6.1 使用Xmanager打开图形界面.进入/WAS夹,跑./install 它有一个直接跳转,不管是什么反应,起初我以为这个问题的图形界面,搜索了半天 ...

  9. python字典构造函数dict(mapping)解析

    Python字典的构造函数有三个,dict().dict(**args).dict(mapping),当中第一个.第二个构造函数比較好理解也比較easy使用, 而dict(mapping)这个构造函数 ...

  10. C#+Mapxtreme 实现一些GIS系统基本的功能

    此程序包括了mapxtreme地图相关基本功能的演示其中包括 鹰眼地图,图层控制,发达,缩小,平移地图,地图模糊查询,中点工具,距离测量工具,面积测量工具,图元信息查看工具.适合于企业级开发,可以为您 ...