微信授權登陸接入第三方App(步驟總結)Android。
這幾天開發要用到微信授權的功能,所以就研究了一下。可是微信開放平臺接入指南里有幾個地方寫的不清不楚。在此總結一下,以便需要的人。
很多微信公眾平臺的應用如果移植到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="code"class="java">publicclass WXEntryActivity extends Activity implements IWXAPIEventHandler{
- private IWXAPI api;
- @Override
- protectedvoid onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.flash_activity);
- <span style="color:#3366ff;">api = WXAPIFactory.createWXAPI(this, Property.wxLoginInfo.getAppid(), false);
- api.handleIntent(getIntent(), this);</span>
- }
- @Override
- publicvoid onReq(BaseReq arg0) {
- // TODO Auto-generated method stub
- }
- @Override
- publicvoid onResp(BaseResp resp) {
- Bundle bundle = new Bundle();
- switch (resp.errCode) {
- case BaseResp.ErrCode.ERR_OK:
- // 可用以下兩種方法獲得code
- // resp.toBundle(bundle);
- // Resp sp = new Resp(bundle);
- // String code = sp.code;<span style="white-space:pre">
- // 或者
- String code = ((SendAuth.Resp) resp).code;
- //上面的code就是接入指南里要拿到的code
- break;
- default:
- break;
- }
- }
- }
注意:上面是獲取code。現在最新的官方jar包好像不支援獲得code了。直接就能得到token,省略了獲取code 這一步。所以方法不變,大家取的時候直接resp.token就行了。不用再去取code了。但是,但是,這樣直接拿到token了好像按照官方文件上的方法就不能獲得openid了。我也沒嘗試有什麼新的方法,反正是jar包更新了但是文件還沒更新,大家弄不成功的話可以先用舊的jar和上面獲取code的方法。點選下載舊版jar包
這是那個WXEntityAcitivity的部分程式碼。結合接入指南,大家應該都看的懂。
然後開始和微信通話,
- </pre><pre name="code"class="java">{
- // send oauth request
- Final SendAuth.Req req = new SendAuth.Req();
- req.scope = "snsapi_userinfo";
- req.state = "wechat_sdk_demo_test";
- api.sendReq(req);
- }
這一步就是和微信要code。執行了這一段程式碼之後。微信會呼叫剛才WXEntityActivity類裡面的onResp()方法。並且把code返回來了。見上面那一段程式碼。獲取到code之後就可以通過code獲取access_token了。
請求以下連結獲取access_token:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code 這步和微信通訊獲得access_token就是普通的訪問連結。 用httpClient就行了,而不是接入指南里說的那個和微信通訊的方法onReq().然後還是這樣的方式通過access_token.就可以呼叫介面獲得使用者基本資訊了。具體返回引數什麼的接入指南里面說的很清楚。至此微信授權基本是成功了。不過在開發的過程中要注意一下debug keystore。就是Window->Preferences->Android->Build裡面。
而我們新增的這個keystore 也要符合一些規範所以要改一改。
那就是keystore的密碼改為:android
keytool -storepasswd -keystore my.keystore (在cmd裡執行的命令)
其中,my.keystore是要修改的證書檔案,執行後會提示輸入證書的當前密碼,和新密碼以及重複新密碼確認。這一步需要將密碼改為。
alias的名稱要改為:androiddebugkey
keytool -changealias -keystore my.keystore -alias my_name -destalias debugkey
這一步中,my_name是證書中當前的alias,-destalias指定的是要修改為的alias,這裡按規矩來,改為debugkey!這個命令會先後提示輸入keystore的密碼和當前alias的密碼。
keystore的alias密碼也改為:android
keytool -keypasswd -keystore my.keystore -alias androiddebugkey
這一步執行後會提示輸入keystore密碼,alias密碼,然後提示輸入新的alias密碼,同樣,按規矩來,改為android!
這樣修改完keystore之後把這個keystore放到上面ADT的custom debug keystore裡面。就可以直接除錯微信相關的功能了。大概就這幾點吧。