Android 呼叫微信Api
阿新 • • 發佈:2019-02-15
最近一專案需要新增微信的分享:朋友、朋友圈。
原本以為挺簡單的一事,無非就是去官網下個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(); }
2)分享圖片加文字:
/** * 傳送圖片和文字 * * @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(); } }