小程序
小游戏
企业微信
微信支付
扫描小程序码分享
HI,如题,目前能想到的解决方案是有三种:
第一种是次数可以累加,例如,用户第一次使用小程序,不发送消息,第二次使用小程序不发送消息,第三次使用小程序,一共累计了3次,可以发送三条推送消息
第二种是次数不可以累加,例如,用户第一次使用小程序,不发送消息,第二次使用小程序不发送消息,第三次使用小程序,之后,可以发送一条消息
第三种是次数没有限制(虽然不太可能),例如用户第一次使用小程序,可以发送无限条消息
7 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
据测试了解用户点击了“总是保持以上,不再询问”后,订阅消息只有有限条推送权限,不会超过五条,所以
微信小程序获取用户当前订阅消息的授权,用户点击了“总是保持以上,不再询问”前端可以再次执行
wx.requestSubscribeMessage()
只是在执行该方法后不会再有询问弹框出现,但是会自动允许订阅信息推送+1
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
向指定用户推送消息(c#代码) [HttpPost] public JsonResult SubscribeMessageToUser(string openid, string title=null, string content=null) { AjaxResult res = new AjaxResult(); res.state = false; try { AccessTokenModel AccessTokenModel = xcx_Get_Token();//获取access_token string _url = string.Format("https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token={0}", AccessTokenModel.access_token); //json参数 string jsonParam = Newtonsoft.Json.JsonConvert.SerializeObject(new { touser = openid,//用戶openid template_id = "模版ID", // 模版template_id page = "pages/index/index", //miniprogram_state = "developer", lang = "zh_CN", data = new { thing1 = new { value = "签到提醒" }, time5 = new { value = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") }, thing2 = new { value = "点击签到" } } }); var request = (HttpWebRequest)WebRequest.Create(_url); request.Method = "POST"; request.ContentType = "application/json;charset=UTF-8"; byte[] byteData = Encoding.UTF8.GetBytes(jsonParam); int length = byteData.Length; request.ContentLength = length; Stream writer = request.GetRequestStream(); writer.Write(byteData, 0, length); writer.Close(); var response = (HttpWebResponse)request.GetResponse(); var responseString = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8")).ReadToEnd(); JavaScriptSerializer js = new JavaScriptSerializer(); //实例化一个能够序列化数据的类 AccessTokenModel_Err ErrInfo = js.Deserialize<AccessTokenModel_Err>(responseString); //AccessTokenModel_Err ErrInfo = (AccessTokenModel_Err)JsonConvert.DeserializeObject(responseString); res.message = ErrInfo.errmsg; if(ErrInfo.errcode==0) res.state = true; //return responseString.ToString(); } catch (Exception ex) { res.state = false; res.message = ex.Message; } return Json(res, JsonRequestBehavior.AllowGet); }
“不在询问” 这个选项只是表示:用户勾选后下次调用 `wx.requestSubscribeMessage` 的时候相同的 templateId 不会再弹出授权窗,无用户感知,直接返回授权结果。这个只是 UI 层面上的。
其实用户点击一次允许(订阅一次)只能发送一条消息,因此如果需要发送订阅消息的话,需要开发的时候在触发器(如按钮点击事件处理函数、支付结果回调函数)里面每次都调用 `wx.requestSubscribeMessage` 请求授权。而在发送消息的时候可以通过 `subscribeMessage.send` 方法调用,根据结果返回确定用户是否订阅了,然后进行后续业务逻辑(如补发短信)。
总之,不要被误导了,忘记发送次数的限制,在每个需要授权订阅的地方都调用授权请求。
期待微信官方对文档进行补充。
点击“总是保持以上选择,不再询问”+“允许”之后,确实只能收到一条消息通知... 勾选总是,只是在下次调用wx.requestSubscribeMessage的时候帮你默认做出选择,但还是需要调用了这个才能收到消息... 而不是做出一次选择后就高枕无忧了... orz... 官方文档也没有写明确,有点坑...
而且... 用户点击“总是保持以上选择,不再询问”+“取消”之后,可以在设置中打开权限,但是... 还是需要触发wx.requestSubscribeMessage才能收到消息... 牛皮啊...
只要你点击了总是取消,那么之前的累计次数 都会清零
发几条试试看,测试用例列出来,逐个测测
勾不勾选,这和次数没关系吧
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
据测试了解用户点击了“总是保持以上,不再询问”后,订阅消息只有有限条推送权限,不会超过五条,所以
微信小程序获取用户当前订阅消息的授权,用户点击了“总是保持以上,不再询问”前端可以再次执行
wx.requestSubscribeMessage()
只是在执行该方法后不会再有询问弹框出现,但是会自动允许订阅信息推送+1
向指定用户推送消息(c#代码) [HttpPost] public JsonResult SubscribeMessageToUser(string openid, string title=null, string content=null) { AjaxResult res = new AjaxResult(); res.state = false; try { AccessTokenModel AccessTokenModel = xcx_Get_Token();//获取access_token string _url = string.Format("https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token={0}", AccessTokenModel.access_token); //json参数 string jsonParam = Newtonsoft.Json.JsonConvert.SerializeObject(new { touser = openid,//用戶openid template_id = "模版ID", // 模版template_id page = "pages/index/index", //miniprogram_state = "developer", lang = "zh_CN", data = new { thing1 = new { value = "签到提醒" }, time5 = new { value = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") }, thing2 = new { value = "点击签到" } } }); var request = (HttpWebRequest)WebRequest.Create(_url); request.Method = "POST"; request.ContentType = "application/json;charset=UTF-8"; byte[] byteData = Encoding.UTF8.GetBytes(jsonParam); int length = byteData.Length; request.ContentLength = length; Stream writer = request.GetRequestStream(); writer.Write(byteData, 0, length); writer.Close(); var response = (HttpWebResponse)request.GetResponse(); var responseString = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8")).ReadToEnd(); JavaScriptSerializer js = new JavaScriptSerializer(); //实例化一个能够序列化数据的类 AccessTokenModel_Err ErrInfo = js.Deserialize<AccessTokenModel_Err>(responseString); //AccessTokenModel_Err ErrInfo = (AccessTokenModel_Err)JsonConvert.DeserializeObject(responseString); res.message = ErrInfo.errmsg; if(ErrInfo.errcode==0) res.state = true; //return responseString.ToString(); } catch (Exception ex) { res.state = false; res.message = ex.Message; } return Json(res, JsonRequestBehavior.AllowGet); }
“不在询问” 这个选项只是表示:用户勾选后下次调用 `wx.requestSubscribeMessage` 的时候相同的 templateId 不会再弹出授权窗,无用户感知,直接返回授权结果。这个只是 UI 层面上的。
其实用户点击一次允许(订阅一次)只能发送一条消息,因此如果需要发送订阅消息的话,需要开发的时候在触发器(如按钮点击事件处理函数、支付结果回调函数)里面每次都调用 `wx.requestSubscribeMessage` 请求授权。而在发送消息的时候可以通过 `subscribeMessage.send` 方法调用,根据结果返回确定用户是否订阅了,然后进行后续业务逻辑(如补发短信)。
总之,不要被误导了,忘记发送次数的限制,在每个需要授权订阅的地方都调用授权请求。
期待微信官方对文档进行补充。
点击“总是保持以上选择,不再询问”+“允许”之后,确实只能收到一条消息通知... 勾选总是,只是在下次调用wx.requestSubscribeMessage的时候帮你默认做出选择,但还是需要调用了这个才能收到消息... 而不是做出一次选择后就高枕无忧了... orz... 官方文档也没有写明确,有点坑...
而且... 用户点击“总是保持以上选择,不再询问”+“取消”之后,可以在设置中打开权限,但是... 还是需要触发wx.requestSubscribeMessage才能收到消息... 牛皮啊...
只要你点击了总是取消,那么之前的累计次数 都会清零
发几条试试看,测试用例列出来,逐个测测
勾不勾选,这和次数没关系吧