摘自:http://blog.csdn.net/jolin678/article/details/50524081
這幾天開發要用到微信授權的功能,所以就研究了一下。可是微信開放平台接入指南里有幾個地方寫的不清不楚。在此總結一下,以便需要的人。
很多微信公眾平台的應用如果移植到app上的話就需要微信授權登陸了。
- 目前移動應用上微信登錄只提供原生的登錄方式,需要用戶安裝微信客戶端才能配合使用。也就是如果第三方應用需要微信授權登陸的話就必須在本機上安裝了微信。而后續授權登陸或調用接口之類的相當於app和微信兩個應用之間通話。
1、首先需要注冊微信開放平台,然后獲取開發者認證。審批通過之后再創建一個移動應用同樣還是需要審批。通過之后就可以給這個應用添加微信授權登陸以及相應功能了。這里移動應用審批通過之后會給你兩個參數,一個叫AppId,一個叫Secret。這兩個參數在后面用的到。
補充:寫這篇文章有一段時間了。在這補充下大家容易出問題的幾個地方。
1)大家在創建移動應用的時候注意的地方。
上面圖片是申請移動應用時候的第二步,令我想不明白的是很多開發者還不知道應用包名和應用簽名指的是什么。。。。。。。。
包名是你manifest文件里面頂層的那個package啊。
就是這個東西啊,這個東西啊少年。
2)應用簽名。好吧我真不想啰嗦了。應用簽名就是你同過ks文件得到的那個應用簽名。如果你不知道如何獲得這個簽名。請按下面步驟走:
1,先把你的應用程序打包安裝在你的手機上。
2,下載官網上提供的簽名生成工具並安裝在手機上。下面這個地方下載:
3、打開簽名生成工具輸入你的app的包名就生成你的應用簽名了。
補充完畢。。。(對於上面這點補充我真不想多回答了。PS:我的昵稱留下了QQ我很無辜啊。。。大家有問題上班時間別問好嗎,哥心軟不忍心拒絕啊,尤其有妹子問的時候啊。。。墳蛋)
2、在需要微信授權的項目中導入微信的第三方JAR包,這個在微信開放平台接入指南里面說的很清楚,不再啰嗦。
3、注冊到微信:
這一步也沒什么課解釋的,相當於兩人要聯系的時候先打通了電話,然后開始溝通。這一步在需要和微信通話的界面之前注冊了就行。我的是在歡迎界面注冊的。
4、開始和微信通話
首先和微信通話之前,要在項目代碼中新建一個Activity,並提供相應的回調方法供微信調用。但是這一點在接入指南上寫的就不清不楚導致我浪費了好幾個小時。一下內容是我在接入指南里復制來的。
a. 在你的包名相應目錄下新建一個wxapi目錄,並在該wxapi目錄下新增一個WXEntryActivity類,該類繼承自Activity(例如應用程序的包名為net.sourceforge.simcpux,則新添加的類如下圖所示)
並在manifest文件里面加上exported屬性,設置為true。
一定要注意上面這句話:在你的包名相應目錄下新建一個wxapi目錄。說的是在包名相應目錄下建一個wxapi目錄。也就是是包名目錄的子目錄,千萬不要直接在src下面建個包就完了。(粗心這毛病害死人啊。)
然后再這個包下面建一個類:
<pre name= => WXEntryActivity Activity IWXAPIEventHandler{
- IWXAPI api;
- onCreate(Bundle savedInstanceState) {
- .onCreate(savedInstanceState);
- setContentView(R.layout.flash_activity);
- , Property.wxLoginInfo.getAppid(), );
- api.handleIntent(getIntent(), );</span>
- onReq(BaseReq arg0) {
- onResp(BaseResp resp) {
- Bundle();
- (resp.errCode) {
- BaseResp.ErrCode.ERR_OK:
- // resp.toBundle(bundle); // Resp sp = new Resp(bundle); // String code = sp.code;<span style="white-space:pre"> // 或者
- ;
- :
- ;
- }
- }
注意:上面是獲取code。現在最新的官方jar包好像不支持獲得code了。直接就能得到token,省略了獲取code 這一步。所以方法不變,大家取的時候直接resp.token就行了。不用再去取code了。但是,但是,這樣直接拿到token了好像按照官方文檔上的方法就不能獲得openid了。我也沒嘗試有什么新的方法,反正是jar包更新了但是文檔還沒更新,大家弄不成功的話可以先用舊的jar和上面獲取code的方法。點擊下載舊版jar包
這是那個WXEntityAcitivity的部分代碼。結合接入指南,大家應該都看的懂。
然后開始和微信通話,
</pre><pre name= =>{
- SendAuth.Req();
- req.scope = ;
- ;
- api.sendReq(req);
- }
這一步就是和微信要code。執行了這一段代碼之后。微信會調用剛才WXEntityActivity類里面的onResp()方法。並且把code返回來了。見上面那一段代碼。獲取到code之后就可以通過code獲取access_token了。
請求以下鏈接獲取access_token:
這步和微信通信獲得access_token就是普通的訪問鏈接。 用httpClient就行了,而不是接入指南里說的那個和微信通信的方法onReq().然后還是這樣的方式通過access_token.就可以調用接口獲得用戶基本信息了。具體返回參數什么的接入指南里面說的很清楚。至此微信授權基本是成功了。
不過在開發的過程中要注意一下debug keystore。就是Window->Preferences->Android->Build里面。
這里,我們要添加Custom debug keystore。上面的那個debug keystore不會和微信通信。
而我們添加的這個keystore 也要符合一些規范所以要改一改。
那就是keystore的密碼改為:android
其中,my.keystore是要修改的證書文件,執行后會提示輸入證書的當前密碼,和新密碼以及重復新密碼確認。這一步需要將密碼改為android。
alias的名稱要改為:androiddebugkey
android 這一步中,my_name是證書中當前的alias,-destalias指定的是要修改為的alias,這里按規矩來,改為androiddebugkey!這個命令會先后提示輸入keystore的密碼和當前alias的密碼。
keystore的alias密碼也改為:android
keytool -keypasswd -keystore my.keystore -alias androiddebugkey
這一步執行后會提示輸入keystore密碼,alias密碼,然后提示輸入新的alias密碼,同樣,按規矩來,改為android!
這樣修改完keystore之后把這個keystore放到上面ADT的custom debug keystore里面。就可以直接調試微信相關的功能了。
大概就這幾點吧。