1. 程式人生 > >Android 呼叫微信Api

Android 呼叫微信Api

最近一專案需要新增微信的分享:朋友、朋友圈。

原本以為挺簡單的一事,無非就是去官網下個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();
		}
	}