这是我出差回来,听见我们手机端跟经理讲这款第三方推送可以解决手机杀死的问题。好的,既然能解决那我就改。其实信鸽推送跟极光推送差不多。我就在原来的基础上稍作修改。
第一步:当然得去官方配置一下啦~这里我就不描述了(苹果安卓需要创建两个应用,所以不能跟极光似的配置一个就好)
第二步:我这里没有引用官方的dll文件,直接获取代码拷入我们系统中,这样改起来方便,可以自己稍微改一下方法,下载官方demo就好C#信鸽SDK 其实下载的demo是用问题的得需要自己修改配置,在官方推送方法中添加param.Add("push_id", message.getPushID().ToString());
,切记不要太依赖官方文档,有点坑人。当时特别气愤本想找客服理论,结果人家一直繁忙,我一直在排队。后来想了想,免费的给我用,能用就不错了。所以自己要善于修改。
第三步:推送及配置(放到一起了)
IOS我在其中添加了推送的声音及角标。角标-1代表不变,-2代表自动+1,其他正数代表自定义
/// <summary>
/// 推送
/// </summary>
/// <param name="content">内容</param>
/// <param name="registerId">token列表</param>
/// <param name="pushList">附近信息</param>
/// <returns></returns>
public static bool JPushByRegiserID_XG(string content, List<string> registerId, List<Push> pushList)
{
if (!isAllew)
{
return false;
}
string androidAppID = AndroidAppID.SystemSetValue;
string androidSercret = AndroidSercret.SystemSetValue;
long androidAccessID = long.Parse(AndroidAccessID.SystemSetValue);
string iosAppID = IOSAppID.SystemSetValue;
string iosSercret = IOSSercret.SystemSetValue;
long iosAccessID = long.Parse(IOSAccessID.SystemSetValue);
try
{
Dictionary<String, Object> custom = new Dictionary<string, object>();
foreach (var item in pushList)
{
custom.Add(item.Key, item.Value);
}
MessageIOS iosMsg = new MessageIOS();
iosMsg.setAlert(content);
iosMsg.setBadgeType(-2);//角标
iosMsg.setSound("beep.wav");//提示音
iosMsg.setCustom(custom);
XingeApp iosXG = new XingeApp(iosAppID, iosAccessID, iosSercret);
string retios = iosXG.PushMultipleDevicesIOS(registerId, iosMsg);
JObject joios = (JObject)JsonConvert.DeserializeObject(retios);
string ioscd = joios["ret_code"].ToString();
XingeApp androidXG = new XingeApp(androidAppID, androidAccessID, androidSercret);
MessageAndroid androidMsg = new MessageAndroid();
androidMsg.setType(XGPushConstants.OrdinaryMessage);
androidMsg.setTitle("软件名字");
androidMsg.setContent(content);
androidMsg.setCustom(custom);
string retAndroid = androidXG.PushMultipleDevices(registerId, androidMsg);
JObject joAndroid = (JObject)JsonConvert.DeserializeObject(retAndroid);
string Androidcd = joAndroid["ret_code"].ToString();
if (ioscd == "0" && Androidcd == "0")//成功
{
return true;
}
return false;
}
catch (APIRequestException e)
{
return false;
}
}
由于我把官方方法改了,苹果设置环境在推送方法中设置的
/// <summery> 推送消息给多个设备, 限 iOS 系统使用
/// <param name = "deviceTokens"> 接收消息的设备标识列表 </param>
/// <param name = "message"> iOS 消息结构体 </param>
/// <param name = "environment"> 指定推送环境 </param>
/// <returns> 推送结果描述 </returns>
/// </summery>
public string PushMultipleDevicesIOS(List<string> deviceTokens, MessageIOS message)
{
if (!isValidMessageType(message, PushEnvironmentofiOS.product))
{
return "{'ret_code':-1,'err_msg':'message type or environment error!'}";
}
if (!message.isValid())
{
return "{'ret_code':-1,'err_msg':'message invalid!'}";
}
Dictionary<string, object> param = new Dictionary<string, object>();
param.Add("audience_type", "token_list");
param.Add("platform", "ios");
param.Add("token_list", toJArray(deviceTokens));
// param.Add("access_id", this.xgPushAppAccessKey);
param.Add("expire_time", message.getExpireTime());
param.Add("send_time", message.getSendTime());
// param.Add("device_token", deviceToken);
param.Add("message_type", message.getType());
param.Add("message", message.toJson());
param.Add("timestamp", (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000);
param.Add("environment", PushEnvironmentofiOS.product);
if (message.getLoopInterval() > 0 && message.getLoopTimes() > 0)
{
param.Add("loop_interval", message.getLoopInterval());
param.Add("loop_times", message.getLoopTimes());
}
param.Add("push_id", message.getPushID().ToString());
string ret = requestXGServerV3(XingeApp.XGPushServierHost, XingeApp.XGPushAppPath, param);
return ret;
}
PushEnvironmentofiOS.product
生产环境(上线修改)PushEnvironmentofiOS.develop
开发环境 Android几乎不需要改动。
主要的是不要以官方后台推送数据判断是否推送成功,官方后台不太准确!