Android 微信第三方登入(個人筆記),android第三方

來源:互聯網
上載者:User

Android 第三方登入(個人筆記),android第三方

今天在寫登入,花了半天時間搞定、然後寫下自己的筆記,希望協助更多的人。。。歡迎各位指教。

 

授權登入,官方說的不是很清楚、所以導致有一部分的坑。

註冊應用平台的應用簽名,下載 簽名產生工具 輸入項目的packageName也可以查看到。

(注意:debug、Release 一定要區分,因為2種產生的簽名不一致,會導致沒有跳轉、回調。。。。一般在開發人員上面註冊的是正式環境打包好的、)

 

 

 

申請開發人員帳號、應用申請省略。。。。

 

 

1. AndroidManifest.xml 許可權

<!-- 許可權-->
<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"/>

 

 

2.在圖一按鈕上面,加上跳轉方法、也就是啟動登入的方法

private void loginToWeiXin(){        IWXAPI mApi = WXAPIFactory.createWXAPI(this, WXEntryActivity.WEIXIN_APP_ID, true);        mApi.registerApp(WXEntryActivity.WEIXIN_APP_ID);        if (mApi != null && mApi.isWXAppInstalled()) {            SendAuth.Req req = new SendAuth.Req();            req.scope = "snsapi_userinfo";            req.state = "wechat_sdk_demo_test_neng";            mApi.sendReq(req);        } else            Toast.makeText(this, "使用者未安裝", Toast.LENGTH_SHORT).show();    }

 

3.在你的包名相應目錄下建立一個wxapi目錄,並在該wxapi目錄下新增一個WXEntryActivity類,該類繼承自Activity

 package(項目報名).wxapi.WXEntryActivity.Java 

回調方法onResp() 方法沒有觸發回調、請監測WXEntryActivity onCreate中是否調用此方法  mApi.handleIntent(this.getIntent(), this);

package com.xxx.xxxx.android.wxapi;/** * 登入頁面 * @author kevin_chen 2016-12-10 下午19:03:45 * @version v1.0 */public class WXEntryActivity extends Activity implements IWXAPIEventHandler {    private static final String APP_SECRET = "填寫自己的AppSecret";    private IWXAPI mWeixinAPI;    public static final String WEIXIN_APP_ID = "填寫自己的APP_id";    private static String uuid;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        mWeixinAPI = WXAPIFactory.createWXAPI(this, WEIXIN_APP_ID, true);        mWeixinAPI.handleIntent(this.getIntent(), this);    }    @Override    protected void onNewIntent(Intent intent) {        super.onNewIntent(intent);        setIntent(intent);        mWeixinAPI.handleIntent(intent, this);//必須調用此句話    }    //發送的請求將回調到onReq方法    @Override    public void onReq(BaseReq req) {        LogUtils.log("onReq");    }    //發送到請求的響應結果    @Override    public void onResp(BaseResp resp) {        LogUtils.log("onResp");        switch (resp.errCode) {        case BaseResp.ErrCode.ERR_OK:            LogUtils.log("ERR_OK");            //發送成功            SendAuth.Resp sendResp = (SendAuth.Resp) resp;            if (sendResp != null) {                String code = sendResp.code;                getAccess_token(code);            }            break;        case BaseResp.ErrCode.ERR_USER_CANCEL:            LogUtils.log("ERR_USER_CANCEL");            //發送取消            break;        case BaseResp.ErrCode.ERR_AUTH_DENIED:            LogUtils.log("ERR_AUTH_DENIED");            //發送被拒絕            break;        default:            //發送返回            break;        }    }    /**     * 擷取openid accessToken值用於後期操作     * @param code 請求碼     */    private void getAccess_token(final String code) {        String path = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="                + WEIXIN_APP_ID                + "&secret="                + APP_SECRET                + "&code="                + code                + "&grant_type=authorization_code";        LogUtils.log("getAccess_token:" + path);        //網路請求,根據自己的請求方式        VolleyRequest.get(this, path, "getAccess_token", false, null, new VolleyRequest.Callback() {            @Override            public void onSuccess(String result) {                LogUtils.log("getAccess_token_result:" + result);                JSONObject jsonObject = null;                try {                    jsonObject = new JSONObject(result);                    String openid = jsonObject.getString("openid").toString().trim();                    String access_token = jsonObject.getString("access_token").toString().trim();                    getUserMesg(access_token, openid);                } catch (JSONException e) {                    e.printStackTrace();                }            }            @Override            public void onError(String errorMessage) {            }        });    }    /**     * 擷取的個人資訊     * @param access_token     * @param openid     */    private void getUserMesg(final String access_token, final String openid) {        String path = "https://api.weixin.qq.com/sns/userinfo?access_token="                + access_token                + "&openid="                + openid;        LogUtils.log("getUserMesg:" + path);        //網路請求,根據自己的請求方式        VolleyRequest.get(this, path, "getAccess_token", false, null, new VolleyRequest.Callback() {            @Override            public void onSuccess(String result) {                LogUtils.log("getUserMesg_result:" + result);                JSONObject jsonObject = null;                try {                    jsonObject = new JSONObject(result);                    String nickname = jsonObject.getString("nickname");                    int sex = Integer.parseInt(jsonObject.get("sex").toString());                    String headimgurl = jsonObject.getString("headimgurl");                                     LogUtils.log("使用者基本資料:");                    LogUtils.log("nickname:" + nickname);                    LogUtils.log("sex:" + sex);                    LogUtils.log("headimgurl:" + headimgurl);                } catch (JSONException e) {                    e.printStackTrace();                }                finish();            }            @Override            public void onError(String errorMessage) {            }        });    }}

 

5.在 AndroidManifest.xml 設定註冊的頁面

當授權時候進入WXEntryActivity、當前背景可能是黒或白,為了不影響使用者體驗,可以把當前Activity設定為透明:

android:theme="@android:style/Theme.Translucent" 

<!--註冊回調 WXEntryActivity --><activity    android:name=".wxapi.WXEntryActivity"    android:exported="true"    android:label="@string/app_name"    android:launchMode="singleTop"    android:theme="@android:style/Theme.Translucent" />

 

 

 

 

具體可參考:授權登入取使用者資訊步驟

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.