Android 微信登录、分享、支付、收藏接入的详细介绍[kotlin]

版权声明:本文为博主原创文章,可以随意转载,但请附原地址或原作者名。谢谢! https://blog.csdn.net/farley119/article/details/82889999

引言

在当前的大环境下,很多项目的需求都会要求有第三方微信登录、分享、支付等等功能。基本上已经成为每个应用的标配了。
固然市面上有很多第三方插件可供我们使用,而且貌似也挺方便的。但是作为一名合格的开发者,如果只知其然而不知其所以然的话是很悲哀的一件事。所以我们今天就来说说微信的接入问题。

申请你的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")
    }
}

猜你喜欢

转载自blog.csdn.net/farley119/article/details/82889999