微信原生转发

1.注册开发者账号
13096235-a9f2ec5e21b8a0a5.png
image.png

填写应用包名,应用签名

2.应用签名怎么生成:
keytool -list -v -keystore E:\mymy\MomentsSaver\sign\keystore.jks
13096235-3ddf0041ff60135c.png
image.png

将MD5的值去掉所有冒号,填入即可

等待审核,获取APP ID,审核时间一般在6天左右。


13096235-1df7b00b51e1b6f4.png
image.png

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

猜你喜欢

转载自blog.csdn.net/weixin_34365635/article/details/87270169
今日推荐