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


安卓第三方登錄之微信登錄 

 一、成為開發者

到微信開放平台管理中心(https://open.weixin.qq.com/),認證成為開發者


二、創建應用

  “創建移動應用”

 

  填寫基本的應用信息

 

 

 

填寫平台信息 可參照后面的步准備好要填寫的信息。

 

應用包的名稱:

  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,用來接收微信的響應信息。這里有幾個需要注意的地方:

  1. 它必須在"包名.wxapi"這個包下,如:你的應用包名為:com.lqr.test,則WXEntryActivity所在的包名必須為com.lqr.test.wxapi。
  2. 創建后在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的使用的簽名跟開放平台的應用簽名不一致導致的。

解決方法:

    1. 使用簽名工具得到手機中app的簽名
    2. 修改開放平台上的應用簽名
    3. 清除手機上微信APP的緩存信息(不知道的可以卸載后重裝微信)
    4. 登錄微信后,再點擊APP的微信登錄圖標


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM