關於使用微信登入第三方APP的實現(Android版)
轉自:http://my.oschina.net/crazymus/blog/521164
使用微信登入APP,免去註冊過程,現在已經有很多的類似應用了。整合該功能過程不復雜,但還是有一些地方需要注意的。
開始之前,需要做下面的準備工作。
1、到微信開放平臺註冊你的APP,並申請開通微信登入的許可權。參考這裡:
2、下載Android SDK和簽名檢視工具,請參考:
3、獲取到APP的簽名,並填寫到微信開放平臺。
下面開始進入主題:
引入微信登入相關SDK到專案的lib資料夾中,就一個檔案:
?1 |
libammsdk.jar
|
呼叫微信,申請使用者授權:
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//api註冊
api = WXAPIFactory.createWXAPI(
this
,
"APP_ID"
,
true
);
api.registerApp(
"APP_ID"
);
SendAuth.Req req = new
SendAuth.Req();
//授權讀取使用者資訊
req.scope =
"snsapi_userinfo"
;
//自定義資訊
req.state =
"wechat_sdk_demo_test"
;
//向微信傳送請求
api.sendReq(req);
|
將APP_ID替換成你在微信開放平臺申請到的,上面的程式碼就可以調起微信了。
授權成功後,微信會返回一個code,下面介紹如何接收微信回傳的資訊。
在你的包名相應目錄下新建一個wxapi目錄,並在該wxapi目錄下新增一個WXEntryActivity.java檔案,輸入類似下面的程式碼:
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
package
你的包名.wxapi;
public
class
WXEntryActivity
extends
Activity
implements
IWXAPIEventHandler{
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
//註冊API
api = WXAPIFactory.createWXAPI(
this
,
"APP_ID"
);
api.handleIntent(getIntent(),
this
);
}
@Override
public
void
onResp(BaseResp resp) {
if
(resp
instanceof
SendAuth.Resp){
SendAuth.Resp newResp = (SendAuth.Resp) resp;
//獲取微信傳回的code
String code = newResp.code;
}
}
}
|
在AndroidManifest.xml中加入下面的程式碼:
?1 |
<activity android:exported=
"true"
android:launchMode=
"singleTop"
android:name=
".wxapi.WXEntryActivity"
android:theme=
"@android:style/Theme.NoDisplay"
/>
|
修復WXEntryActivity中的錯誤,在onResp方法中獲取到code,然後通過下面的介面獲取到token和openid:
得到下面的資料:
?1 2 3 4 5 6 7 8 |
{
"access_token"
:
"ACCESS_TOKEN"
,
"expires_in"
:7200,
"refresh_token"
:
"REFRESH_TOKEN"
,
"openid"
:
"OPENID"
,
"scope"
:
"SCOPE"
,
"unionid"
:
"o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
|
openid可以作為使用者的唯一標識,將openid儲存下來,就可以實現登入狀態的檢查了。
如果需要獲取使用者的資訊,例如暱稱,頭像,可以使用下面的介面:
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
得到的資料為:
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{
"openid"
:
"OPENID"
,
"nickname"
:
"NICKNAME"
,
"sex"
:1,
"province"
:
"PROVINCE"
,
"city"
:
"CITY"
,
"country"
:
"COUNTRY"
,
"headimgurl"
:
"http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0"
,
"privilege"
:[
"PRIVILEGE1"
,
"PRIVILEGE2"
],
"unionid"
:
" o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
|
更多的介面使用,請參考:
可能的問題:
1、無法調起微信。
可能的原因是簽名錯誤,請檢查簽名。
2、無法接受到微信回傳的資訊
可能的原因是沒有把WXEntryActivity加入到AndroidManifest.xml中。