安卓第三方登錄之微信登錄
二、創建應用
“創建移動應用”
填寫基本的應用信息

填寫平台信息 可參照后面的步准備好要填寫的信息。
應用包的名稱:
keystore
第一步:用 Android Studio 生成 keystore
第二步:Create New
第三步:填寫相關信息,里面內容什么含義自行Google
創建key的文件夾,也可保存到其它地方
創建新的簽名,填寫組織的相關信息
*注意:
簽名工具得到的簽名根你APP的打包步驟有關,默認的debug和jks文件簽名,結果是不一樣的,如果app簽名與微信開放平台的不一樣,將無法調出微信登錄界面!!!
配置簽名路徑並取個名字為“config”
配置 Build Types 使用上步的 “config”
查看文件是不是有下面的一段
android { signingConfigs { config { keyAlias 'Endv.cn' keyPassword 'youPassword****' //簽名文件的密碼 storeFile file('D:/AndroidProjects/key/endv.jks') // 簽名文件路徑 storePassword 'youPassword****' //密碼 } } compileSdkVersion 26 buildToolsVersion "26.0.1" defaultConfig { applicationId "cn.endv.www.tianyun" minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.config } debug { signingConfig signingConfigs.config } } }
編譯成功后,發到手機里安裝好之后進行下一步:
(簽名工具和自己的應用已安裝好) (自己的程序)
下載“簽名生成工具”(在這個群里【650198583】下載,網上也可以找到)
用手機登陸,直接在qq群里下載后安裝,
(建議直接用手機下載)
獲取 key 如圖
最后填入上述步驟中,提交,等待審核。(說是7天,一般1天后就審核通過了)
審核通過后,創建應用的步驟才算結束,然后就可以進行下一步了。
三、微信登錄集成
當審核通過之后,就可以開始使用微信開放平台提供的功能了。要使用“微信登錄”功能必須成功開放者,也就是交了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資源下載”,找到“開發工具包(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復制到工程lib文件夾下,rebuild一下。
2、申明應用權限
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
3、向微信注冊APP
在自定義的Application的onCreate中調用registToWX方法:
@Override public void onCreate() { super.onCreate(); registToWX(); } private void registToWX() { //AppConst.WEIXIN.APP_ID是指你應用在微信開放平台上的AppID,記得替換。 mWxApi = WXAPIFactory.createWXAPI(this, AppConst.WEIXIN.APP_ID, false); // 將該app注冊到微信 mWxApi.registerApp(AppConst.WEIXIN.APP_ID); }
4、調用微信登錄界面
一般會在登錄界面會有一個微信圖標,對微信圖標設置點擊事件,調用如下方法:
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); }
至此,就可以調用微信登錄界面來進行登錄認證了。
5、創建WXEntryActivity.java微信接收響應
WXEntryActivity是一個Activity,用來接收微信的響應信息。這里有幾個需要注意的地方:
- 它必須在"包名.wxapi"這個包下,如:你的應用包名為:com.lqr.test,則WXEntryActivity所在的包名必須為com.lqr.test.wxapi。
-
創建后在AndroidManifest.xml文件中對WXEntryActivity進行設置:android:exported="true"。
<activity android:name=".wxapi.WXEntryActivity" android:exported="true" />
WXEntryActivity.Java繼承自Activity,實現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); //如果沒回調onResp,八成是這句沒有寫 MyApp.mWxApi.handleIntent(getIntent(), this); } // 微信發送請求到第三方應用時,會回調到該方法 @Override public void onReq(BaseReq req) { } // 第三方應用發送到微信的請求處理后的響應結果,會回調到該方法 //app發送消息給微信,處理返回消息的回調 @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); //就在這個地方,用網絡庫什么的或者自己封的網絡api,發請求去咯,注意是get請求 break; case RETURN_MSG_TYPE_SHARE: UIUtils.showToast("微信分享成功"); finish(); break; } break; } } }
當微信授權第三登錄后,會自動調用WXEntryActivity的onResp方法,可以在((SendAuth.Resp) resp).code得到“授權臨時票據code”,之后可以通過code參數加上AppID和AppSecret等,通過API換取access_token,再通過access_token進行接口調用,獲取用戶基本數據資源或幫助用戶實現基本操作。
一般會把獲取access_token步驟(包括之后的操作)放到服務器那邊,服務器經過一番處理之后,返回用戶信息給客戶端。
四、踩坑經驗
在app點擊微信圖標后,一片空白!!控制台打印錯誤碼為-6。
原因:
這是因為app的使用的簽名跟開放平台的應用簽名不一致導致的。
解決方法:
- 使用簽名工具得到手機中app的簽名
- 修改開放平台上的應用簽名
- 清除手機上微信APP的緩存信息(不知道的可以卸載后重裝微信)
- 登錄微信后,再點擊APP的微信登錄圖標