Android微信登陸



前言

分享到微信朋友圈的功能早已經有了,但微信登錄推出並不久,文檔寫的也並不是很清楚,這里記錄分享一下。 

 

聲明
歡迎轉載,但請保留文章原始出處:) 
博客園:http://www.cnblogs.com
農民伯伯: http://over140.cnblogs.com 

 

正文

一、准備

注冊、認證步驟自己來。微信開放平台:https://open.weixin.qq.com

 

二、 代碼

2.1 喚起微信登錄

參考官網文檔:資源中心/移動應用開放/接入指南/Android接入指南 

     private IWXAPI mWeixinAPI;

     private  void loginWithWeixin() {
         if (mWeixinAPI ==  null) {
            mWeixinAPI = WXAPIFactory.createWXAPI( this, WEIXIN_APP_ID,  false);
        }

         if (!mWeixinAPI.isWXAppInstalled()) {
            //提醒用戶沒有按照微信
             return;
        }

        mWeixinAPI.registerApp(WEIXIN_APP_ID);

        SendAuth.Req req =  new SendAuth.Req();
        req.scope = WEIXIN_SCOPE;
        req.state = WEIXIN_STATE;
        mWeixinAPI.sendReq(req);
    }

WEXIN_SCOPE 這里填的snsapi_userinfo,用snsapi_base提示沒權限。

WEIXIN_STATE 用於保持請求和回調的狀態,授權請求后原樣帶回給第三方。該參數可用於防止csrf攻擊(跨站請求偽造攻擊),建議第三方帶上該參數,可設置為簡單的隨機數加session進行校驗。

不出意外就能喚起微信登錄了。 

 

2.2 接收微信的請求及返回值

在你的包名相應目錄下新建一個wxapi目錄,並在該wxapi目錄下新增一個WXEntryActivity類,參考文檔在AndroidManifest.xml注冊Activity。

public  class WXEntryActivity  extends Activity {

    @Override
     protected  void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);

        handleIntent(getIntent());
    }

    @Override
     protected  void onNewIntent(Intent intent) {
         super.onNewIntent(intent);
        handleIntent(intent);
    }

     private  void handleIntent(Intent intent) {
        SendAuth.Resp resp =  new SendAuth.Resp(intent.getExtras());
         if (resp.errCode == BaseResp.ErrCode.ERR_OK) {
             // 用戶同意
        }
    }
}

注意,這里和微信的例子寫的有點不一樣,不過結果是一樣的,這個能取到code等信息,測試返回數據如下:

        E/WXEntryActivity(14288): onCreate...key:_wxapi_sendauth_resp_state xxx
        E/WXEntryActivity(14288): onCreate...key:_wxapi_sendauth_resp_token xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        E/WXEntryActivity(14288): onCreate...key:_mmessage_appPackage com.tencent.mm
        E/WXEntryActivity(14288): onCreate...key:_wxapi_baseresp_transaction  null
        E/WXEntryActivity(14288): onCreate...key:_wxapi_sendauth_resp_lang zh_CN
        E/WXEntryActivity(14288): onCreate...key:_wxapi_command_type 1
        E/WXEntryActivity(14288): onCreate...key:_mmessage_content  null
        E/WXEntryActivity(14288): onCreate...key:_wxapi_sendauth_resp_country  null
        E/WXEntryActivity(14288): onCreate...key:_mmessage_checksum [B@426358e8
        E/WXEntryActivity(14288): onCreate...key:wx_token_key com.tencent.mm.openapi.token
        E/WXEntryActivity(14288): onCreate...key:_wxapi_sendauth_resp_url xxxxxxxxxxx
        E/WXEntryActivity(14288): onCreate...key:_mmessage_sdkVersion 570490883
        E/WXEntryActivity(14288): onCreate...key:_wxapi_baseresp_errcode 0
        E/WXEntryActivity(14288): onCreate...key:_wxapi_baseresp_errstr  null
        E/WXEntryActivity(14288): onCreate...key:_wxapi_baseresp_openId  null

xxx部分的內容我已經隱掉了,拿到code就能拿到access——token了,后續依據文檔調用即可。

這里你可以把WXEntryActivity的theme弄成透明的,然后再彈起來一個ProgressDialog進行后續的操作(提交你自己的服務器),就能和現有的界面完全融合了。
 

 

三、注意:

3.1 獲取簽名必須用release包。(所以你會發現微信、微博SDK取得值是一樣,所以如果已經有了微博的簽名可以直接拷貝到微信使用)

 

結束

糾結到底是微信登錄還是QQ登錄,,,, 


免責聲明!

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



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