一份完整的Android 微信分享集成攻略
一、开发前的准备工作
1.登录微信开放平台填写自己的开发者信息,等待审核通过进行下一步
开放平台地址: https://open.weixin.qq.com/
2. 在开放平台(上步审核通过的账号下)创建注册自己的APP
开放平台创建自己的应用
2.1 创建爱你应用时候要求填写包名 请在自己项目的build.gradle文件中获取 applicationId字段对应的值
2.2 填写自己的签名,,请不要直接添加命令行运行得到的签名,具体规则如下
获取签名
2.2.1 下载微信官方提供的应用APP
https://res.wx.qq.com/open/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk
2.2.2 安装到手机之后,填写好自己的包名,applicationId字段对应的值
2.2.3 获取对应的签名
下面是审核通过的APP
3.如果有需要更改自己的APP的签名信息,请记得隔天测试和使用,微信后台需要时间变更,切记!
注意如果临时改变了签名或者包名,当时还不能生效(也就是你APP用不了微信的功能了),可能得等个一天才能生效!!!!血的教训!!
二、集成sdk
1.在项目的build.gradle中引入依赖库
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:1.1.6'
2.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"/>
3. 注册到微信
要使你的程序启动后微信终端能响应你的程序,必须在代码中向微信终端注册你的id。(如下图所示,可以在程序入口Activity的onCreate回调函数处,或其他合适的地方将你的应用id注册到微信。注册函数示例如下图所示。
IWXAPI api = WXAPIFactory.createWXAPI(this, WeChartConfig.APP_ID, false);
4.对分享,我做了如下的封装,请结合自己的需求使用
里面结合了微信纯文字分享,微信纯图片分享,音乐分享,视频分享,网页分享等,请自己创建这个文件,按照说明调用
分享中注意,所有配图片的位置,图片的大小都不应该大于32k,请自行处理
超过大小报错
checkArgs fail, thumbData is invalid
解决办法: 压缩bitmap的大小
5.当前activity实现IWXAPIEventHandler接口,设置接收分享成功或失败的回调
// 微信发送请求到第三方应用时,会回调到该方法
@Override
public void onReq(BaseReq req) {
Toast.makeText(this, "openid = " + req.openId, Toast.LENGTH_SHORT).show();
switch (req.getType()) {
case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:
break;
case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
break;
case ConstantsAPI.COMMAND_LAUNCH_BY_WX:
break;
default:
break;
}
}
// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
@Override
public void onResp(BaseResp resp) {
Toast.makeText(this, "openid = " + resp.openId, Toast.LENGTH_SHORT).show();
if (resp.getType() == ConstantsAPI.COMMAND_SENDAUTH) {
Toast.makeText(this, "code = " + ((SendAuth.Resp) resp).code, Toast.LENGTH_SHORT).show();
}
String result = "";
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
result = "分享成功";
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
result = "分享被取消";
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED: