跳到主要内容

登录管理

小游戏登录

小游戏可以通过芒果开放平台提供的登录能力方便地获取芒果提供的用户身份标识,快速建立小游戏内的用户体系。

效果标准

登录时要流畅,无卡顿。

1、登录成功,直接进入游戏。

2、登录失败,建议显示一个"登录"按钮,点击"登录"按钮,重新进行登录。

登录流程

开发平台提供了两种方案获取用户唯一身份标识方案,若您在游戏中无需用到玩家昵称和头像,建议使用方案二以减少用户授权弹窗,提高用户留存率。

方案一

该方案开发者需要接入mgtv.getSettingmgtv.authorizemgtv.getUserProfile接口。用户授权登录后,才能获取用户唯一身份标识及其他信息,但会延迟操作,阻塞流程,易致用户流失。

流程图如下:

登录流程方案一

示例代码(参考)


function loginMgtv(success_, fail_) {
let isLogin = mgtv.isLogin();
if (!isLogin) {
mgtv.login({
success(res) {
this.getUserInfo(success_, fail_);
},
fail(res) {
console.log("login fail:", JSON.stringify(res));
fail_ && fail_(res);
}
});
} else {
this.getUserInfo(success_, fail_);
}
}

function getUserInfo(success_, fail_) {
mgtv.getSetting({
success(res) {
console.log("getSetting:" + JSON.stringify(res.authSetting));
if (!res.authSetting['scope.userProfile']) {
mgtv.authorize({
scope: 'scope.userProfile',
success() {
console.log('授权成功');
mgtv.getUserProfile({
success(res) {
console.log("getUserProfile success:", JSON.stringify(res));
//注意查看返回的值 res.data
success_ && success_(res.data);
},
fail(res) {
fail_ && fail_(res);
}
});
},
fail(res) {
fail_ && fail_(res);
}
});
} else {
console.log('授权成功');
mgtv.getUserProfile({
success(res) {
console.log("getUserProfile success:", JSON.stringify(res));
//注意查看返回的值 res.data
success_ && success_(res.data);
},
fail(res) {
fail_ && fail_(res);
}
});
}
},
fail(res) {
fail_ && fail_(res);
}
});
}

方案二

框架版本1.3.3起支持新功能,旧版本需用方案一兼容。此方案开发者需要接入mgtv.getUserUUID,无需用户授权登录,可快速获取用户唯一身份标识,不影响用户操作,降低用户流失。但获取其他用户信息,需用户适时授权。如果是内购游戏建议使用方案一,否则在调起支付时,会强制进行一次授权。

流程图如下:

登录流程方案二

示例代码(参考)

function compareVersion(v1, v2) {
v1 = v1.split('.');
v2 = v2.split('.');
const len = Math.max(v1.length, v2.length);
while (v1.length < len) {
v1.push('0');
}
while (v2.length < len) {
v2.push('0');
}
for (let i = 0; i < len; i++) {
const num1 = parseInt(v1[i]);
const num2 = parseInt(v2[i]);
if (num1 > num2) {
return 1;
} else if (num1 < num2) {
return -1;
}
}
return 0;
}


function getUserInfo(success_, fail_) {
mgtv.getSetting({
success(res) {
console.log("getSetting:" + JSON.stringify(res.authSetting));
if (!res.authSetting['scope.userProfile']) {
mgtv.authorize({
scope: 'scope.userProfile',
success() {
console.log('授权成功');
mgtv.getUserProfile({
success(res) {
console.log("getUserProfile success:", JSON.stringify(res));
//注意查看返回的值 res.data
success_ && success_(res.data);
},
fail(res) {
fail_ && fail_(res);
}
});
},
fail(res) {
fail_ && fail_(res);
}
});
} else {
console.log('授权成功');
mgtv.getUserProfile({
success(res) {
console.log("getUserProfile success:", JSON.stringify(res));
//注意查看返回的值 res.data
success_ && success_(res.data);
},
fail(res) {
console.log("getUserProfile fail:", JSON.stringify(res));
fail_ && fail_(res);
}
});
}
},
fail(res) {
fail_ && fail_(res);
}
});
}

function loginMgtv(success_, fail_) {
let isLogin = mgtv.isLogin();
if(!isLogin) {
mgtv.login({
success(res) {
const deviceInfo = mgtv.getDeviceInfo();
//比较版本,如果要测试小于1.3.3的版本的逻辑,直接把isSupport赋值false就可以测试
const isSupport = this.compareVersion(deviceInfo.frameworkVersion, "1.3.3") >= 0;
if (isSupport) {
const userUUID = mgtv.getUserUUID();
//下面的逻辑,自行处理
success_ && success_({ uuid: userUUID });
} else {
this.getUserInfo(success_, fail_);
}
},
fail(res) {
console.log("login fail:", JSON.stringify(res));
fail_ && fail_(res);
}
});
} else {
const deviceInfo = mgtv.getDeviceInfo();
//比较版本,如果要测试小于1.3.3的版本的逻辑,直接把isSupport赋值false就可以测试
const isSupport = this.compareVersion(deviceInfo.frameworkVersion, "1.3.3") >= 0;
if (isSupport) {
const userUUID = mgtv.getUserUUID();
//下面的逻辑,自行处理
success_ && success_({ uuid: userUUID });
} else {
this.getUserInfo(success_, fail_);
}
}
}