07/27/2026 21:11:44

MSDK-Web 接入指引

一、能力简介

  • 适用于需要在端外实现 MSDK 登录的场景,比如 H5(包括 PC 网页)活动,官网页面;
  • 目前支持的登录渠道包括:Facebook,Google,Apple,Twitter,Wechat,邮箱/手机号,更多的渠道正在持续实现;

二、接入准备

业务侧提供 MSDK Game ID 以及需要接入的渠道的 Client ID (有的渠道也叫作 App ID),示例如下:

MSDK Game ID: 11 (一般业务的 game id 都是 5 位整数,比如 12345) 
各渠道 Client ID: 
    wechat: wx49174c26790800f1
    facebook: 371085970095922
    google: 851769810464-ed9kaaikttfvp7f2kd8qmilogg8us71t.apps.googleusercontent.com
    apple: com.itop.sdk.web
    邮箱/手机: 0afef39eb02d069107db6e02efd71a2c
    twitter: M3ZzRUVncEhKbVJkZ3JjWXg5ZW86MTpjaQ

关于防水墙(邮箱/手机号验证码登录):接入邮箱/手机号验证码登录时,在"发送验证码"环节可以接入防水墙(人机校验)做风控。防水墙选填,但强烈建议接入,可有效降低验证码被恶意刷取的风险。接入方式:业务方先到腾讯云验证码开通服务并创建一个"验证",拿到 CaptchaAppId;在页面里额外引入腾讯云验证码脚本 https://turing.captcha.qcloud.com/TJCaptcha.js

三、部署方式

MSDK 会基于上述信息完成配置,并把编译好的 JSSDK 文件交付给业务,由业务自行部署到自己的域名 / 服务器(或 CDN)上

1. 交付文件清单

MSDK 交付的 SDK 包包含以下文件:

文件 作用 是否必须部署
index.js 业务页面用 <script src> 引入的 JSSDK 主文件
index.html 发起登录/绑定时的中转起始页(业务调用登录后,会先经过它再跳转到对应渠道) 接入 Google / Apple / Facebook / Twitter 等第三方渠道登录时必须;纯邮箱/手机号验证码登录可不部署
login.html 第三方渠道登录或验证码登录完成后,浏览器跳回的回调中转页
msdk_<hash>.js index.html / login.html 两个页面依赖的脚本文件

2. 部署要求

  1. 必须使用 HTTPS。

  2. 目录约定: 建议把 index.jsindex.htmllogin.htmlmsdk_<hash>.js 放在同一目录下,例如 /sdk/。业务自己的接入页可放在任意路径。

    目录结构示例(假设业务域名为 https://your.domain.com):

     https://your.domain.com/
     ├── (业务接入页)              ← 路径不限
     └── sdk/                       ← MSDK 交付产物建议统一放这里
         ├── index.js               ← 业务页面引入的 JSSDK 主文件
         ├── index.html             ← 发起登录/绑定的中转起始页
         ├── login.html             ← 登录完成后浏览器跳回的回调中转页
         └── msdk_<hash>.js         ← 上面两个 html 页面依赖的脚本文件
    
  3. 回调白名单登记(必做,否则会报错 redirect_uri_mismatch): 需把 login.html 的完整地址精确登记到各渠道后台的 redirect_uri 白名单,并同步提供给 MSDK 后台登记。示例:

    | 渠道 | 白名单地址 | 备注 | | --- | --- | --- | | Facebook(4) | https://your.domain.com/sdk/login.html?channelId=4 | - | | Google(6) | https://your.domain.com/sdk/login.html?channelId=6 | - | | Apple(15) | https://your.domain.com/sdk/login.html | 不带 query;默认走标准 GET 回调,若需 Apple 返回姓名/邮箱(scopes)则改用 form_post,需 MSDK 后台单独支持 | | Twitter(9) | https://your.domain.com/sdk/login.html?channelId=9 | - | | Wechat(1) | your.domain.com | 仅按域名匹配,只能添加一个域名 |

    SDK 默认会在回调地址后自动附加 ?channelId=<渠道id>(Apple 除外);登记的白名单地址必须与 SDK 实际发起时的 redirect_uri 完全相同

四、SDK使用方式

支持传统的 HTML + JS 的方式,也支持通过 npm 包引入,但鉴于目前 H5 活动开发场景都是传统方式,所以这里只提供这种方式的使用样例,如果需要 npm 包,可联系 MSDK助手获取。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MSDK Web Sample</title>
    <!-- 引入部署在业务自有域名下的 JSSDK(见"三、部署方式"目录约定,统一放在 /sdk/ 下) -->
    <script src="https://your.domain.com/sdk/index.js"></script>
    <!-- 仅当接入邮箱/手机号验证码登录并需要防水墙时才引入(见"接入准备"中的防水墙说明) -->
    <script src="https://turing.captcha.qcloud.com/TJCaptcha.js"></script>
</head>
<body>
    <h1>MSDK Web Sample</h1>
    <div style="display: flex; flex-direction: column;">
        <div>渠道登录</div>
        <button id="btn-facebook">Facebook</button>
        <button id="btn-google">Google</button>
        <button id="btn-apple">Apple</button>
    </div>
    <script>
        (() => {
            const login = new MSDK.MSDK({
                gameId: 12345,
            });
            function getFieldValue(field) {
                /**
                 * @type {HTMLInputElement}
                 */
                const ele = document.getElementById(field);
                return ele.value;
            }

            // 这个函数由业务自己实现,比如只是简单的检测cookie,或者更严格的请求后端接口验证
            // 这里作为示例简化问题,将登录态存到了localStorage
            function setLoginSecret(secret) {
                localStorage.setItem('MSDK_SECRET', secret);
            }

            document.getElementById('btn-facebook').addEventListener('click', () => {
                login.auth({
                    channelId: 4, // 4: FB, 6: Google, 15: Apple
                    // redirectUri: encodeURIComponent(location.href), // 登录成功之后会跳转回到这个URL,授权码(code)会附加到上面,默认为location.href
                    state: JSON.stringify({xyz: '12345'}), // 这里可以是任意内容,跳转回来之后还能获取到
                });
            });
            document.getElementById('btn-google').addEventListener('click', () => {
                login.auth({
                    channelId: 6, // 4: FB, 6: Google, 15: Apple
                    // redirectUri: encodeURIComponent(location.href), // 登录成功之后会跳转回到这个URL,授权码(code)会附加到上面,默认为location.href
                });
            });
            document.getElementById('btn-apple').addEventListener('click', () => {
                login.auth({
                    channelId: 15, // 4: FB, 6: Google, 15: Apple
                    // redirectUri: encodeURIComponent(location.href), // 登录成功之后会跳转回到这个URL,授权码(code)会附加到上面,默认为location.href
                });
            });

            /**
             * @type {{code?: string; state?: string} | undefined}
             */
            const authRes = login.getAuthResult();
            if (authRes?.code) {
                /**===============================================================================================
                拿到一次性授权码 code 后,有两种换取用户信息的方式:
                + 第一种(推荐):把 code 发送到业务后端,由后端调用 MSDK 后台的 token 换取/校验接口,
                  用 code 换取 openid + token 并校验其有效性。后台接口地址由 MSDK 提供。
                + 第二种:直接在前端调用 login.accessToken({ code, gameId }) 换取 openid + token;
                  这种情况下因为是前端换取,真正需要校验身份时仍需在业务后台调用 MSDK 的 token 校验接口。

                > 注意:code 是一次性的,只有 3 分钟有效期,页面刷新或重复使用都会失效。

                这里为了简化,直接把 code 作为 secret,正式使用时请勿如此!!!
                ================================================================================================**/
                setLoginSecret(authRes.code);
                location.hash = 'logined';
            }
        })();
    </script>
</body>
</html>

五、常见问题

  • 授权页跳回后 code 为空? 检查 login.html 是否已按"三、部署方式"部署到业务域名的 /sdk/login.html
  • 授权页报 redirect_uri_mismatch(如 Google 报 错误 400: redirect_uri_mismatch)? 渠道后台的 redirect_uri 白名单未登记或不匹配。SDK 发起时的 redirect_urihttps://your.domain.com/sdk/login.html?channelId=<渠道id>(第三方渠道登录时含 query),白名单必须登记与之完全相同的完整 URL。
  • 控制台报 sdk/msdk_<hash>.js 404 建议把 msdk_<hash>.jsindex.html / login.html 放在同一目录(如 /sdk/,见"三、部署方式"目录约定);分开部署可能导致按相对路径找不到该文件而 404。
  • accessTokencode invalid code 只能使用一次,页面刷新或重复点按钮都不能重用,getAuthResult() 拿到后要立即消费。

如有问题请联系 MSDK助手。



Copyright © 2026 MSDK.
All rights reserved.

results matching ""

    No results matching ""