前段时间项目中用到了微信的一次性消息订阅,来引导用户登陆微信关注公众号。一次性消息订阅是指,通过微信用户授权,是的第三方应用获得一次向微信用户发送一次消息通知的机会;微信用户可以不用关注公众号,每授权一次,开发者就可以通过微信下发一次通知消息,消息将显示在微信服务通知中。

像微信下发消息主要分为两个步骤:

第一:微信用户授权,获得一次向用户发送消息的机会。

 Random random = new Random();scene = random.nextInt(10000);if (WXUtil.isWeixinAvilible(FreeLearnActivity.this)){SubscribeMessage.Req req = new SubscribeMessage.Req();req.scene = scene;req.templateID = NeoConstantCode.WX_MODEL_ID;iwxapi.sendReq(req);}else{showToastMes("没有安装微信");}

参数scene:开发者可以填写0-10000之间的整形数,用来标识订阅场值;

templateID:订阅消息模板id,在开放平台提交应用审核通过后获得;

以上两个参数是授权请求时必须要传的参数,授权成功后,会返回用户的openid等信息,在授权完成后,返回的信息需要在WXEntryActivity的onResp方法中回调:

@Override
public void onResp(BaseResp baseResp) {super.onResp(baseResp);if (baseResp.errCode == BaseResp.ErrCode.ERR_OK){if (ConstantsAPI.COMMAND_SUBSCRIBE_MESSAGE == baseResp.getType()){Intent intent = new Intent(NeoConstantCode.REFRESH_FREELEARN);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);if (android.os.Build.VERSION.SDK_INT >= 12) {intent.setFlags(32 );}intent.putExtra("openid",baseResp.openId);NeoApplication.getContext().sendBroadcast(intent);}}finish();
}

对于回到信息的接收,初写的时候遇到 了一个小坑,就是授权完成以后,onResp()方法并没有接收到任何消息,当然,有人说要在onCreat方法中

iwxapi = WXAPIFactory.createWXAPI(FreeLearnActivity.this,NeoConstantCode.WX_APP_ID);
iwxapi.registerApp(NeoConstantCode.WX_APP_ID);
iwxapi.handleIntent(getIntent(),this);

但是在此要注意,一不留神就会掉入坑中,对于WXEntryActivity微信文档中说继承自Activity,实现IWXAPIEventHandler;然后在onResp()方法中回调信息,但是一般工程会接入友盟等三方工具,像友盟,他们继承自WXCallBackActivity(),已经封装了微信文档中所说的配置,所以在接入了友盟之后,我们只需要重写onResp()即可,一定不要忘记super.onResp(),如此即可接收到回调信息;当然有一点,微信opensdk接入需要5.1.6版本之后才行,否则会有respType = null的问题,在5.1.6版本后修复了这个bug;接收到回调消息后可以将openid发送到自己需要操作的页面,进行下一步操作;

第二:发送消息给微信用户;

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

通过get请求上面接口获得access_token,当然,如文档所说,access_token建议保存在服务器,不建议前端请求,因为该字段每天请求次数有上限,用户每请求一次就会刷新一次,如果达到上限,将影响app使用;后台可以通过接口下下发该字段到前端;拿到access_token以后调用以下接口

http请求方式: post
https://api.weixin.qq.com/cgi-bin/message/template/subscribe?access_token=ACCESS_TOKEN

成功以后用户即可在微信收到一条服务通知,通知的内容通过接口的参数设置;至此,一次发送消息的流程完整结束;

小记:一次性消息授权后无法像分享那样返回自己的app,我在项目中用的方法是将后台运行的应用切换到前台,代码如下,记录一下:

/**获取ActivityManager*/
ActivityManager activityManager = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE);
/**获得当前运行的task(任务)*/
List<ActivityManager.RunningTaskInfo> taskInfoList = activityManager.getRunningTasks(100);
for (ActivityManager.RunningTaskInfo taskInfo : taskInfoList) {/**找到本应用的 task,并将它切换到前台*/if (taskInfo.topActivity.getPackageName().equals(context.getPackageName())) {activityManager.moveTaskToFront(taskInfo.id, 0);break;}
}

记录一下自己曾经遇到的问题,总结一下,献给每天进步一点的自己,加油!

 

微信一次性订阅消息流程相关推荐

  1. php微信一次性订阅消息demo,微信一次性订阅消息公众号或网页接入文档说明

    2017年7月25日HiShop最新消息,就在昨天微信公众号官方给hishop记者发布了最新微信更新推送,微信公众号新增了"一次性订阅消息"接口,开发者可以通过一次性订阅消息授权让 ...

  2. php微信一次性订阅消息demo,微信一次性订阅消息

    开发者可以通过一次性订阅消息授权让微信用户授权第三方移动应用(接入说明)或公众号,获得发送一次订阅消息给到授权微信用户的机会.授权微信用户可以不需要关注公众号.微信用户每授权一次,开发者可获得一次下发 ...

  3. 微信公众号一次性订阅消息

    说明 公众号或网页使用一次性订阅消息流程 第一步:需要用户同意授权,获取一次给用户推送一条订阅模板消息的机会 第二步:通过API推送订阅模板消息给到授权微信用户 说明 开发者可以通过一次性订阅消息授权 ...

  4. 微信网页订阅消息实现

    实现方式有两种: 一:微信开放标签 表现形式为组件嵌入页面,公众号一次性订阅消息 | 微信开放文档微信开发者平台文档https://developers.weixin.qq.com/doc/offia ...

  5. 公众号一次性订阅消息

    洛塔服务号回复007获取代码. 功能说明 之前发布通知,要用订阅通知替代一次性订阅消息,不知道是被骂的太惨还是技术原因,一次性订阅消息还是一直能用. 和模板消息不同的是,一次性订阅消息无需用户关注公众 ...

  6. vue3实现微信公众号一次性订阅消息+ios和Android的63002 config:invalid signature问题

    微信开放文档https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_Open_Tag.html#23 微信 JS 接口签 ...

  7. 微信小程序-一次性订阅消息推送

    前置条件: 1.登录微信公众号平台 完善小程序信息,小程序类目. 2.配置自己的消息模板或者使用公共的消息模板. 3.存在正确的openid. 执行步骤: 1.获取已配置好的模板id 2.获取订阅消息 ...

  8. 小程序订阅消息流程及案例

    没有接触的过小程序订阅的 估计和我一样 刚刚开始的时候 一脸懵逼 不知道从哪里下手 下面就一起来看下吧  小编刚开始做的是一个模板 都来因为需求变更 就多加了一个模板 下面是两个授权模板 这个要是看明 ...

  9. 完整的微信登陆 接收消息流程

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 1. G ...

最新文章

  1. 对称加密和非对称加密
  2. android中ocr解决方案(tesseract)
  3. Kenshin Cui's Blog
  4. Django的各种初识
  5. 列出一个目录中所有文件及大小
  6. 任正非:华为要防止内卷 精益求精不叫内卷
  7. Linux Linux函数 Linux聊天程序 基于socket的TCP(有连接的)聊天程序
  8. Maven常用命令汇总
  9. 处理 TXT 文本技巧
  10. 毕业5年决定你的命运 --------值得所有不甘平庸的人看看
  11. php免费利用飞信发送验证码,PHP 使用飞信API发送免费短信示例
  12. 、用ecshop整合淘宝客api改造用于淘宝客程序
  13. phonopy制作shengBTE的FORCE_CONSTANTS_2ND
  14. 一个python文件调用另一个python文件
  15. Springboot项目配置404错误页面
  16. e.hash oldCap == 0 详细解读
  17. 传奇3服务器配置文件,传奇3.0服务器的架设和设置详细介绍
  18. 人生之路1.20代码 第一部分
  19. 2021-10-25win10如何禁用自带的键盘和鼠标
  20. 更新win11后vmware出错,VMware Workstation 不可恢复错误: (vcpu-0)

热门文章

  1. 机器人开发--设计范式
  2. 数组中有两种数出现奇数次,其他数出现偶数次,打印奇数次的数
  3. 【计算机网络】第二部分 物理层和介质(4) 数字传输
  4. 解决vscode红色波浪线的ts报错:找不到模块“store” ts(2307),不识别@别名路径
  5. systemd服务创建服务demo
  6. 如何自己手动修改win10磁贴背景颜色?
  7. python如何设置搜狗输入法中英文切换_2020秋季报告:手机输入法AI时代来临,百度输入法优势明显...
  8. java 登陆短信验证码_Java实现短信验证码
  9. PCI GXL 关于JPS与作业
  10. 这个电脑用显微镜才能看清:却能让假货无处遁形