一、創(chuàng)建應(yīng)用并成為開發(fā)者1、創(chuàng)建應(yīng)用1)到微信開放平臺管理中心,點擊“創(chuàng)建移動應(yīng)用”2)填寫基本的應(yīng)用信息3)填寫平臺信息
這里還是說一下怎么獲取應(yīng)用簽名吧:
到“資源中心”-->“資源下載”-->“Android資源下載”,找到“簽名生成工具”下載即可。飛機直達:Gen_Signature_Android2
將APP進行打包安裝到手機(如果是在IDE中直接運行后安裝的話,是使用debug簽名的,跟上線后使用jks文件簽名的不一樣!!!)
給手機安裝第一步中下載的簽名工具,打開后輸入APP的包名(包名是AndroidManifest.xml中package的值),點擊生成,就可以看到應(yīng)用簽名了。
*注意:
簽名工具得到的簽名根你APP的打包步驟有關(guān),默認的debug和jks文件簽名,結(jié)果是不一樣,如果app簽名與微信開放平臺的不一樣,將無法調(diào)出微信登錄界面!!!
4)最后提交,等待審核。(說是7天,一般1天后就審核通過了)2、成為開發(fā)者
很簡單,去“個人中心”,找到“開發(fā)者資質(zhì)認證”,點擊“申請”,然后一步步按要示填寫信息,最后交錢就行,300大洋~~
二、微信登錄
當審核通過之后,就可以開始使用微信開放平臺提供的功能了。要使用“微信登錄”功能必須成功開放者,也就是交了300塊后默認開通此功能。
在這里可以得到AppId和AppSecret,記下,之后會用到。如下圖所示:
1、引入微信SDK依賴1)Android Studio:
在build.gradle的dependencies中加入以下語句
compile?'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:1.0.2'
2)Eclipse(ADT):
去微信開放平臺,“資源中心”-->“資源下載”-->“Android資源下載”,找到“開發(fā)工具包(SDK)”后下載。飛機直達:Android_SDK_4.0.2.zip。
解壓后找到lib文件夾,把wechat-sdk-android-with-mta-1.0.2.jar和wechat-sdk-android-without-mta-1.0.2.jar復(fù)制到工程lib文件夾下,rebuild一下。
2、申明應(yīng)用權(quán)限
3、向微信注冊APP
在自定義的Application的onCreate中調(diào)用registToWX方法:
@Override public?void?onCreate()?{ ????super.onCreate(); ????registToWX(); } private?void?registToWX()?{ ????//AppConst.WEIXIN.APP_ID是指你應(yīng)用在微信開放平臺上的AppID,記得替換。 ????mWxApi?=?WXAPIFactory.createWXAPI(this,?AppConst.WEIXIN.APP_ID,?false); ????//?將該app注冊到微信 ????mWxApi.registerApp(AppConst.WEIXIN.APP_ID); }
4、調(diào)用微信登錄界面
一般會在登錄界面會有一個微信圖標,對微信圖標設(shè)置點擊事件,調(diào)用如下方法:
public?void?wxLogin()?{ ????if?(!MyApp.mWxApi.isWXAppInstalled())?{ ????????UIUtils.showToast("您還未安裝微信客戶端"); ????????return; ????} ????final?SendAuth.Req?req?=?new?SendAuth.Req(); ????req.scope?=?"snsapi_userinfo"; ????req.state?=?"diandi_wx_login"; ????MyApp.mWxApi.sendReq(req); }
至此,就可以調(diào)用微信登錄界面來進行登錄認證了。
5、創(chuàng)建WXEntryActivity.java微信接收響應(yīng)
WXEntryActivity是一個Activity,用來接收微信的響應(yīng)信息。這里有幾個需要注意的地方:
它必須在"包名.wxapi"這個包下,如:你的應(yīng)用包名為:com.lqr.test,則WXEntryActivity所在的包名必須為com.lqr.test.wxapi。
創(chuàng)建后在AndroidManifest.xml文件中對WXEntryActivity進行設(shè)置:android:exported="true"。
WXEntryActivity.Java繼承自Activity,實現(xiàn)IWXAPIEventHandler接口,該接口即處理微信和app通信的不同event。
以下是一個示例:
public?class?WXEntryActivity?extends?Activity?implements?IWXAPIEventHandler?{ ????private?static?final?int?RETURN_MSG_TYPE_LOGIN?=?1; ????private?static?final?int?RETURN_MSG_TYPE_SHARE?=?2; ????@Override ????protected?void?onCreate(@Nullable?Bundle?savedInstanceState)?{ ????????super.onCreate(savedInstanceState); ???????? ????????//如果沒回調(diào)onResp,八成是這句沒有寫 ????????MyApp.mWxApi.handleIntent(getIntent(),?this); ????} ????//?微信發(fā)送請求到第三方應(yīng)用時,會回調(diào)到該方法 ????@Override ????public?void?onReq(BaseReq?req)?{ ????} ????//?第三方應(yīng)用發(fā)送到微信的請求處理后的響應(yīng)結(jié)果,會回調(diào)到該方法 ????//app發(fā)送消息給微信,處理返回消息的回調(diào) ????@Override ????public?void?onResp(BaseResp?resp)?{ ????????LogUtils.sf(resp.errStr); ????????LogUtils.sf("錯誤碼?:?"?+?resp.errCode?+?""); ????????switch?(resp.errCode)?{ ????????????case?BaseResp.ErrCode.ERR_AUTH_DENIED: ????????????case?BaseResp.ErrCode.ERR_USER_CANCEL: ????????????????if?(RETURN_MSG_TYPE_SHARE?==?resp.getType())?UIUtils.showToast("分享失敗"); ????????????????else?UIUtils.showToast("登錄失敗"); ????????????????break; ????????????case?BaseResp.ErrCode.ERR_OK: ????????????????switch?(resp.getType())?{ ????????????????????case?RETURN_MSG_TYPE_LOGIN: ????????????????????????//拿到了微信返回的code,立馬再去請求access_token ????????????????????????String?code?=?((SendAuth.Resp)?resp).code; ????????????????????????LogUtils.sf("code?=?"?+?code); ????????????????????????//就在這個地方,用網(wǎng)絡(luò)庫什么的或者自己封的網(wǎng)絡(luò)api,發(fā)請求去咯,注意是get請求 ???????????????????????? ????????????????????????break; ????????????????????case?RETURN_MSG_TYPE_SHARE: ????????????????????????UIUtils.showToast("微信分享成功"); ????????????????????????finish(); ????????????????????????break; ????????????????} ????????????????break; ????????} ????} }
當微信授權(quán)第三登錄后,會自動調(diào)用WXEntryActivity的onResp方法,可以在((SendAuth.Resp) resp).code得到“授權(quán)臨時票據(jù)code”,之后可以通過code參數(shù)加上AppID和AppSecret等,通過API換取access_token,再通過access_token進行接口調(diào)用,獲取用戶基本數(shù)據(jù)資源或幫助用戶實現(xiàn)基本操作。
一般會把獲取access_token步驟(包括之后的操作)放到服務(wù)器那邊,服務(wù)器經(jīng)過一番處理之后,返回用戶信息給客戶端。
三、踩坑經(jīng)驗
在app點擊微信圖標后,一片空白!!控制臺打印錯誤碼為-6。
原因:
這是因為app的使用的簽名跟開放平臺的應(yīng)用簽名不一致導(dǎo)致的。
解決方法:
使用簽名工具得到手機中app的簽名修改開放平臺上的應(yīng)用簽名清除手機上微信APP的緩存信息(不知道的可以卸載后重裝微信)登錄微信后,再點擊APP的微信登錄圖標