關於微信sdk的注意事項與解決方案
不得不說,為了實現一個微信簡單的分享功能真的是浪費了我好多的時間,官方的文件說的什麼我也不做什麼評價,畢竟這個sdk是人家寫的,我學習這個sdk的重要方法就是在看那個給的那個官方的demo,就和學習百度雲推送一樣,我感覺我們要是可以理清了這個demo的基本思路,那麼我們就可以簡單了利用它來實現自己的東西了。我覺得最好的學習方法就是在原有的基礎上面改,畢竟人家那個例子是可以執行的,我們改一點看一點,只要是不改的太多基本就可以完美執行,這樣的話看到了自己改動的痕跡,我們學起來也有信心與興趣!好了廢話不多說,我這裡只是想說一下關於網頁分享的問題,如果學習過微信官方給的demo的話,那麼大家就一定會發現那個網頁的分享是不可用的,究其根本原因貌似是圖片轉化上面有點問題,感興趣的朋友可以去百度或者谷歌一下,就一定會有大神來給我們講解的!好了,下面我們就來看一下我的這個例子的實現。
畢竟大家都是有Android開發經驗的人了,對於佈局檔案什麼的,大家可以隨心所欲的實現,還有就是要在libs裡面加入微信的sdk包,這個例子我做的也是特別好,就不在此班門弄斧了,直接上主程式碼:
我感覺這具體的語法啥的無非就是這幾個物件的建立然後用req發出去,這裡我要講一下我的問題的所在,以至於我一度認為微信sdk有bug......package com.weixinshare.wxapi; import com.tencent.mm.sdk.openapi.BaseReq; import com.tencent.mm.sdk.openapi.BaseResp; import com.tencent.mm.sdk.openapi.IWXAPI; import com.tencent.mm.sdk.openapi.IWXAPIEventHandler; import com.tencent.mm.sdk.openapi.SendMessageToWX; import com.tencent.mm.sdk.openapi.WXAPIFactory; import com.tencent.mm.sdk.openapi.WXMediaMessage; import com.tencent.mm.sdk.openapi.WXWebpageObject; import com.weixintest.R; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class WXEntryActivity extends Activity implements IWXAPIEventHandler{ public static final String APP_ID = "wx6a4a9fd0f8322251"; // IWXAPI 是第三方app和微信通訊的openapi介面 private IWXAPI api; private Button gotoBtn; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.entry); // 通過WXAPIFactory工廠,獲取IWXAPI的例項 api = WXAPIFactory.createWXAPI(this, APP_ID, false); gotoBtn = (Button) findViewById(R.id.button1); gotoBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { api.registerApp(APP_ID); WXWebpageObject webpage = new WXWebpageObject(); webpage.webpageUrl = "http://www.baidu.com"; WXMediaMessage msg = new WXMediaMessage(webpage); msg.title = "我的測試"; msg.description = "測試微信分享"; try { Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.send_img); Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 150, 150, true); bmp.recycle(); msg.setThumbImage(thumbBmp); } catch (Exception e) { e.printStackTrace(); } SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = String.valueOf(System.currentTimeMillis()); req.message = msg; req.scene = SendMessageToWX.Req.WXSceneTimeline; // req.scene = isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession; api.sendReq(req); } }); } // 微信傳送請求到第三方應用時,會回撥到該方法 @Override public void onReq(BaseReq req) { } // 第三方應用傳送到微信的請求處理後的響應結果,會回撥到該方法 @Override public void onResp(BaseResp resp) { 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: result = "傳送被拒絕"; break; default: result = "傳送返回"; break; } Toast.makeText(this, result, Toast.LENGTH_LONG).show(); }
相信大家都知道,這個微信的驗證是很麻煩的,必須要求我們的程式的簽名,api_id和我們申請時候所填的包名必須一致才可以保證它的正常與執行。因為我在改自己的例子的時候吧,改包名那裡就只是簡單的用shift+alt+r更改了而已,然後我還特意的去我的workspace的資料夾發現這個例子的一層層的資料夾都變了就是先com->weixintest->wxapi,但是我在測試的是後無論怎樣都測試不了,我還以為是簽名的問題,於是在我的獲取簽名的手機軟體裡面輸入:com.weixintest 竟然告訴我,這個沒有簽名,我就更加撲朔迷離了,大家可以想象一下我當時的心情,我的確是用Android->tool生成的簽名apk啊,最後竟然告訴我沒有簽名,而且按照官方的說法我更改了包名就應該錯誤了吧,於是我又開啟一個新的微信Demo的例子(可以正常執行的官方的例子),用shift+alt+r的方法把那個net.resourceforge.simcpux更改為了com.share最後竟然還可以正常與執行
神奇的是我在獲取簽名的軟體中輸入:net.resourceforge.simcpux竟然獲取了預設的debug簽名,我在想我這裡也沒有這個包啊?於是感覺特別神奇,這時,我就在想是什麼讓我沒有該包呢,於是上網查了一下,發現改包的的方法還是我用的那個啊,這時候我無意的去看了一個關於解釋微信的sdk的部落格,我這才突然發現貌似也可以在manifest裡面改包,於是我就去看了一下我的manifest,竟然發現我的包名竟然沒有變化。。。。於是一切都明瞭了。。。然後我就在這裡更改了包名為了com.wexintest於是就ok了!
或許對於一些大神來說沒有遇到這用“二”的問題,由於我花費了很長時間才搞懂這個,就特地在此寫出來分享一下,也做個紀念吧!