-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[New Feature] 在启动器显示来自第三方 Yggdrasil 验证服务器的公告 #1
Comments
考虑到不同启动器的UI布局都不一样,我认为应该需要考虑好公告的展示形式。 不同等级的公告也许可以用不同的展示方式?例如普通公告就不会展示完,只显示个大概,点击后可以查看完整。警告类公告可以显示完整。严重类公告可以在启动器启动对应账户的情况下弹窗显示,但用户可以关掉并不再显示。 以及最重要的,该功能应该做成用户可选订阅,还是强制订阅? |
我建议对公告添加一个 id 标识符,用以在启动器客户端处理展示一次,后续不再展示。 |
公告展示形式可以由启动器自行设计,保证公告内容能有效传达到用户就可以。上面给出的概念设计只是提供一个设计思路。
我认为公告这种东西就应该是强侵入性的,才能达到「有效通知用户」的目的。若重要公告不能有效地传达给用户,导致用户无法启动游戏 / 无法登录服务器,不仅会给用户带来困扰,也会给第三方 Yggdrasil 验证服务器造成一定的客服压力。 对于严重程度不高的公告(例如服务器活动公告)可以使用较为温和的方式展示公告,但对于严重程度较高的公告,应通过弹窗等强侵入性的方式去通知用户,以确保公告能有效传达到用户。 还是那句话:公告展示形式可以由启动器自行设计,保证公告内容能有效传达到用户就可以。
应该强制订阅,如果做成可选订阅的话也应该默认订阅。否则可能会因为用户没有主动订阅公告而导致重要公告无法有效传达给用户,与该功能的设计初衷不符。
公告标识符已经有了,现在 LittleSkin 的方案里面公告对象中
考虑增加一个 |
@tnqzh123 比如什么情况下需要弹窗通知,什么情况下需要展示信息。
启动器端并不直接涉及 皮肤站 及 Yggdrasil 服务的业务,并不能直接理解各个级别到底代表什么。 既然是规范,就应该讲各个规则落到实际。 |
我觉得这三个值的意思已经相当明确、相当语义化了:
如果有人在知道
这种事情如果你让我来说,那就是所有公告按 每个启动器的情况都不一样,比如:
你也说了「各个启动器的风格,UI 设计均不相同,可能无法按照同样的规则设计 UI 展示内容」,没办法写一个统一的设计规范然后让所有启动器都必须遵守,这不现实。 所以我希望「该在什么时机展示公告、用何种方式展示公告」可以由启动器自己设计,只要按照「保证公告内容能有效传达到用户」的原则来就可以。我在上面也有建议启动器应该在什么场景下展示公告,可以参考下。 如果一定要我说我想让启动器做成什么样,我只能说:
|
或许可以在启动游戏时弹出公告? |
我认为这个时机有点不太合适,因为有些公告会需要用户在启动游戏前阅读(比如最开始提到的「由于近期 MCBBS 源下线导致 HMCL 无法更新 authlib-injector 导致无法启动游戏,这种问题如何解决」的公告,就需要用户先在启动器设置内修改下载源再启动游戏),而且在游戏启动时弹出的话,对于原版这种启动速度较快的客户端,可能用户还没看完公告游戏就进入主界面了,感觉可能会干扰到用户进行游戏。 我认为最好还是在游戏启动前就向用户展示公告,或者提供一个指引让用户去查看公告。 当然,最后启动器采用什么样的设计,还是由启动器开发者说了算。 |
最终的展现形式和场景仍然需要启动器开发者自行决定,但是标准可以为此提供一些建议。例如“严重级别”字段,我们可以定义每个严重级别,然后建议验证服务器在什么情况下使用什么严重级别,启动器开发者则应该了解什么级别代表什么意思,自行选定展现形式,最后达到”对不同的启动器,同一个严重级别可以达到类似的提示效果“的目的。 我倒是认为部分颗粒度可以下放到具体的运营者,如”此公告确认前阻止游戏启动“,”此公告应醒目(弹窗)展示“,未必要用到”严重级别“。 同时还有一点,这类公告是否需要避免滥用?对于普通的服务器活动使用这类公告是否合适?验证服务器现在已经是集合服务器玩家账号管理,皮肤管理(可能还有公告管理)的综合解决方案了(甚至有些还是公用的,参见LittleSkin)。再往后发展可能得给BSS加统一通行证的功能了2333 如果要求启动启动器时就弹出验证服务器公告,感觉验证服务器有点过于侵入性了(管得太多了)…… |
不同公告类型的表现可以后续继续讨论,至于强制阻止游戏启动,这个侵入性太大了,会被用户骂的……
说白了,所有直接指明 UI 的样式,都没有任何意义 关于 |
如果验证服务器只支持部分属性(比如只支持 同时添加两种格式的文本感觉有点麻烦…如果启动器能自行把 Markdown 的格式 escape 掉会更好 |
避免滥用这方面感觉不是启动器可以做到的,毕竟不可能针对每个第三方 Yggdrasil 验证服务器都做审计,如果要维护一个 blocklist 什么的也还是太麻烦了。
我认为是合适的,既然服务器已经自建 Yggdrasil 验证服务器了,那验证服务器的公告也约等于服务器公告了。而且对提升服务器玩家活跃度和转化率方面应该会有一定的帮助。 |
我的意思是明确这类公告“应该用来干什么”,防止使用者在无意识的情况下出现类似“运营商用0级短信推广告”这种情况 |
那这就不能叫「避免 滥用」,应该叫「规范公告发布者的行为」,但很明显只靠一纸规范是做不到的。规范只相当于一种君子协定,实际公告发布者会往公告里面塞什么东西,不论是规范起草者还是启动器都没法管——不然国产 GPU 现在已经超 A 赶 N 了。 我们当然可以在规范中添加这方面的说明(事实上,我也在稍早一些的 comment 中说明了 |
当然。所以我会强调“无意识的情况”。 |
我希望各位当前可以先集中精力完善技术规范(即这个 API 该怎么设计),至少先把公告 API 的技术标准推动到一个可用的程度,这才是最重要的。 至于「启动器该如何展示公告」、「如何规范公告发布者的行为」,如果实在纠结这方面内容,可以以后再聊。 |
内容 title | contenttitle标题为纯文本 等级 severity通过severity字段,将公告分为三个等级: 紧急(fatal):尽可能弹窗显示,会中断用户操作。用户必须要点击确认后,才可进行下一步操作。 tips: 对于不能添加多个第三方验证账号的启动器,可启动时获取到公告就弹出显示;对于可以同时登录多个第三方验证账号的,可以只在启动游戏时弹出并阻止游戏启动。 警告(warning ):醒目提醒,与紧急fatal相比,除了可以弹窗提示,但可以不中断用户操作。 tips: 如果是可登录多个第三方验证账号的启动器,相比fatal,他不会中断游戏的启动流程。 提醒(info):不能中断用户操作,只显示标题,可点击或者鼠标指针放上去后显示完整的公告。 其他信息: 鉴权请求该接口时带上Bearer accesstoken的鉴权Header,用于鉴权,可以针对不同用户发送特定的消息。 公告列表能够在UI上显示具体的公告列表,将所有公告聚合起来,用户可自行点击查看。 tips: 公告的数量目前暂不做上限。 显示内容在公告列表以及公告内容中,需要显示以下提示信息: xxx为第三方Yggdrasil源的meta信息中提供的名称。 其他的自行发挥。 范例Json如下:
C#例子
|
获取信息时能否支持按照上一次已经展示的公告的 ID 查询?这样可以减小网络通讯的数据量 |
考虑到可能存在针对特定用户的通知,不建议这么做 |
没看懂,麻烦细说。 |
即,按照原有的格式,每次服务器响应时要提供完整的公告信息。
|
关于在正文中使用Markdown有些不同意见: 我们或许不能假设所有启动器都有能力渲染富文本(如:命令行启动器,虽然非常少见),在弹窗中引入图片和样式对某些启动器来说也有可能是一个开发负担(如:PCL2的弹窗系统据我所知并不支持使用图片,那个弹窗的大小也塞不下什么图片,类似的情况也存在于SCL),并有微小的可能带来一些安全问题(引入了外源文件)。 我认为UTF-8编码的纯文本是更合适的,作为展示富文本的替代方案,或许可以考虑增加一个可选的"more_info"字段,内容为一个URL,用于跳转到公告全文。 |
用最后一次查询公告的时间戳更好吧? 也可以采用最后一条公告的发布时间的时间戳,这样方便 CDN 进行缓存。
在现在的网络环境下,我不认为这几 KB 的流量会造成什么负担。 公告 API 当然可以实现这个功能,但我觉得这个需求有点没事找事,不应该成为强制性的标准。
公告是有时效性的,已经过期了的公告我认为不应该再展示给用户,应该由验证服务器在数组中删除。 |
我认为还要 api 适配多语言的功能 |
Blessing Skin Server 一直支持多语言。只要在向 Yggdrasil 验证服务器发起请求时带上 我建议采用后者的方式,这样方便公告内容被 CDN 缓存。 |
关于语言代码,我更建议使用RFC 1766,其中语言部分使用ISO 639-1,可选的变体部分使用ISO 3166-1 alpha-2 |
过期的公告显然应该移除,因此启动器不能只检索新的公告,应该拉取完整的网络列表(本地中的某些公告可能已经移除了)并重新创建本地的公告列表,最后再检查“是否阅读过”等来决定后续情况,所以这个没太大必要。 |
发散一下,如果请求时带上令牌,可以直接变成针对用户的消息中心hh |
我在思考,如果有多个验证服务器该怎么显示? |
首帖好像有一部分回答了这个问题
|
我希望各位当前可以先集中精力完善技术规范(即这个 API 该怎么设计),至少先把公告 API 的技术标准推动到一个可用的程度,这才是最重要的。
至于「启动器该如何展示公告」、「如何规范公告发布者的行为」,如果实在纠结这方面内容,可以以后再聊。
检查项
您是什么类型的用户
第三方网站管理 / 负责人(MC 相关的)
利益相关:LittleSkin 创始人 & 产品经理、Blessing Skin Team 成员
请简单的说一下您的想法
如题,在启动器中显示来自第三方 Yggdrasil 验证服务器的公告。
它能解决什么样的问题/带来什么样的帮助
如果第三方 Yggdrasil 验证服务器有重要公告,则可以通过启动器将公告发送给每一个用户,并且可以确保用户是能够收到通知的。
例如,由于近期 MCBBS 源暂时下线,HMCL 无法正常下载和更新 authlib-injector,当玩家通过外置登录启动游戏时会报错「无法访问登录服务器,账户信息刷新失败」——即使这个问题并不是由 Yggdrasil 验证服务器导致的。LittleSkin 针对这个问题早已在网站内发布了公告,但我们在用户交流群内仍然收到了大量的此类问题相关的咨询。
此外,目前许多服务器使用 Blessing Skin Server 自建皮肤站并将其作为服务器专用的 Yggdrasil 验证服务器,如启动器支持显示来自第三方 Yggdrasil 验证服务器的公告,服务器管理员就可以将服务器的公告方便且高效地发送给每一个玩家,而不需要玩家主动通过 QQ 群或论坛等方式去了解服务器最新公告。
期望的结果
在启动器中显示来自第三方 Yggdrasil 验证服务器的公告
弹出公告的时机以及公告的显示位置可以由启动器自行指定,我建议在以下时机显示:
显示公告时应向用户明确表示这些公告是「来自 Yggdrasil 验证服务器的公告」,以免用户将第三方 Yggdrasil 验证服务器的公告误认为是启动器开发者发布的公告。最好能直接说明公告是来自哪个 Yggdrasil 验证服务器,如「来自 LittleSkin 的公告」,以方便用户区分。
参考概念设计(以 HMCL 为例):
点击展开 / 关闭
(我在 Snipaste 里截完图直接随手画的,我知道很丑,放这里只是提供一个设计思路,「明确说明是来自验证服务器的公告」忘记画了,大家知道就行)
是否有对这个方案的相关链接?
目前只有 LittleSkin 实现了获取站点公告的 API,但 API 文档尚未撰写完成,完成后会在本 Issue 内更新。
在此先简述一下目前 LittleSkin 的方案:
点此展开 / 关闭
首先,第三方 Yggdrasil 验证服务器在 API 元数据 中添加一条公告链接(
meta.links.announcement
):启动器通过自身的 HTTP 库向 API 元数据中
meta.links.announcement
中的链接发起 GET 请求,响应体为 JSON 格式,内容示例如下:JSON 最外层为一个数组,数组中每个对象都表示一则公告。如数组内容为空,则表明 Yggdrasil 验证服务器当前没有公告。
公告对象中应包含以下字段:
id
字段表示公告的 ID,以 32 位有符号 UUID 表示color
字段表示 LittleSkin 网站中显示该公告的 div 的底色,LittleSkin 通过颜色标识公告的严重程度,取值为 Bootstrap 4 的 颜色 的别名,具体取值及颜色代码包括:red
(danger
的别名),#d33242
yellow
(warning
的别名),#f9c000
green
(success
的别名),#40a73f
cyan
(info
的别名),#3ba2b9
blue
(primary
的别名),#2f7cff
gray
(secondary
的别名),#6d757d
black
,#000000
white
,#ffffff
light
,#f8f9fa
dark
,#353a40
title
字段为公告标题,纯文本content
字段为公告内容,可能包含 HTML 标签priority
字段为公告的优先级,优先级越高的公告显示在越上方,同优先级的情况下根据color
字段的取值,red
>yellow
> others,同color
的情况下发布时间越晚的公告显示在越上方severity
字段为公告的严重程度(重要性),取值及含义分别为:fatal
:n. A fatality; an event that leads to death.warning
:n. Something spoken or written that is intended to warn.fatal
那么严重,但仍然比较重要,需要传达给每一个用户,一般不至于导致特别严重的后果,应用场景例如服务器维护公告info
:n. (informal) information.expand
字段表示该公告是否默认展开(LittleSkin 的站点公告是折叠式的)timestamp
字段为公告的发布时间,以 Unix 时间戳的形式表示注意:先前在群内讨论时针对「使用
color
字段标识公告严重程度」、「content
字段的值应该包含什么样的内容(纯文本、HTML 或 Markdown)」等特性存在争议,应在本 Issue 内讨论完善。authlib-injector 有一个 proposal 与本 Issue 描述的功能类似,但更简单。考虑到第三方 Yggdrasil 验证服务器可能同时会有不止一条公告,且可能有展示富文本或优先级 / 严重程度的需求,实际应用场景中该 proposal 无法完全满足需求。
附注
注意:先前在群内讨论时针对 LittleSkin 目前使用的方案中「使用
color
字段标识公告严重程度」、「content
字段的值应该包含什么样的内容(纯文本、HTML 或 Markdown)」等特性存在争议,应在本 Issue 内讨论完善。The text was updated successfully, but these errors were encountered: