android掃描網頁二維碼進行網頁登入

來源:互聯網
上載者:User

標籤:使用者   attr   ack   toast   ...   網路請求   首頁   儲存   jar包   

轉載請標明出處:
http://www.cnblogs.com/dingxiansen/;
本文出自:丁先森-部落格園

周六和朋友去網吧開黑,開機開啟TGP,朋友那邊開始輸入帳號密碼,我看了他一眼low逼,現在誰還手動輸入,手機掃一掃就好了,然後開啟手機app掃一掃登入成功,美滋滋。其實我們現在不難發現,很多的網頁為了便捷登入除了第三方程式登陸,就是二維碼掃描登入,比如某寶,某魚等等,其實我認為二維碼掃描不只是為了快捷登入,讓人們省了輸入帳號密碼的麻煩,還有一個是為了推廣他們的app,不得不說這種也可以當成是推廣app的一種手段,好了進入正題。

先說一下實現了什麼效果,app掃描php寫的頁面(也可以java網頁,都一樣的思路和步驟),掃描成功後跳轉進入首頁,光和你們這麼說,肯定有人說了,沒圖說個jb,這就出來一個問題,很多人寫部落格,看這標題特別符合自己的問題,然後興緻勃勃的進來了,一看,我去...尼瑪全是代碼,也不知道是不是我的那種問題和想要的那種效果,心裡沒譜啊,好了,:


別糾結這頁面咋這麼醜,沒寫樣式,說一下我實現的思路哈,首先在資料庫中建立一個表用來儲存掃碼登入資訊(id,username,randomnum),這三個分別是id自增長,使用者名稱,隨機數——>點擊產生二維碼,產生隨機數,可以用http://qr.topscan.com/api.php?text=" + data,可以使用這個產生二維碼,當然你也可以自己寫,這個操作就相當於某寶的那個二維碼登入框,產生二維碼之後,這個時候做了一個ajax請求操作,在剛才建立的那個表中插入資料,把產生的隨機數儲存到表中,這個時候username為空白——>開啟app進行掃碼操作,app掃描完成之後,進行網路請求,把你掃描到的二維碼當成參數,做修改操作,修改username為當前你的使用者名稱——>網頁使用每個幾秒鐘請求另外一個介面,根據隨機數判斷當前username是否為空白,如果不為空白(剛才掃碼修改了username所以不為空白)jquery操作做跳轉操作,這個就是完整的流程。

說的簡單的就是,產生二維碼的時候只存入隨機數(或者你自訂的隨便資訊),使用app掃碼之後根據隨機數把使用者名稱存進去,網頁每隔5s請求另外一個介面時,如果username不為空白好了跳轉操作。大體就是這樣的,有可能大神的實現也不是這樣的,我就是把我理解的說出來,如果你們有另外的實現方法也可以在下邊評論告訴我,共同學習,下面貼代碼了。

部分php(新手可能不太規範,勿噴)login.php代碼:

else if ($_REQUEST[‘act‘] != ‘‘ && $_REQUEST[‘act‘] == ‘codeCreate‘) {    //if userName為空白--->表示網頁第一次點擊建立產生    //網頁產生二維碼操作,同時添加資料到表中    if ($_REQUEST[‘userName‘] != ‘‘) {//不為空白的時候表示修改        $userName = $_REQUEST[‘userName‘];        $randomNum = $_REQUEST[‘randomNum‘];        echo "掃碼成功";        $sql = "update UserCodeLogin set username=‘$userName‘ WHERE randomnum=‘$randomNum‘";//        mysqli_query($conn, $sql);//插入成功    } else {//為空白的時候表示是建立二維碼        //產生隨機數        $randomNum = "";        for ($i = 0; $i < 5; $i++) {            $randomNum .= rand(0, 9);        }        echo $randomNum;//顯示產生的隨機數        $sql = "insert into UserCodeLogin(username,randomnum) VALUES (‘‘,‘$randomNum‘)";//        mysqli_query($conn, $sql);//插入成功    }    mysqli_query($conn, $sql);//插入成功} else if ($_REQUEST[‘act‘] != ‘‘ && $_REQUEST[‘act‘] == ‘codeSelect‘) {//根據隨機數查詢表中的username是否為空白    $randomNum = $_REQUEST[‘randomNum‘];    if ($randomNum == ‘‘ && empty($randomNum)) {    } else if ($randomNum != ‘‘) {        $sql = "select username from UserCodeLogin where randomnum=‘$randomNum‘";        $result = mysqli_query($conn, $sql);//        print_r($result);        if (mysqli_num_rows($result) > 0) {            while ($row = mysqli_fetch_assoc($result)) {                $userName = $row[‘username‘];            }            if ($userName == ‘‘ && $userName == null) {                //說明用戶端還未掃碼修改過            } else if ($userName != ‘‘) {                //用戶端掃碼完成                //跳轉頁面                echo "用戶端掃碼成功,跳轉中...";            }        }    }

 

然後是login.html

<html><head>    <title>這是首頁</title></head><script type="text/javascript" src="js/jquery-1.12.3.js"></script><body><script type="text/javascript">    var type = 1;    var randomNum;    function clickBtn() {        $.post("../login.php?act=codeCreate&userName=",            function (data) {                alert("-------random:" + data);                randomNum = data;                $("#img").attr(‘src‘, "http://qr.topscan.com/api.php?text=" + data);            });        type = 2;    }    function time() {        $.post("../login.php?act=codeSelect&randomNum=" + randomNum,            function (data) {                if (data) {                    alert(data);                    $(location).attr(‘href‘, ‘index.html‘);                } else {                }            })    }    setInterval("time()", 4000);</script><button type="submit" id="btn" onclick="clickBtn()"> 點擊產生二維碼</button><!--src="https://www.baidu.com/img/baidu_jgylogo3.gif"--><img id="img" style="visibility: visible" width="250px"/></body></html>

 

上邊就是服務端的部分代碼,放心有源碼,下邊寫完一起給

下面開始android了關於android的掃碼第三方開源的有挺多的,這裡使用的是Zing,他可以實現的挺多的二維碼,條碼,產生二維碼。。。

建類庫,導jar包,掉用,你們可以直接拿過這個類庫去,然後自己改需要的樣式。

這個圖是目錄結構

 

 

主要的就是mainActivity.java裡邊的調用了

掃碼成功之後的回掉:

@Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        // 掃描二維碼/條碼回傳        if (requestCode == REQUEST_CODE_SCAN && resultCode == RESULT_OK) {            if (data != null) {                String content = data.getStringExtra(Constant.CODED_CONTENT);                result.setText("掃描結果為:" + content);                /*執行網路請求*/                String username = "dingchao";                volleyScanCodeLogin(content, username);                Log.e("aaa","volleyScanCodeLogin。。。3");            }        }    }
volleyScanCodeLogin()方法:
/**     * 網路請求     * 使用Volley進行網路請求     *     * @param content  攜帶的隨機數和使用者名稱     * @param username 使用者名稱     */    private void volleyScanCodeLogin(final String content, final String username) {        Log.e("aaa","volleyScanCodeLogin。。。1");        final RequestQueue mQueue = Volley.newRequestQueue(MainActivity.this);        StringRequest stringRequest = new StringRequest(Request.Method.POST, "http://你自己的目錄位址/webcodelogin/login.php", new Response.Listener<String>() {            @Override            public void onResponse(String s) {                Log.e("aaa","volleyScanCodeLogin。。。2");                Toast.makeText(MainActivity.this, "" + s, Toast.LENGTH_SHORT).show();            }        }, new Response.ErrorListener() {            @Override            public void onErrorResponse(VolleyError volleyError) {            }        }) {            @Override            protected Map<String, String> getParams() throws AuthFailureError {                Map<String, String> map = new HashMap<String, String>();                map.put("act", "codeCreate");                map.put("userName", username);                map.put("randomNum", content);                return map;            }        };        mQueue.add(stringRequest);/*請求資料*/    }

上邊那些就是主要的工程代碼,然後源碼我打包放到百度雲端硬碟中,連結:https://pan.baidu.com/s/1slsQM2D 密碼:gdyp

 

如有缺點或不足請不吝指教,如果整合有問題,請留言,或者郵箱[email protected]

 

android掃描網頁二維碼進行網頁登入

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.