1. 程式人生 > >直播APP開發,擴充套件類庫使用者、會話和第三方登入整合

直播APP開發,擴充套件類庫使用者、會話和第三方登入整合

直播APP開發擴充套件類庫使用者、會話和第三方登入整合,允許我將些擴充套件類庫進行開源。原來此類庫的功能只是當前開發專案中的功能,我現將其抽離成可配置使用的擴充套件類庫,以供大家共享。

此類庫主要特點有:

1、可以和第三方登入整合,包括:微信登入、微博登入、QQ登入

2、為客戶端提供了直接可以呼叫的登入介面

3、為服務端提供了直接可以檢測使用者登入態的操作

4、支援token落地、高效快取和分散式的資料庫儲存

5、展示瞭如何開發一個專案級的類庫、包括資料庫配置、翻譯等

溫馨提示:
此擴充套件類庫還在開發完善中,但已有專案在使用,感興趣的同學可以嘗試使用。

##3.8.2 安裝 ###(1)擴充套件包下載 從 

PhalApi-Library 擴充套件庫中下載獲取 User 使用者包,如使用:

$ git clone https://git.oschina.net/dogstar/PhalApi-Library.git

然後把 User 目錄複製到 ./PhalApi/Library/ 下,即:

$ cp ./PhalApi-Library/User ./PhalApi/Library/ -R

###(2)資料庫表匯入 預設下,User類庫會使用預設的資料庫配置,但有追加一些需要用到的表。因此需要匯入以下表:

$ cd /Library/User

$ tree

├── Data

│   ├── user_login_qq.sql

│   ├── user_login_sina.sql

│   ├── user_login_weixin.sql

│   ├── user_session.sql

│   └── user.sql

溫馨提示:
匯入前,可以自行調整表的字首。

###(3)資料庫配置 將 PhalApi-Library/User/Config/dbs.php 裡面的配置拷貝到你的專案配置:

//請將以下配置拷貝到 ./Config/dbs.php 檔案對應的位置中

        //10張表,可根據需要,自行調整表字首、主鍵名和路由

        'user_session' => array(

            'prefix' => 'phalapi_',

            'key' => 'id',

            'map' => array(

                array('db' => 'db_demo'),

                array('start' => 0, 'end' => 9, 'db' => 'db_demo'),

            ),

        ),

###(4)入口註冊

//必須顯式註冊,以便可以讓服務自行初始化

DI()->userLite = new User_Lite();

###(5)其他可選配置

為了體現高效快取的好處,建議先註冊DI()->cache

為了介面更明朗的引數規則說明,建議將下而規則追加到配置檔案./Config/app.php中:

return array(

    /**

     * 應用介面層的統一引數

     */

    'apiCommonRules' => array(

        //其他原來的引數配置

        ...

        //登入資訊

        'userId' => array(

            'name' => 'user_id', 'type' => 'int', 'default' => 0, 'require' => false,

        ),

        'token' => array(

            'name' => 'token', 'type' => 'string', 'default' => '', 'require' => false,

        ),

    ),

###(6)checkApiParams.php的初始化 同樣,需要在checkApiParams.php檔案顯式註冊,才能讓User這個擴充套件類庫完成自我的必要初始化:

//裝載你的介面

DI()->loader->addDirs(array('Demo', 'Library'));

DI()->userLite = new User_Lite();

否則會導致service不存在。

##3.8.3 入門使用 ###(1)對於客戶端 ####(1-1)微信登入 #####1、功能說明 實現通過微信登入,並且首次登入時,自動建立使用者並繫結。

#####2、介面URL /?service=User_User_Login.weixin + 公共引數(免登入態)

#####3、介面引數

引數

必須

預設值

說明

wx_openid

1

微信OPENID

wx_token

1

微信TOKEN

wx_expires_in

1

微信失效時間

#####4、返回結果
#####返回欄位 引數|型別|說明 ---|---|--- info|object|登入成功後的相關資訊 user_id|int|使用者ID token|string|使用者TOKEN is_new|int|是否為首次登入,0不是,1是

#####結果示例

{

    "ret": 200,

    "data": {

        "code": 0,  //0正常登入

        "info": {

            "user_id": 3,  //使用者ID

            "token": "430C0F31FAF1FB1565E4290D1B61185A2408A6DEEA1604C1B5AEB14E44BDF2E0",  //使用者TOKEN

            "is_new": 0   //是否為首次登入,0不是,1是

        },

        "msg": ""

    },

    "msg": ""

}

#####請求示例

/service=User_User_Login.weixin&wx_openid=wx_122348561111&wx_token=ASDF&wx_expires_in=130000000&name=weixinName&avatar=phpunit.png

####(1-2)QQ登入 #####1、功能說明 實現通過QQ登入,並且首次登入時,自動建立使用者並繫結。

#####2、介面URL /?service=User_User_Login.qq + 公共引數(免登入態)

#####3、介面引數

引數

必須

預設值

說明

qq_openid

1

QQ的OPENID

qq_token

1

QQ的TOKEN

qq_expires_in

1

QQ的失效時間

#####4、返回結果
#####返回欄位

引數

型別

說明

info

object

登入成功後的相關資訊

user_id

int

使用者ID

token

string

使用者TOKEN

is_new

int

是否為首次登入,0不是,1是

#####結果示例

{

    "ret": 200,

    "data": {

        "code": 0,  //0正常登入

        "info": {

            "user_id": 3,  //使用者ID

            "token": "430C0F31FAF1FB1565E4290D1B61185A2408A6DEEA1604C1B5AEB14E44BDF2E0",  //使用者TOKEN

            "is_new": 0   //是否為首次登入,0不是,1是

        },

        "msg": ""

    },

    "msg": ""

}

#####請求示例

/service=User_User_Login.weixin&wx_openid=wx_122348561111&wx_token=ASDF&wx_expires_in=130000000&name=weixinName&avatar=phpunit.png

####(1-4)使用者資訊

#####1、功能說明 獲取使用者個人資訊

#####2、介面URL /?service=User_User_Info.getUserInfo + 公共引數

#####3、介面引數

引數

必須

預設值

說明

other_user_id

1

使用者id

#####4、返回結果
#####返回欄位

引數

型別

說明

info

object

登入成功後的相關資訊

user_id

int

使用者ID

username

string

使用者名稱

nickname

string

使用者暱稱

avatar

string

使用者頭像url

#####結果示例

{

    "ret": 200,

    "data": {

        "code": 0,

        "info": {

            "username": "aevit",

            "nickname": "test",

            "avatar": "",

            "user_id": 1

        },

        "msg": ""

    },

    "msg": ""

}

#####請求示例 /service=User_User_Info.getUserInfo&other_user_id=1

###(2)對於服務端 ####(1)溫柔式檢測登入態

$isLogin = DI()->userLite->check();

####(2)強制式檢測登入態

DI()->userLite->check(true);

####(3)更多操作 當需要對使用者進行退出登入時,可以在介面中執行:

DI()->userLite->logout();

當需要為使用者新建一個會話時,可以在介面中執行:

DI()->userLite->generateSession(1); //假設使用者ID為1

當需要為使用者延長登入態有效時間時(預設為一個月),可以在介面進行心跳操作,從而再延長一個月有效時間:

DI()->userLite->heartbeat();

##3.8.4 示例 ###(1)假設在我們的應用的介面中:

<?php

class Api_Test extends PhalApi_Api {

    public function go() {

        Di()->userLite->check(true);

        return 'ok';

    }

}

###(2)先呼叫微信的登入:

/user/?service=User_User_Login.Weixin&wx_openid=wx_122348561111&wx_token=ASDF&wx_expires_in=130000000&name=weixinName&avatar=phpunit.png

返回:

{

    "ret": 200,

    "data": {

        "code": 0,

        "info": {

            "user_id": 94,

            "token": "8509BE9C80B67009C559E6A2C4B88E02C885DA6B9FEFFC2DA080999377D08FBF",

            "is_new": 0

        },

        "msg": ""

    },

    "msg": ""

}

###(3)再呼叫我們應用 的介面:

/user/?service=Test.go&user_id=94&token=CE1218493B3A441FCF630E24E98FD3640133EBA6D734C90A620A11C07CE35323

返回:

{"ret":200,"data":"ok","msg":""}

###(4)未登入下,返回:

{"ret":401,"data":[],"msg":"\u975e\u6cd5\u8bf7\u6c42\uff1auser not login"}

以上就是直播APP開發中擴充套件類庫使用者、會話和第三方登入整合,詳細的例項說明。