1.注册开发者账号
填写应用包名,应用签名
2.应用签名怎么生成:
keytool -list -v -keystore E:\mymy\MomentsSaver\sign\keystore.jks
将MD5的值去掉所有冒号,填入即可
等待审核,获取APP ID,审核时间一般在6天左右。
APP ID是对应唯一的应用包名和签名的,如果你的应用变了,只要包名和使用的签名key文件不变,就可以继续使用该ID
3.SDK配置
build.gradle文件配置:
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
4.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"/>
WXEntryActivity设置:(注意:如果你想做分享后的回调,必须要建一个WXEntryActivity,实现IWXAPIEventHandler接口)
<activity
android:name=".wxapi.WXEntryActivity"
android:exported="true"/>
5.WXEntryActivity
/**
* @author wzx
* @version 3.0.0 2018/12/15 17:26
* 微信分享功能有个比较坑爹的地方,就是如果想要实现分享后回调,就需要建立指定的包名和Activity名
* 在主包名下建立一个wxapi包,然后再建立一个Activity,命名为:WXEntryActivity,实现IWXAPIEventHandler接口,用于分享后回调
*/
class WXEntryActivity : BaseActivity(), IWXAPIEventHandler {
private var mButtonShare: Button? = null
private var iwxapi: IWXAPI? = null
//WXSceneTimeline :朋友圈 Type_WXSceneSession:好友
private enum class SHARE_TYPE {
Type_WXSceneSession, Type_WXSceneTimeline
}
override fun onResume() {
super.onResume()
if (!AccessibilityUtils.isAccessibilitySettingsOn(this)) {
Log.d("isAccessibccc", "off")
val intent = Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS)
startActivity(intent)
} else {
Log.d("isAccessibccc", "on")
}
}
override fun getLayoutId(): Int {
return R.layout.activity_main
}
override fun initListener() {
login_linear_wexin!!.setOnClickListener { share(SHARE_TYPE.Type_WXSceneTimeline) }
}
override fun initView() {
// mButtonShare = findViewById(R.id.button_share)
login_linear_webo.setOnClickListener {
val intentGo = Intent(this@WXEntryActivity, WeiBoWebViewActivity::class.java)
startActivity(intentGo)
}
}
override fun intData() {
iwxapi = MyApplication.api
iwxapi!!.handleIntent(intent, this)
share(SHARE_TYPE.Type_WXSceneTimeline)
}
override fun onReq(baseReq: BaseReq) {
}
override fun onResp(baseResp: BaseResp) {
val result: String
when (baseResp.errCode) {
BaseResp.ErrCode.ERR_OK -> result = "分享成功"
BaseResp.ErrCode.ERR_USER_CANCEL -> result = "取消分享"
BaseResp.ErrCode.ERR_AUTH_DENIED -> result = "分享被拒绝"
BaseResp.ErrCode.ERR_SENT_FAILED ->
//发送失败
result = "发送失败"
BaseResp.ErrCode.ERR_UNSUPPORT ->
//不支持错误
result = "不支持错误"
BaseResp.ErrCode.ERR_COMM -> result = "一般错误"
BaseResp.ErrCode.ERR_BAN -> result = "签名有误"
else -> result = "发送返回"
}//一般错误
Toast.makeText(this, result, Toast.LENGTH_SHORT).show()
finish()
}
private fun share(type: SHARE_TYPE) {
val webpageObject = WXWebpageObject()
webpageObject.webpageUrl = "https://blog.csdn.net/YiRanAiNi_/article/details/79454719"
val msg = WXMediaMessage(webpageObject)//用 WXWebpageObject 对象初始化一个 WXMediaMessage 对象
msg.title = "Hi,转发助手"//网页标题
msg.description = "这是一个转发助手应用"//网页描述
val thumb = BitmapFactory.decodeResource(resources, R.mipmap.ic_logo)
msg.thumbData = bmpToByteArray(thumb, true)
//构造一个Req
val req = SendMessageToWX.Req()
req.transaction = buildTransaction("webpage")
req.message = msg
when (type) {
WXEntryActivity.SHARE_TYPE.Type_WXSceneSession -> req.scene = WXSceneSession
WXEntryActivity.SHARE_TYPE.Type_WXSceneTimeline -> req.scene = WXSceneTimeline
}
Log.i("wzx", iwxapi!!.sendReq(req).toString())
// finish();
}
private fun buildTransaction(type: String?): String {
return if (type == null) System.currentTimeMillis().toString() else type + System.currentTimeMillis()
}
companion object {
fun bmpToByteArray(bmp: Bitmap, needRecycle: Boolean): ByteArray {
val output = ByteArrayOutputStream()
bmp.compress(Bitmap.CompressFormat.PNG, 100, output)
if (needRecycle) {
bmp.recycle()
}
val result = output.toByteArray()
try {
output.close()
} catch (e: Exception) {
e.printStackTrace()
}
return result
}
}
}
6.坑点
-1.如果返回码是BaseResp.ErrCode.ERR_BAN,检查签名是否和开发平台一致,检查apk是否签名,打个release包测试下。
-2.微信分享的图片大小有限制,大小不得超过 32kb