最近一项目需要添加微信的分享:朋友、朋友圈。
原本以为挺简单的一事,无非就是去官网下个Demo,集成到自己项目中,可以分分钟搞定,结果这帮写文档的坑爹玩意,愣是浪费了我N多时间,好了吐槽完毕,接下来分享下此次调用微信中遇到的问题和解决方法:
首先第一个问题:死活调不出微信客户端
原因:是没有按照所谓的官方说明来操作,
解决方法:1) 对要加微信的项目进行打包签名,此时就有了自己的 keystore。
2) 将打包好的apk装到机器上,再装官方的获取签名工具:gen_signature.apk,并用此工具生成应用程序签名。
3)用获取的签名去申请当前项目对应的微信App_ID ,此时才能保证在项目中调用成功。
再一个问题:分享图片加文字
这部分就直接上代码了:
1)分享单纯的文字内容:
IWXAPI api = WXAPIFactory.createWXAPI(this, ShareConstant.APP_ID); if (api.openWXApp()) {//判断是否安装微信客户端 String text = ShareConstant.setContent( response.getCategoryNamePinYin(), response.getAuctionId()); // 初始化一个WXTextObject对象 WXTextObject textObj = new WXTextObject(); textObj.text = text; // 用WXTextObject对象初始化一个WXMediaMessage对象 WXMediaMessage msg = new WXMediaMessage(); msg.mediaObject = textObj; // 发送文本类型的消息时,title字段不起作用 // msg.title = "Will be ignored"; msg.description = text; // 构造一个Req SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("text"); // // transaction字段用于唯一标识一个请求 req.message = msg; req.scene = SendMessageToWX.Req.WXSceneSession;// 分享 // 调用api接口发送数据到微信 api.sendReq(req); } else { Toast.makeText(Detail.this, "未安装微信", Toast.LENGTH_SHORT).show(); }
/** * 发送图片和文字 * * @param context * @param text * @param bmp * @param type 分享到盆友圈:SendMessageToWX.Req.WXSceneTimeline 分享到盆友:SendMessageToWX.Req.WXSceneSession */ public void sendReq(Context context, String text, Bitmap bmp, int type) { // IWXAPI api = WXAPIFactory.createWXAPI(context, ShareConstant.APP_ID, // true); if (api.openWXApp()) { String url = ShareConstant.setUrl(response.getCategoryNamePinYin(), response.getAuctionId());// 分享的好友点击信息会跳转到这个地址去 WXWebpageObject localWXWebpageObject = new WXWebpageObject(); localWXWebpageObject.webpageUrl = url; WXMediaMessage localWXMediaMessage = new WXMediaMessage( localWXWebpageObject); localWXMediaMessage.description = text; // 设置消息的缩略图 Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, THUMB_SIZE, THUMB_SIZE, true); bmp.recycle(); localWXMediaMessage.thumbData = Util.bmpToByteArray(thumbBmp, true); // localWXMediaMessage.thumbData = getBitmapBytes(bmp, false); SendMessageToWX.Req localReq = new SendMessageToWX.Req(); localReq.transaction = System.currentTimeMillis() + ""; localReq.message = localWXMediaMessage; // localReq.scene = SendMessageToWX.Req.WXSceneTimeline;// 分享到朋友圈 // localReq.scene = SendMessageToWX.Req.WXSceneSession;// 分享给好友 localReq.scene = type; api.sendReq(localReq); } else { Toast.makeText(Detail.this, "未安装微信", Toast.LENGTH_SHORT).show(); } }