注 1:jCenter 服务将在2021年5月1日之后关停,微信 SDK 已迁移到 Maven Central,请开发者及时修改引用仓库。

注 2:微信 SDK 改成通过 Gradle 的方式发布到 Maven Central,包名做了相应修改,从原来的 com.tencent.mm.sdk 修改为 com.tencent.mm.opensdk,需要开发者修改对应的 import 语句。

注 3:本文为微信 Android 终端开发工具的新手使用教程,只涉及教授 SDK 的使用方法,默认读者已经熟悉 IDE 的基本使用方法(Android Studio(推荐) 或 Eclipse),以及具有一定的编程知识基础等。

# 目录

# 接入指南

# 1.申请你的 AppID

请到 开发者应用登记页面 进行登记,登记并选择移动应用进行设置后,将该应用提交审核,只有审核通过的应用才能进行开发。

# 2.下载 SDK 及 API 文档

Android Studio 环境下: 在 build.gradle 文件中,添加如下依赖即可:

dependencies {

api 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'

}

(从5.4.3版本开始,wechat-sdk-android-with-mta不再维护) 由于 jCenter 服务关停,需要修改成引用 Maven Central,在项目的根 build.gradle 文件中,添加如下代码即可:

buildscript {

repositories {

jcenter() // 原有 jCenter 引用可继续保留

mavenCentral()

}

}

allprojects {

repositories {

jcenter() // 原有 jCenter 引用可继续保留

mavenCentral()

}

}

特别注意,目前 Maven Central仅支持部分版本:6.6.4、6.6.5、6.6.23、6.7.0,建议开发者升级至最新版本6.7.0。

Eclipse 环境下:

请前往资源下载页下载最新 SDK 包。

# 3.搭建开发环境

Android Studio 环境下:

在 Android Studio 中新建你的工程,并保证网络设置可以成功从 Maven Central 下载微信 SDK 即可。

Eclipse 环境下:

[1] 在 Eclipse 中建立你的工程。

[2] 在工程中新建一个 libs 目录,将开发工具包中 libs 目录下的 libammsdk.jar 复制到该目录中(如下图所示,建立了一个名为 SDK_Sample 的工程,并把 jar 包复制到 libs 目录下)。

[3] 右键单击工程,选择 Build Path 中的 Configure Build Path...,选中 Libraries 这个 tab,并通过 Add Jars...导入工程 libs 目录下的 libammsdk.jar 文件。(如下图所示)。

在你需要使用微信终端 API 的文件中导入相应的类。

import com.tencent.mm.opensdk.openapi.WXTextObject;

# 4.在代码中使用开发工具包

[1] AndroidManifest.xml 设置

添加必要的权限支持(其中网络权限如果没有使用扫码登录功能非必要;后三个权限,如果没有使用 mta,也非必要,即使有使用 mta,去掉也不影响功能):

[2] 注册到微信

要使你的程序启动后微信终端能响应你的程序,必须在代码中向微信终端注册你的 id。(如下图所示,可以在程序入口 Activity 的 onCreate 回调函数处,或其他合适的地方将你的应用 id 注册到微信。注册函数示例如下图所示。

// APP_ID 替换为你的应用从官方网站申请到的合法appID

private static final String APP_ID = "wx88888888";

// IWXAPI 是第三方app和微信通信的openApi接口

private IWXAPI api;

private regToWx() {

// 通过WXAPIFactory工厂,获取IWXAPI的实例

api = WXAPIFactory.createWXAPI(this, APP_ID, true);

// 将应用的appId注册到微信

api.registerApp(APP_ID);

//建议动态监听微信启动广播进行注册到微信

registerReceiver(new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

// 将该app注册到微信

api.registerApp(Constants.APP_ID);

}

}, new IntentFilter(ConstantsAPI.ACTION_REFRESH_WXAPP));

}

[3] 发送请求或响应到微信

现在,你的程序要发送请求或发送响应到微信终端,可以通过 IWXAPI 的 sendReq 和 sendResp 两个方法来实现。

boolean sendReq(BaseReq req);

sendReq 是第三方 app 主动发送消息给微信,发送完成之后会切回到第三方 app 界面。

boolean sendResp(BaseResp resp);

sendResp 是微信向第三方 app 请求数据,第三方 app 回应数据之后会切回到微信界面。

sendReq 的实现示例,如下图所示:

//初始化一个 WXTextObject 对象,填写分享的文本内容

WXTextObject textObj = new WXTextObject();

textObj.text = text;

//用 WXTextObject 对象初始化一个 WXMediaMessage 对象

WXMediaMessage msg = new WXMediaMessage();

msg.mediaObject = textObj;

msg.description = text;

SendMessageToWX.Req req = new SendMessageToWX.Req();

req.transaction = String.valueOf(System.currentTimeMillis()); //transaction字段用与唯一标示一个请求

req.message = msg;

req.scene = mTargetScene;

//调用api接口,发送数据到微信

api.sendReq(req);

需要注意的是,SendMessageToWX.Req 的 scene 成员,如果 scene 填 WXSceneSession,那么消息会发送至微信的会话内。如果 scene 填 WXSceneTimeline(微信 4.2 以上支持,com.tencent.mm.opensdk.constants.Build.java 里面定义了各个功能支持的版本号,如果需要检查微信版本支持 API 的情况, 可调用 IWXAPI 的 getWXAppSupportAPI 方法,比如,要判断微信是否支持分享到朋友圈功能,可以如下所示进行判断:

if (api.getWXAppSupportAPI() >= Build.TIMELINE_SUPPORTED_SDK_INT) {

//do share

}

那么消息会发送至朋友圈。scene 默认值为 WXSceneSession。

sendResp 的实现与 SendReq 类似,如下图所示:

// 初始化一个 WXTextObject 对象

WXTextObject textObj = new WXTextObject();

textObj.text = text;

// 用 WXTextObject 对象初始化一个 WXMediaMessage 对象

WXMediaMessage msg = new WXMediaMessage(textObj);

msg.description = text;

// 构造一个Resp

GetMessageFromWX.Resp resp = new GetMessageFromWX.Resp();

// 将req的transaction设置到resp对象中,其中bundle为微信传递过来的Intent所带的内容,通过getExtras()方法获取

resp.transaction = new GetMessageFromWX.Req(bundle).transaction;

resp.message = msg;

//调用api接口,发送数据到微信

api. sendResp (resp) ;

具体要发送的内容由第三方 app 开发者定义,具体可参考微信开发工具包中的 SDK Sample Demo 源码。

[4] 接收微信的请求及返回值

如果你的程序需要接收微信发送的请求,或者接收发送到微信请求的响应结果,需要下面 3 步操作:

a. 在你的包名相应目录下新建一个 wxapi 目录,并在该 wxapi 目录下新增一个 WXEntryActivity 类,该类继承自 Activity(例如应用程序的包名为 net.sourceforge.simcpux,则新添加的类如下图所示)

并在 manifest 文件里面加上exported、taskAffinity及launchMode属性,其中exported设置为true,taskAffinity设置为你的包名,launchMode设置为singleTask,例如:

android:name=".wxapi.WXEntryActivity"

android:label="@string/app_name"

android:theme="@android:style/Theme.Translucent.NoTitleBar"

android:exported="true"

android:taskAffinity="填写你的包名"

android:launchMode="singleTask">

b. 实现 IWXAPIEventHandler 接口,微信发送的请求将回调到 onReq 方法,发送到微信请求的响应结果将回调到 onResp 方法

c. 在 WXEntryActivity 中将接收到的 intent 及实现了 IWXAPIEventHandler 接口的对象传递给 IWXAPI 接口的 handleIntent 方法,示例如下图:

api.handleIntent(getIntent(), this);

当微信发送请求到你的应用,将通过 IWXAPIEventHandler 接口的 onReq 方法进行回调,类似的,应用请求微信的响应结果将通过 onResp 回调。

注意事项

[1]如果需要混淆代码,为了保证 sdk 的正常使用,需要在 proguard.cfg 加上下面两行配置:

-keep class com.tencent.mm.opensdk.** {

*;

}

-keep class com.tencent.wxop.** {

*;

}

-keep class com.tencent.mm.sdk.** {

*;

}

[2]如果需要运行 SDK Sample 工程,需要通过指定的 debug.keystore 来进行签名:

Android Studio 环境下:

signingConfigs {

debug {

storeFile file("../debug.keystore")

}

}

Eclipse 环境下:

至此,你已经能使用微信 Android 开发工具包的 API 内容了。如果想更详细了解每个 API 函数的用法,请查阅 Android 平台参考手册 或自行下载阅读微信 SDK Sample Demo 源码。

# Android 11-第三方应用无法拉起微信适配

Android 11 加强了隐私保护策略,引入了大量变更和限制,其中一个重要变更 —— 软件包可见性 ,将会导致第三方应用通过微信OpenSDK的接口无法正常拉起微信,从而无法使用微信的全部功能,包括但不限于分享消息到微信、拉起小程序等功能。特别需要注意的是,Android11的该变更只会影响到升级 targetSdkVersion=30 的应用,未升级的应用暂不受影响。

# 适配方案 根据Android官方给出的适配方案,在主工程的AndroidManifest.xml 中增加 标签,即可解决以上影响,代码如下:

...

// 在应用的AndroidManifest.xml添加如下标签

// 指定微信包名

...

添加以上标签之后,需要开发者升级编译工具,否则会出现编译错误。 Android Studio 需要升级至 3.3 及以上,建议升级至 4.0 及以上版本

Android SDK Build-Tools 需要升级至 30 及以上版本

com.android.tools.build:gradle 需要升级至 3.6.0 版本,建议升级至最新的 3.6.4 版本

android 微信广播,目录 | 微信开放文档相关推荐

  1. C# 淘宝商品微信返利助手开发-(二)返利助手开放文档以及帐号申请地址

    系列教程一目录:返利助手原理 系列教程二目录:返利助手开放文档以及帐号申请地址 系列教程三目录:返利助手开发(1)API介绍 系列教程四目录:返利助手开发(2)淘宝分享的内容如何只取淘口令 系列教程五 ...

  2. 微信小程序画地块(微信开放文档中腾讯地图)

    微信小程序画地块(微信开放文档中腾讯地图) 1.map.js // 引入math计算包 var mathjs = require('../../../source/util/math.js'); // ...

  3. 微信支付签约委托代扣文档 - 月付会员或者定期支付服务 - APP纯签约

    文章目录 微信支付签约委托代扣文档 - 月付会员或者定期支付服务 - APP纯签约 1.APP纯签约-预签约接口 2.接口调用请求说明 3.请求参数 4.请求示例 5.返回参数 6.返回示例 7.错误 ...

  4. 微信支付签约委托代扣文档 - 月付会员或者定期支付服务 - 公众号纯签约

    文章目录 微信支付签约委托代扣文档 - 月付会员或者定期支付服务 - 公众号纯签约 1.应用场景 2.案例与规范 3.接口调用请求说明 4.请求参数 5.请求示例 6.申请签约常见问题 7.返回参数( ...

  5. 手机微信里面接收好友的文档怎么打印

    在手机中安装的软件,使用频率较高的就是微信,微信不仅可以用于日常的工作交流,同时还可以传输一些文档.图片.文件等进行共享,而且手机微信中接收到的文档,大家还可以选择到打印店去打印. 考虑到现在大家的工 ...

  6. 微信二手商城产品prd文档

    前言: 文档综述: (1)版本修订记录 修订时间 修订内容 修订人 2018.8.15 修改文中错误 陈禹龙 (2)编辑历史 文档名称 微信二手商城产品PRD文档 版本 1.0 撰写人 陈禹龙 撰写时 ...

  7. 如何在线查看Android源码自带学习文档

          如何在线查看Android源码自带学习文档docs Android源码编译系列博客: Android.bp你真的了解吗 Android.bp入门指南之Android.mk转换成Androi ...

  8. 教你用java统计目录下所有文档的词频

    本文是统计目录下所有文档的词频top10,非单个文档,包含中文和英文. 直接上代码: 1 package com.huawei.wordcount; 2 3 import java.io.Buffer ...

  9. 钉钉开放文档——JSAPI鉴权失败

    钉钉鉴权后路由跳转调用定位(需要鉴权)报错 如下 13:32:28.240 [http-nio-8066-exec-6] INFO c.a.w.c.c.CommonController -[uploa ...

最新文章

  1. spark代码连接hive_Spark SQL入门到实战之(7)spark连接hive(spark-shell和eclipse两种方式)...
  2. rust为什么显示不了国服_AWS偏爱Rust,已将Rust编译器团队负责人收入囊中
  3. Navigator 对象,能够清楚地知道浏览器的相关信息
  4. C#根据字节数截取字符串【转载】
  5. 多维数组-创建多维数组
  6. java找不到路径应该怎么弄_cd java 找不到指定路径
  7. 中画幅相机焦距水平视角_摄影中的“中画幅”是什么?
  8. GPT磁盘如何正确分区以及UEFI引导怎么修复?
  9. ps打造人物光滑的肤色
  10. 美国TSCA 法案禁止产品中含有五种PBT 物质
  11. 破解G*L**d2021.1.3
  12. 如何快速定位自己热爱的工作
  13. java 拒绝连接_java.net.ConnectException:连接被拒绝
  14. aqistudy真气网JS逆向 + 数据采集(20220801)
  15. 带你了解IEEE1394接口技术
  16. 第一类曲面积分转化为二重积分
  17. proteus仿真控制电机正转、反转和停止转动
  18. 对于给定的正整数N,需要计算 S=1!+2!+3!+...+N!
  19. MySQL超详细安装教程 手把手教你安装MySQL到使用MySQL 最简单的MySQL安装方式,这种方式装,卸载也简单(安装mysql的步骤和方法)
  20. Airsim雷达相机融合生成彩色点云

热门文章

  1. Agile——Scrum
  2. 防人人网客户端侧滑效果,简单实现Android滑动菜单特效
  3. chatgpt赋能python:分解gif:使用Python将动态图片拆分成单帧图片
  4. 虚拟机开机需要login什么意思?没有出现桌面?Linux虚拟机CentOS登录需要登陆输入密码得问题
  5. Z函数(扩展KMP)
  6. 黑莓android系统,黑莓Passport运行Android系统
  7. JVM优化,以及垃圾回收的相关面试题请注意查收!
  8. latex编译pdf winedt_LaTeX-WinEdt 编辑器和 PDF 文件的 Acrobat 11 程序关联
  9. 3526-------团战可以输、提莫必须死 dfs做法
  10. 24 solar terms隐私条款