引言
在当前的大环境下,很多项目的需求都会要求有第三方微信登录、分享、支付等等功能。基本上已经成为每个应用的标配了。
固然市面上有很多第三方插件可供我们使用,而且貌似也挺方便的。但是作为一名合格的开发者,如果只知其然而不知其所以然的话是很悲哀的一件事。所以我们今天就来说说微信的接入问题。
申请你的APPID
请到 开发者应用登记页面 进行登记,登记并选择移动应用进行设置后,将该应用提交审核,只有审核通过的应用才能进行开发。
依赖
还在用eclipse开发的恕不接待,见谅见谅…
Android studio配置,在项目moudle的build.gradle中添加依赖:
dependencies {
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}
这个包括了统计功能,如果不想要那个统计功能请使用如下依赖:
dependencies {
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}
AndroidManifest.xml 设置
添加必要的权限支持:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
注册到微信
要使你的程序启动后微信终端能响应你的程序,必须在代码中向微信终端注册你的id。比如:你想支付的时候调起你手机上的微信,这个时候就用到这个了。
这个注册,官方推荐在程序的入口处注册,那我们直接去Application中注册吧
companion object {
//从官方网站申请到的
var APP_ID = "wx12345"
}
//IWXAPI 是第三方app和微信通信的openapi的接口
var api:IWXAPI? = null
fun regToWx(){
//通过WXAPIFactory工厂,获取IWXAPI的实例
api = WXAPIFactory.createWXAPI(this,APP_ID,true)
//将应用的appid注册到微信
api!!.registerApp(APP_ID)
}
发送请求或响应到微信
现在,你的程序要发送请求或发送响应到微信终端,可以通过IWXAPI的 sendReq 和 sendResp 两个方法来实现。
boolean sendReq(BaseReq req);
sendReq是第三方app主动发送消息给微信,发送完成之后会切回到第三方app界面。
boolean sendResp(BaseResp resp);
sendResp是微信向第三方app请求数据,第三方app回应数据之后会切回到微信界面。
sendReq的实现示例,如下所示:
var text = "test"
fun sendWx(){
//初始化一个WXTextObject对象
var textObj = WXTextObject()
textObj.text = text
//用WXTextObject对象初始化一个WXMediaMessage对象
var msg = WXMediaMessage()
msg.mediaObject = textObj
msg.description = text
//构造一个Req
var req = SendMessageToWX.Req()
req.transaction = System.currentTimeMillis().toString()
MyApplication.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类似,如下图所示:
fun sendWxQ(){
//初始化一个WXTextObject对象
var textObj = WXTextObject()
textObj.text = text
//用WXTextObject对象初始化一个WXMediaMessage对象
var msg = WXMediaMessage()
msg.mediaObject = textObj
msg.description = text
//构造一个Resp
var resp = GetMessageFromWX.Resp()
//其中bundle为微信传递过来的intent所带的内容,通过getExtras方法获取
resp.transaction = GetMessageFromWX.Req(bundle).transaction
resp.message = msg
MyApplication.api?.sendResp(resp)
}
接收微信的请求及返回值
如果你的程序需要接收微信发送的请求,或者接收发送到微信请求的响应结果,需要下面3步操作:
a. 在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity(例如应用程序的包名为net.sourceforge.simcpux,则新添加的类如下图所示)
并在manifest文件里面加上exported属性,设置为true,例如:
b. 实现IWXAPIEventHandler接口,微信发送的请求将回调到onReq方法,发送到微信请求的响应结果将回调到onResp方法
c. 在WXEntryActivity中将接收到的intent及实现了IWXAPIEventHandler接口的对象传递给IWXAPI接口的handleIntent方法,示例如下:
api.handleIntent(getIntent().false)
当微信发送请求到你的应用,将通过IWXAPIEventHandler接口的onReq方法进行回调,类似的,应用请求微信的响应结果将通过onResp回调。
注意事项
如果需要运行SDK Sample工程,需要通过指定的xxxxx.keystore来进行签名:
signingConfigs {
debug {
storeFile file("../xxxxx.keystore")
}
}