mui-OAuth模块管理客户端的用户登录授权验证功能,允许应用访问第三方平台的资源。

获取登录授权认证服务列表:

void plus.oauth.getServices( successCB, errorCB );

登录授权认证服务操作失败回调函数(errorCB ):

void AuthErrorCallback(error){
    // error: ( Exception ) 必选 操作失败错误信息
    // error.code - 表示错误代码; error.message - 错误描述信息;
}

获取登录授权认证服务成功回调(successCB):

void ServicesSuccessCallback( services ) {  
    //services: ( Array[ AuthService ] ) 必选 运行环境支持的登录授权认证服务列表
    //运行环境支持的登录授权认证服务列表数组,可通过services.length获取服务列表的数目。 
    //如果当前运行环境没有支持的登录授权认证服务,则返回空数组。
 }

AuthService对象用于表示登录授权认证服务,用于向系统进行登录授权认证操作。

//登录授权认证服务对象
interface plus.oauth.AuthService {
    //登录授权认证服务标识
    attribute String id;
    //描述
    attribute String description;
    //授权认证结果数据,值为"undefined"则表示未进行授权认证或者是授权认证失败
    attribute AuthInfo authResult;
    //登录授权认证用户信息,如果值为"undefined"则表示未获取过用户信息
    attribute UserInfo userInfo;
    //登录授权认证扩展信息
    attribute JSON extra;

    // Methods
    function void login( successCallback, errorCallback, options );
    function void logout( successCallback, errorCallback );
    function void getUserInfo( successCallback, errorCallback );
    function void addPhoneNumber( successCallback, errorCallback );
}

interface plus.oauth.AuthInfo {
    attribute String openid;
    attribute String access_token;
    attribute String expires_in:
    attribute String refresh_token;
    attribute String scope;
}
interface plus.oauth.UserInfo {
    attribute String openid;
    attribute String headimgurl:
    attribute String nickname;
    attribute String email;
    attribute String phonenumber;
    attribute String sex;
    attribute String province;
    attribute String city;
    attribute String country;
}

登录授权认证服务操作成功回调函数:

void AuthSuccessCallback( event ) {
      // event: ( JSON ) 必选 登录授权认证服务操作回调事件参数
       // event.target - 表示登录授权认证服务对象,
       // 可以通过此对象的authResult、userInfo属性来获取操作结果信息。
}

example

// 登录操作
function authLogin(){
    var s = auths[0];
    if ( !s.authResult ) {
        s.login( function(e){
            // 获取登录操作结果
            var result = e.target.authResult;
            alert( "登录认证成功:"+JSON.stringify(result) );
        }, function(e){
            alert( "登录认证失败!" );
        }, {} );
    }
}

登录授权认证服务操作失败回调函数同上AuthErrorCallback(error)

示例代码

    //判断是否安装客户端
    var appIsInstalled = function(id) {
        if (id === 'qihoo' && mui.os.plus) {
            return true;
        }
        if (mui.os.android) {
            var main = plus.android.runtimeMainActivity();
            var packageManager = main.getPackageManager();
            var PackageManager = plus.android.importClass(packageManager)
            var packageName = {
                "qq": "com.tencent.mobileqq",
                "weixin": "com.tencent.mm",
                "sinaweibo": "com.sina.weibo"
            }
            try {
                return packageManager.getPackageInfo(packageName[id], PackageManager.GET_ACTIVITIES);
            } catch (e) {}
        } else {
            switch (id) {
                case "qq":
                    var TencentOAuth = plus.ios.import("TencentOAuth");
                    return TencentOAuth.iphoneQQInstalled();
                case "weixin":
                    var WXApi = plus.ios.import("WXApi");
                    return WXApi.isWXAppInstalled()
                case "sinaweibo":
                    var SinaAPI = plus.ios.import("WeiboSDK");
                    return SinaAPI.isWeiboAppInstalled()
                default:
                    break;
            }
        }
    }
    //第三方登录
    var authBtns = ['qihoo', 'weixin', 'sinaweibo', 'qq']; //配置业务支持的第三方登录
    var auths = {};
    var oauthArea = doc.querySelector('.oauth-area');
    plus.oauth.getServices(function(services) {
        for (var i in services) {
            var service = services[i];
            auths[service.id] = service;
            if (~authBtns.indexOf(service.id)) {
                var isInstalled = appIsInstalled(service.id);
                var btn = document.createElement('div');
                //如果微信未安装,则为不启用状态
                btn.setAttribute('class', 'oauth-btn' + (!isInstalled && service.id === 'weixin' ? (' disabled') : ''));
                btn.authId = service.id;
                btn.style.backgroundImage = 'url("images/' + service.id + '.png")'
                oauthArea.appendChild(btn);
            }
        }
        $(oauthArea).on('tap', '.oauth-btn', function() {
            if (this.classList.contains('disabled')) {
                plus.nativeUI.toast('您尚未安装微信客户端');
                return;
            }
            var auth = auths[this.authId];
            var waiting = plus.nativeUI.showWaiting();
            auth.login(function() {
                waiting.close();
                //plus.nativeUI.toast("登录认证成功");
                auth.getUserInfo(function() {
                    var name = auth.userInfo.nickname || auth.userInfo.name;
                    plus.nativeUI.toast(name+"登录认证成功");
                }, function(e) {
                    plus.nativeUI.toast("获取用户信息失败:" + e.message);
                });
            }, function(e) {
                waiting.close();
                plus.nativeUI.toast("登录认证失败:" + e.message);
            });
        });
    }, function(e) {
        oauthArea.style.display = 'none';
        plus.nativeUI.toast("获取登录认证失败:" + e.message);
    });

参考: http://www.html5plus.org/doc/zh_cn/oauth.html#plus.oauth.AuthOptions

你可能感兴趣的:(mui)