微信sdk應用消息的接入(android)

        最近隨着android應用的開發,我根據需求需要添加微信sdk,其作用是在一個手機上打開我的應用,然後使用微信sdk發送一個應用消息給另一個微信用戶,另一個用戶在接收到信息之後,點擊接收到的應用消息,如果手機上沒有安裝我的應用,那麼就進行下載,如果已經安裝了,那麼就打開這個應用,並且接收相應的參數,做一些邏輯上的跳轉。

        乍一看這個需求是很明確的,在微信sdk的官網也能看到這個功能的確已經被實現了,但是我自己在添加的過程中就遇到了一些問題,在這裏我把我的感想記錄下來,作爲一個參考。

       首先是微信官方提供給我們開發者的demo,這個demo一開始我用eclipse導入,直接安裝在我的手機上,發現所有的接口功能都無法調用,後來發現自己原來沒有使用自帶的

 debug.keystore ,所以導致我的簽名和微信官方配置的簽名不一致,從而導致微信demo中的接口都無法使用。那麼解決方式就是使用demo文件夾底下的debug.keystore打包,同時我們打包所用的密碼都是android,然後就可以發現我們的例子裏的各個功能都可以正常使用了。

        既然例子可以正常使用,我們就可以根據例子裏的代碼,去發送我們的應用消息了。首先,在微信sdk的官網上,我們可以根據它所描述的步驟,如申請我們的應用,在manifest裏面配置相應的權限等,去一一實現,這裏比較簡單直接,我就不一一贅述了。下面就來談談我遇到的問題。

       我遇到的第一個問題是:如果我手機上沒有安裝當前的應用,我接收到了別人發送的應用消息,那麼我就應該打開相應的網址,一般這個網址的作用是提供下載。我檢查了自己的代碼,如下:


protected  void inviteTeacherWx(String title, String description){
		final WXAppExtendObject appdata = new WXAppExtendObject();
		final String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/test.png";
		appdata.fileData = Utils.readFromFile(path, 0, -1);
		appdata.extInfo = ""+UserInfo.getInstance().getSchoolId(this);


		final WXMediaMessage msg = new WXMediaMessage();
		if(appdata.fileData != null) {
			msg.setThumbImage(Utils.extractThumbNail(path, 150, 150, true));
		}
		msg.title = title;
		msg.description = description;


		msg.mediaObject = appdata;

		SendMessageToWX.Req req = new SendMessageToWX.Req();
		req.transaction = String.valueOf(System.currentTimeMillis());
		req.message = msg;
		api.sendReq(req);
	}

       這裏有個小插曲,我發現這裏直接寫了一張從內存上讀取的test.png的圖片,而這張圖片其實我並沒有用到,我用到的圖片是我在創建應用的時候就上傳的一張圖片,所以我就保留了原來的寫法,只不過它根本不會執行~~下面我就遇到了上文所說的第一個問題,我要打開我的應用的下載地址,那麼這個地址一定是我配置的,因爲我們android的開發是和ios一起進行的,根據ios的小夥伴說appdata這個對象應該有一個值是url,也就是設置我們的下載路徑的參數,而我經過嘗試發現url這個參數根本在android 微信sdk裏是不存在的,並且我幾乎嘗試了所有的參數,甚至連filepath都試過了,都不可以。所以我的android打開的網址都是微信sdk默認的一個wap網頁。這是怎麼回事呢?我後來發現原來這個參數的配置是在微信sdk後臺做的,也就如下圖所示:

  


        一開始我的這個值是空的,所以一直點不開我的應用的下載鏈接,在客戶端也找不到這個url的設定的地方。在android端的應用消息的下載url的配置應該是在我們的應用的微信sdk後臺直接配置的。我不知道爲什麼ios那裏就有一個包含url的WXAPPExtendObject對象,而相應的android的WXAPPExtendObject卻沒有這個參數,難道是當時開發的時候遺漏了嗎~

        第二個問題就是在我們下載的微信官方sdk的demo裏我們根據上面的打包方法是可以發送我們的應用消息的,但是在我自己的應用裏我卻不能發送我的應用消息,我已經按照demo裏的做法添加了我上面所貼的代碼,幾乎和demo裏所提供的一模一樣,但是卻無法執行我們的發送應用消息的功能。這裏其實也很簡單,就是把我們項目中添加demo中的代碼,其中最重要的是我們貼demo的代碼的時候連文件結構也要與demo中的一致,否則微信sdk的接口是無法調用的。官方的教程在https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=1417751808&token=&lang=zh_CN,我覺得最重要的一句是:a. 在你的包名相應目錄下新建一個wxapi目錄,並在該wxapi目錄下新增一個WXEntryActivity類,該類繼承自Activity,我一開始的錯誤就是沒有按照這一步,而是自己隨意放了一個位置,導致錯誤,在這裏強調一下。接sdk的時候還是要仔細看別人的文檔啊,要不然嚴重影響效率~~

       還有,即使直接在我們的手機上進行調試的時候,也需要使用我們的keystore,可能是爲了匹配我們的微信後臺的appid吧,讓我們的app和微信相關聯。如果少了這一步,我們的app在調用微信相關接口的時候可能會閃退~我使用的是android studio,所以我設置keystore的方法是:

       在我們的項目的build.gradle中添加如下的代碼(在android{} 內部添加):

       

signingConfigs {
        debug {
            storeFile file("C:/Users/User01/Desktop/debug.keystore")
        }
    }
其中的字符串是我們的本機上的keystore的目錄。

   

發佈了162 篇原創文章 · 獲贊 619 · 訪問量 47萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章