一、創建應用併成爲開發者
1、創建應用
1)到微信開放平臺管理中心,點擊“創建移動應用”
2)填寫基本的應用信息
3)填寫平臺信息
這裏還是說一下怎麼獲取應用簽名吧:
到“資源中心”-->“資源下載”-->“Android資源下載”,找到“簽名生成工具”下載即可。飛機直達:Gen_Signature_Android2
將APP進行打包安裝到手機(如果是在IDE中直接運行後安裝的話,是使用debug簽名的,跟上線後使用jks文件簽名的不一樣!!!)
給手機安裝第一步中下載的簽名工具,打開後輸入APP的包名(包名是AndroidManifest.xml中package的值),點擊生成,就可以看到應用簽名了。
*注意:
簽名工具得到的簽名根你APP的打包步驟有關,默認的debug和jks文件簽名,結果是不一樣,如果app簽名與微信開放平臺的不一樣,將無法調出微信登錄界面!!!
4)最後提交,等待審覈。(說是7天,一般1天后就審覈通過了)
2、成爲開發者
很簡單,去“個人中心”,找到“開發者資質認證”,點擊“申請”,然後一步步按要示填寫信息,最後交錢就行,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資源下載”,找到“開發工具包(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文件中對.wxapi.WXEntryActivity進行設置:android:exported=”true”。
- WXEntryActivity.Java繼承自Activity,實現IWXAPIEventHandler接口,該接口即處理微信和app通信的不同event。
以下是一個示例:
//這個是上面的第二條記得刪掉這個
//<activity android:name=".wxapi.WXEntryActivity" android:exported="true" />
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) {
}
// 第三方應用發送到微信的請求處理後的響應結果,會回調到該方法
@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的微信登錄圖標