using Lskj.Push.Common;
using Lskj.Push.Common.Resp;
using Lskj.Push.Device;
using Lskj.Push.Push;
using Lskj.Push.Push.Mode;
using Lskj.Push.Report;
using Lskj.Push.Util;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Lskj.Push
{
///
/// Main Entrance - 该类为JPush服务的主要入口
///
public class JPushClient
{
private PushClient _pushClient;
private ReportClient _reportClient;
private DeviceClient _deviceClient;
///
/// 带两个参数的构造函数,该状态下,ApnsProduction默认为false
///
/// Portal上产生的app_key
/// 你的API MasterSecret
public JPushClient(String app_key, String masterSecret)
{
_pushClient = new PushClient(app_key, masterSecret);
_reportClient = new ReportClient(app_key, masterSecret);
_deviceClient = new DeviceClient(app_key, masterSecret);
}
// ----------------------------- Push API
///
/// 想某个设备或者某设别列表推送一条通知,或者消息
///
/// 推送的数据结构,包含平台信息推送目标,通知内容,消息内容与可选参数
/// 成功时返回sendno和messageid,失败时有异常抛出
/// 包含http错误码:如401,404等,错误信息,JPush returen code和JPush returen mssage
/// 包含错误的信息
///
public MessageResult SendPush(PushPayload payload)
{
Preconditions.checkArgument(payload != null, "pushPayload should not be empty");
return _pushClient.sendPush(payload);
}
///
/// 想某个设备或者某设别列表推送一条通知,或者消息
///
/// 推送的json结构,包含平台信息推送目标,通知内容,消息内容与可选参数
/// 成功时返回sendno和messageid,失败时有异常抛出
/// 包含http错误码:如401,404等,错误信息,JPush returen code和JPush returen mssage
/// 包含错误的信息
///
public MessageResult SendPush(string payloadString)
{
Preconditions.checkArgument(!string.IsNullOrEmpty(payloadString), "payloadString should not be empty");
return _pushClient.sendPush(payloadString);
}
// ------------------------------- Report API
///
/// Get received report.
///
/// 100 msgids to batch getting is supported.
/// Can be printed to JSON.
/// 包含http错误码:如401,404等,错误信息,JPush returen code和JPush returen mssage
/// 包含错误的信息
///
public ReceivedResult getReceivedApi(String msg_ids)
{
return _reportClient.getReceiveds(msg_ids);
}
///
/// Get received report v3.
///
/// 100 msgids to batch getting is supported.
///
public ReceivedResult getReceivedApi_v3(String msg_ids)
{
return _reportClient.getReceiveds_v3(msg_ids);
}
///
/// 用户统计查询接口,这个接口是vip用户专用
///
/// 时间单位,有三个取值:HOUR、DAY、MONTH
/// 起始时间
/// 持续时间
/// 包含ios android的用户情况
public UsersResult getReportUsers(TimeUnit timeUnit, String start, int duration)
{
return _reportClient.getUsers(timeUnit, start, duration);
}
///
/// 消息统计查询接口,这个接口是vip用户专用
///
/// 用逗号分隔的多个消息id
/// 包含各个mssageid和ios android平台
public MessagesResult getReportMessages(params String[] msgIds)
{
return _reportClient.getReportMessages(msgIds);
}
// ------------------------------- Device API
///
/// 获取当前设备的所有属性,包含tags,alias
///
/// 设备的registrationID
/// 找不到的统计项是null,否则为统计项的值
public TagAliasResult getDeviceTagAlias(String registrationId)
{
return _deviceClient.getDeviceTagAlias(registrationId);
}
///
/// 清理当前设备指定的属性,当前支持tags,alias
///
/// 是否清除alias
/// 是否清除tags
/// 找不到的统计项是null,否则为统计项的值
/// 包含http错误码:如401,404等,错误信息,JPush returen code和JPush returen mssage
/// 包含错误的信息
///
public DefaultResult updateDeviceTagAlias(String registrationId, bool clearAlias, bool clearTag)
{
return _deviceClient.updateDeviceTagAlias(registrationId, clearAlias, clearTag);
}
///
/// 更新当前设备指定的属性,当前支持tags,alias
///
/// alias名称,传递null:不改变,传递"":清空
/// 新添加的tags
/// 删除的tags
/// 更新成功时isResultOK==true
/// 包含http错误码:如401,404等,错误信息,JPush returen code和JPush returen mssage
/// 包含错误的信息
///
public DefaultResult updateDeviceTagAlias(String registrationId,
String alias,
HashSet tagsToAdd,
HashSet tagsToRemove)
{
return _deviceClient.updateDeviceTagAlias(registrationId, alias, tagsToAdd, tagsToRemove);
}
///
/// 获取当前应用的所有标签
///
/// 标签列表
/// 包含http错误码:如401,404等,错误信息,JPush returen code和JPush returen mssage
/// 包含错误的信息
///
public TagListResult getTagList()
{
return _deviceClient.getTagList();
}
///
/// 查询某个设备是否在tag下
///
/// 查询的tag
/// 需要确认的设备的registrationID
/// 成功result=true,失败result=false
/// 包含http错误码:如401,404等,错误信息,JPush returen code和JPush returen mssage
/// 包含错误的信息
///
public BooleanResult isDeviceInTag(String theTag, String registrationID)
{
return _deviceClient.isDeviceInTag(theTag, registrationID);
}
///
/// 为一个标签添加或者删除设备
///
/// 操作的tag
/// 需要添加的registrationID的集合
/// 需要删除的registrationID的集合
/// 成功isResultOK()=true,失败isResultOK()=false
/// 包含http错误码:如401,404等,错误信息,JPush returen code和JPush returen mssage
/// 包含错误的信息
///
public DefaultResult addRemoveDevicesFromTag(String theTag,
HashSet toAddUsers,
HashSet toRemoveUsers)
{
return _deviceClient.addRemoveDevicesFromTag(theTag, toAddUsers, toRemoveUsers);
}
///
/// 删除一个标签,以及标签与设备之间的关联关系
///
/// 要删除的tag
/// 可选参数,不填则默认为所有平台
/// 成功result=true,失败result=false
/// 包含http错误码:如401,404等,错误信息,JPush returen code和JPush returen mssage
/// 包含错误的信息
///
public DefaultResult deleteTag(String theTag, String platform)
{
return _deviceClient.deleteTag(theTag, platform);
}
///
/// 查询别名
///
/// 要查询的别名
/// 可选参数,不填则默认为所有平台
/// 返回alias的列表
/// 包含http错误码:如401,404等,错误信息,JPush returen code和JPush returen mssage
/// 包含错误的信息
///
public AliasDeviceListResult getAliasDeviceList(String alias, String platform)
{
return _deviceClient.getAliasDeviceList(alias, platform);
}
///
/// 删除别名,以及该别名与设别之间的绑定关系
///
/// 要删除的别名
/// 可选参数,不填则默认为所有平台
/// 成功isResultOK()=true,失败isResultOK()=false
/// 包含http错误码:如401,404等,错误信息,JPush returen code和JPush returen mssage
/// 包含错误的信息
///
public DefaultResult deleteAlias(String alias, String platform)
{
return _deviceClient.deleteAlias(alias, platform);
}
}
}