这个library只是对官方SDK的一个封装,在阅读本文档前,请先仔细阅读官方文档
当前集成的Open SDK版本
- Android:6.8.24
- iOS:2.0.2
目前支持的功能:
- 拉起微信
- 拉起微信客服
- 拉起小程序
- 分享
- 支付
- 微信登录
- 订阅消息
- 监听微信向应用发送消息,如小程序或者公众号跳转到APP功能
Kotlin版本要求:1.9.x
在:shared模块下的build.gradle.kts增加如下配置
kotlin {
...
cocoapods{
...
//添加微信官方sdk配置,只需要linkOnly就行,因为这个库本身已经集成了
pod("WechatOpenSDK-XCFramework" ) {
linkOnly = true
version = "2.0.2" //保持版本号和WechatLib集成的SDK版本一致
}
}
sourceSets{
val commonMain by getting {
...
//集成
implementation("icu.bughub.kit:Wechat:0.0.1")
}
}
}
根据官方文档 配置好Universal Links、URL scheme、LSApplicationQueriesSchemes
如果需要混淆代码,为了保证 sdk 的正常使用,需要在 proguard.cfg 加上下面两行配置:
-keep class com.tencent.mm.opensdk.** {
*;
}
-keep class com.tencent.wxop.** {
*;
}
-keep class com.tencent.mm.sdk.** {
*;
}
在程序入口处调用register方法注册APP到微信
//android
Wechat.register(context, appId)
//iOS,可以设置selfCheck参数是否开启自检
Wechat.register(appID, universalLink, selfCheck = false)
//重写 AppDelegate 的 handleOpenURL 和 openURL 方法:
WechatLib.shared.handleOpenUrl(url:url)
//重写AppDelegate或SceneDelegate的continueUserActivity方法: 注意:适配了SceneDelegate的App,系统将会回调SceneDelegate的continueUserActivity方法,所以需要重写SceneDelegate的该方法。
WechatLib.shared.handleOpenUniversalLink(userActivity:userActivity)
注册回调监听
//只需要在想监听的地方注册监听即可
Wechat.addEventHandler(eventHandler)
//使用完后可以移除监听
Wechat.removeEventHandler(eventHandler)
/**
* 分享
*
* @param mediaMessage [MediaMessage]和官方属性是一一对应的WXMediaMessage,其中mediaObject也是和官方一一对应的
* @param scene [WXScene]分享场景
*/
Wechat.share(mediaMessage, scene)
/**
* 拉起支付
*
* @param partnerId
* @param prepayId
* @param packageStr
* @param nonceStr
* @param timeStamp
* @param sign
*/
Wechat.pay(partnerId, prepayId, packageStr, nonceStr, timeStamp, sign)
/**
*
*
* @param state 用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止 csrf 攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加 session 进行校验。在state传递的过程中会将该参数作为url的一部分进行处理,因此建议对该参数进行url encode操作,防止其中含有影响url解析的特殊字符(如'#'、'&'等)导致该参数无法正确回传。
*
*/
Wechat.auth(state)
/**
* 拉起小程序
*
* @param userName 拉起的小程序的username
* @param miniProgramType 拉起小程序的类型[MiniProgramType]
* @param path 拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。
*/
Wechat.launchMiniProgram(userName, miniProgramType, path)
/**
* 拉起微信客服
*
* @param corpId 企业ID
* @param url 客服URL
*/
Wechat.launchCustomerService(corpId, url)
/**
* 拉起微信
*
*/
Wechat.launch()
MediaMessage(微信媒体消息内容)说明
这个对应官方的WXMediaMessage
字段 | 类型 | 含义 | 备注 |
---|---|---|---|
sdkVer | Int | 版本号 | 仅Android平台 |
title | String | 消息标题 | 限制长度不超过512Bytes |
description | String | 描述内容 | 限制长度不超过1KB |
thumbData | ByteArray | 缩略图的二进制数据 | 限制内容大小不超过32KB |
mediaObject | MediaObject | 多媒体数据对象 | 可以为TextObject、ImageObject、VideoObject、WebpageObject、MiniprogramObject、MusicVideoObject |
messageExt | String | 额外信息 | mediaObject为WXMusicVideoObject时,从微信音乐播放器内跳回,会携带该参数,长度不能超过2k。(iOS、Android双平台要一致) |
thumbDataHash | String | 消息缩略图数据的sha256 | 用于签名,详情可见 OpenSDK 分享签名开发手册 |
msgSignature | String | 消息签名 | 详情可见 OpenSDK 分享签名开发手册 |
TextObject (MediaObject 的派生类,用于描述一个文本对象)
对应官方的WXTextObject,iOS版本也进行了封装
字段 | 类型 | 含义 | 备注 |
---|---|---|---|
text | String | 文本数据 | 长度需大于 0 且不超过 10KB |
ImageObject (MediaObject 的派生类,用于描述一个图片对象)
对应官方的WXImageObject
字段 | 类型 | 含义 | 备注 |
---|---|---|---|
imageData | ByteArray | 图片的二进制数据 | 内容大小不超过 1MB |
imagePath | String | 图片的本地路径 | 对应图片内容大小不超过 25MB |
imgDataHash | String | 图片二进制数据的sha256 | 用于签名,详情可见 OpenSDK 分享签名开发手册 |
VideoObject (MediaObject 的派生类,用于描述一个视频对象)
对应官方的WXVideoObject 注意:videoUrl 和 videoLowBandUrl 不能同时为空
字段 | 类型 | 含义 | 备注 |
---|---|---|---|
videoUrl | String | 视频链接 | 限制长度不超过 10KB |
videoLowBandUrl | String | 供低带宽的环境下使用的视频链接 | 限制长度不超过 10KB |
WebpageObject (MediaObject 的派生类,用于描述一个网页对象)
对应官方的WXWebpageObject
字段 | 类型 | 含义 | 备注 |
---|---|---|---|
webpageUrl | String | html 链接 | 限制长度不超过 10KB |
MiniProgramObject (MediaObject 的派生类,用于描述一个小程序对象)
对应官方的WXMiniProgramObject
字段 | 类型 | 含义 | 备注 |
---|---|---|---|
webpageUrl | String | 兼容低版本的网页链接 | 限制长度不超过 10KB |
userName | String | 小程序的原始 id | html 链接 |
path | String | 小程序的 path | 小程序页面路径;对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 " |
?foo=bar" | |||
withShareTicket | Boolean | 是否使用带 shareTicket 的分享 | 通常开发者希望分享出去的小程序被二次打开时可以获取到更多信息,例如群的标识。可以设置 |
withShareTicket 为 true,当分享卡片在群聊中被其他用户打开时,可以获取到 | |||
shareTicket,用于获取更多分享信息。详见小程序获取更多分享信息 | |||
,最低客户端版本要求:6.5.13 | |||
miniprogramType | MiniprogramType | 小程序的类型,默认正式版 | 正式版: MiniprogramType.Release; |
测试版: MiniprogramType.Test; | |||
预览版: MiniprogramType.Preview |
MusicVideoObject (MediaObject 的派生类,用于描述一个音乐视频对象)
对应官方的WXMusicVideoObject
字段 | 类型 | 含义 | 备注 |
---|---|---|---|
musicUrl | String | 音频网页的 URL 地址 | 必填,不能为空,限制长度不超过 10KB |
musicDataUrl | String | 音频数据的 URL 地址 | 必填,不能为空,限制长度不超过 10KB |
singerName | String | 歌手名 | 必填,不能为空,限制长度不超过1KB |
duration | UInt | 歌曲时长 | 必填,单位:毫秒 |
songLyric | String | 歌词 | 建议填写,限制长度不超过32KB |
hdAlbumThumbFilePath | String | 高清专辑图本地文件路径 | 选填,文件限制长度不超过1MB,仅Android平台 |
hdAlbumThumbData | ByteArray | 高清专辑封面图 | 选填,大小不超过1MB,仅iOS平台 |
albumName | String | 音乐专辑名 | 选填 |
musicGenre | String | 音乐流派 | 选填 |
issueDate | ULong | 发行时间Unix时间戳 | 选填,单位:秒 |
identification | String | 音乐标识符 | 建议填写,用户在微信音乐播放器跳回应用时会携带该参数,可用于唯一标识一首歌,微信侧不理解 |
hdAlbumThumbFileHash | String | 高清专辑封面图sha256 | 用于签名,详情可见 OpenSDK 分享签名开发手册 |