安卓第三方登錄之微信登錄(圖文詳解)

一、創建應用併成爲開發者
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,用來接收微信的響應信息。這裏有幾個需要注意的地方:

  1. 它必須在”包名.wxapi”這個包下,如:你的應用包名爲:com.lqr.test,則WXEntryActivity所在的包名必須爲com.lqr.test.wxapi。
  2. 創建後在AndroidManifest.xml文件中對.wxapi.WXEntryActivity進行設置:android:exported=”true”。
  3. 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的微信登錄圖標
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章