客户端登录方法及系统、客户端、介质、计算设备与流程

文档序号:25437451发布日期:2021-06-11 21:55阅读:83来源:国知局
客户端登录方法及系统、客户端、介质、计算设备与流程

本公开的实施方式涉及信息处理领域,更具体地,本公开的实施方式涉及一种客户端登录方法及系统、客户端、介质、计算设备。



背景技术:

本部分旨在为权利要求书中陈述的本公开的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。

相关技术中,用户使用的主客户端中可能会关联一个或多个子客户端,能够通过主客户端调用并运行所述一个或多个子客户端中的任意之一。在通过主客户端调用并运行某一个子客户端之前,需要该子客户端完成登录。然而,上述处理中,用户在每次登录所述主客户端中的某一个子客户端时均需要输入账号及其对应的密码才可以完成登录,这样就会造成登录处理的效率较低的问题。



技术实现要素:

本公开期望提供一种客户端登录方法及系统、客户端、介质、计算设备,以至少解决上述技术问题。

本公开实施例的第一方面提供一种客户端登录方法,所述方法包括:

在目标子客户端响应于主客户端的启动指令完成资源加载的情况下,所述主客户端获取所述目标子客户端对应的授权码;其中,所述目标子客户端为所述主客户端相关联的n个子客户端中之一,n为大于等于1的整数;所述目标子客户端根据所述授权码获取用户身份信息;

所述主客户端将所述授权码发送至所述目标子客户端;

在所述目标子客户端基于所述用户身份信息在第一服务器登录成功的情况下,所述主客户端在目标展示区域内展示所述目标子客户端的登录态;其中,所述第一服务器为所述目标子客户端运行时所关联的服务器。

在本公开的一个实施例中,所述主客户端获取所述目标子客户端对应的授权码,包括:

所述主客户端在目标展示区域内展示所述目标子客户端的授权页面;

所述主客户端响应于针对所述目标子客户端的授权页面中的目标按键的操作,获取所述目标子客户端对应的授权码。

在本公开的一个实施例中,所述主客户端获取所述目标子客户端对应的授权码,包括:

所述主客户端从第二服务器获取所述目标子客户端对应的授权码;其中,所述第二服务器为所述主客户端运行时所关联的服务器。

本公开实施例的第二方面提供一种客户端登录方法,所述方法包括:

在目标子客户端响应于主客户端的启动指令完成资源加载的情况下,所述目标子客户端获取所述主客户端发送的授权码;其中,所述目标子客户端为所述主客户端相关联的n个子客户端中之一,n为大于等于1的整数;

所述目标子客户端基于所述授权码生成请求信息;

所述目标子客户端基于所述请求信息从第二服务器获取用户身份信息;其中,所述第二服务器为所述主客户端运行时所关联的服务器;

所述目标子客户端基于所述用户身份信息在所述第一服务器登录,在登录成功时通知所述主客户端在目标展示区域内展示所述目标子客户端的登录态;其中,所述第一服务器为所述目标子客户端运行时所关联的服务器。

在本公开的一个实施例中,所述目标子客户端基于所述授权码生成请求信息,包括:

所述目标子客户端基于预设密钥对所述授权码进行加密处理得到所述请求信息。

在本公开的一个实施例中,所述目标子客户端基于预设密钥对所述授权码进行加密处理得到所述请求信息,包括:

所述目标子客户端将当前时间戳、签名算法类型、所述目标子客户端的标识以及所述授权码作为初始请求参数;

所述目标子客户端对所述初始请求参数进行拼接得到字符串;

所述目标子客户端基于所述预设密钥以及所述字符串进行处理得到签名串;

所述目标子客户端将所述签名串添加至所述初始请求参数得到目标请求参数,基于所述目标请求参数生成所述请求信息。

在本公开的一个实施例中,所述方法还包括:

在所述第二服务器对所述请求信息中的所述授权码验证失败的情况下,所述目标子客户端控制在所述主客户端的目标展示区域展示登录页面;其中,所述登录页面中包含账号和/或密码的输入区域。

在本公开的一个实施例中,所述方法还包括:

所述目标子客户端完成资源加载的情况下,开启第一计时器;

在所述第一计时器的计时时长达到第一预设时长且未接收到所述主客户端发送的授权码的情况下,所述目标子客户端控制在所述主客户端的所述目标展示区域展示登录页面;其中,所述登录页面中包含账号和/或密码的输入区域。

在本公开的一个实施例中,所述目标子客户端基于所述用户身份信息在所述第一服务器登录,包括:

所述目标子客户端基于所述用户身份信息从所述第一服务器获取已登录成功账号的账号相关信息。

本公开实施例的第三方面提供一种主客户端,包括:

授权码获取单元,用于在目标子客户端响应于启动指令完成资源加载的情况下,获取所述目标子客户端对应的授权码;其中,所述目标子客户端为所述主客户端相关联的n个子客户端中之一,n为大于等于1的整数;所述目标子客户端根据所述授权码获取用户身份信息;

第一内部通信单元,用于将所述授权码发送至所述目标子客户端;

展示单元,用于在所述目标子客户端基于所述用户身份信息在第一服务器登录成功的情况下,在目标展示区域内展示所述目标子客户端的登录态;其中,所述第一服务器为所述目标子客户端运行时所关联的服务器。

在本公开的一个实施例中,所述展示单元,用于在目标展示区域内展示所述目标子客户端的授权页面;

所述授权码获取单元,用于响应于针对所述目标子客户端的授权页面中的目标按键的操作,获取所述目标子客户端对应的授权码。

在本公开的一个实施例中,所述授权码获取单元,用于从第二服务器获取所述目标子客户端对应的授权码;其中,所述第二服务器为所述主客户端运行时所关联的服务器。

本公开实施例的第四方面提供一种目标子客户端,包括:

第二内部通信单元,用于在响应于主客户端的启动指令完成资源加载的情况下,获取所述主客户端发送的授权码;其中,所述目标子客户端为所述主客户端相关联的n个子客户端中之一,n为大于等于1的整数;

请求生成单元,用于基于所述授权码生成请求信息;

身份信息获取单元,用于基于所述请求信息从第二服务器获取用户身份信息;其中,所述第二服务器为所述主客户端运行时所关联的服务器;

登录单元,用于基于所述用户身份信息在所述第一服务器登录,在登录成功时通知所述主客户端在目标展示区域内展示所述目标子客户端的登录态;其中,所述第一服务器为所述目标子客户端运行时所关联的服务器。

在本公开的一个实施例中,所述请求生成单元,用于基于预设密钥对所述授权码进行加密处理得到所述请求信息。

在本公开的一个实施例中,所述请求生成单元,用于将当前时间戳、签名算法类型、所述目标子客户端的标识以及所述授权码作为初始请求参数;对所述初始请求参数进行拼接得到字符串;基于所述预设密钥以及所述字符串进行处理得到签名串;将所述签名串添加至所述初始请求参数得到目标请求参数,基于所述目标请求参数生成所述请求信息。

在本公开的一个实施例中,还包括:

展示控制单元,用于在所述第二服务器对所述请求信息中的所述授权码验证失败的情况下,控制在所述主客户端的目标展示区域展示登录页面;其中,所述登录页面中包含账号和/或密码的输入区域。

在本公开的一个实施例中,还包括:

展示控制单元,用于进行资源加载完成的情况下,开启第一计时器;在所述第一计时器的计时时长达到第一预设时长且未接收到所述主客户端发送的授权码的情况下,控制在所述主客户端的所述目标展示区域展示登录页面;其中,所述登录页面中包含账号和/或密码的输入区域。

在本公开的一个实施例中,所述登录单元,用于基于所述用户身份信息从所述第一服务器获取已登录成功账号的账号相关信息。

本公开实施例的第五方面提供一种客户端登录系统,包括:终端设备,第一服务器以及第二服务器;其中,所述终端设备包括主客户端以及目标子客户端;所述目标子客户端为所述主客户端相关联的n个子客户端中之一,n为大于等于1的整数;其中,

所述主客户端,用于在目标子客户端响应于主客户端的启动指令完成资源加载的情况下,获取所述目标子客户端对应的授权码;将所述授权码发送至所述目标子客户端;在目标展示区域内展示所述目标子客户端的登录态;

所述目标子客户端,用于在响应于主客户端的启动指令完成资源加载的情况下,获取所述主客户端发送的授权码;基于所述授权码生成请求信息;基于所述请求信息从第二服务器获取用户身份信息;基于所述用户身份信息在所述第一服务器登录;在登录成功时通知所述主客户端在目标展示区域内展示所述目标子客户端的登录态;

所述第一服务器,用于为所述目标子客户端提供登录态相关信息;

所述第二服务器,用于为所述目标子客户端提供用户身份信息。

在本公开的一个实施例中,所述主客户端,用于从第二服务器获取所述目标子客户端对应的授权码;

所述第二服务器,用于生成所述目标子客户端对应的授权码。

在本公开的一个实施例中,所述第二服务器,用于基于所述目标子客户端的标识、授权范围、当前时间戳以及全局自增数字进行加密处理,生成所述目标子客户端对应的授权码。

在本公开的一个实施例中,所述第二服务器,还用于在所述目标子客户端对应的所述授权码的保存时长达到有效时长的情况下,设置所述目标子客户端对应的所述授权码为失效状态。

在本公开的一个实施例中,所述第二服务器,用于接收目标子客户端发来的请求信息,对所述请求信息中包含的授权码进行验证;在验证通过的情况下,向所述目标子客户端发送用户身份信息。

在本公开的一个实施例中,所述目标子客户端,用于基于所述用户身份信息从所述第一服务器获取已登录成功账号的账号相关信息;

所述第一服务器,用于基于所述用户身份信息向所述目标子客户端发送已登录成功账号的账号相关信息。

本公开实施例的第六方面提供一种介质,其存储有计算机程序,其特征在于,该程序被处理器执行时实现如前述实施例的方法。

本申请实施例的第七方面提供一种计算设备,包括:

一个或多个处理器;

存储装置,用于存储一个或多个程序;

当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如前述实施例的方法。

根据本公开实施方式,由主客户端获取其相关联的目标子客户端的授权码,将该授权码发送至目标子客户端,以使得目标子客户端基于该授权码获取用户身份信息之后完成在第一服务器的登录。从而通过跨客户端传递授权码的方式,避免用户每次登录目标子客户端均需要输入账号以及密码的操作,提升了登录处理的效率。另外,由于在主客户端内部即可完成针对目标子客户端的授权以及登录的处理,使得目标子客户端的授权码的传输受到主客户端的容器的保护,可以避免信息泄露,保证了目标子客户端的登录处理的安全性。

附图说明

通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,其中:

图1示意性地示出了根据本公开一实施方式的客户端登录方法流程图一;

图2示意性地示出了根据本公开一实施方式的用户选择子客户端以触发进行资源加载的场景示意图;

图3示意性地示出了根据本公开一实施方式的授权页面的示意图;

图4示意性地示出了根据本公开一实施方式的客户端登录方法流程图二;

图5示意性地示出了根据本公开一实施方式的客户端登录方法流程图三;

图6示意性地示出了根据本公开一实施方式的登录页面示意图;

图7示意性地示出了根据本公开另一实施方式的客户端登录系统组成结构示意图;

图8示意性地示出了根据本公开又一实施方式的客户端登录方法流程图四;

图9示意性地示出了根据本公开一实施方式的介质示意图;

图10示意性地示出了根据本公开一实施方式的主客户端的组成结构示意图;

图11示意性地示出了根据本公开一实施方式的目标子客户端的组成结构示意图;

图12示意性地示出了根据本公开一实施方式的计算设备结构示意图。

在附图中,相同或对应的标号表示相同或对应的部分。

具体实施方式

下面将参考若干示例性实施方式来描述本公开的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本公开,而并非以任何方式限制本公开的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。

本领域技术人员知道,本公开的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。

根据本公开的实施方式,提出了一种客客户端登录方法及系统、客户端、介质、计算设备。

在本文中,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。

下面参考本公开的若干代表性实施方式,详细阐释本公开的原理和精神。

发明概述

本申请人发现,用户使用的主客户端中可能会关联一个或多个子客户端,能够通过主客户端调用并运行所述一个或多个子客户端中的任意之一。在通过主客户端调用并运行某一个子客户端之前,需要该子客户端完成登录。然而,用户在每次登录所述主客户端中的某一个子客户端时均需要输入账号及其对应的密码才可以完成登录。可见现有技术中,登录主客户端的某一个相关联的子客户端的处理中存在效率较低的问题。

有鉴于此,本公开提供一种客户端登录方法及系统、客户端、介质、计算设备,其中方法包括:

在目标子客户端响应于主客户端的启动指令完成资源加载的情况下,所述主客户端获取所述目标子客户端对应的授权码;其中,所述目标子客户端为所述主客户端相关联的n个子客户端中之一,n为大于等于1的整数;所述目标子客户端根据所述授权码获取用户身份信息;

所述主客户端将所述授权码发送至所述目标子客户端;

在所述目标子客户端基于所述用户身份信息在第一服务器登录成功的情况下,所述主客户端在目标展示区域内展示所述目标子客户端的登录态;其中,所述第一服务器为所述目标子客户端运行时所关联的服务器。

以及,

在目标子客户端响应于主客户端的启动指令完成资源加载的情况下,所述目标子客户端获取所述主客户端发送的授权码;其中,所述目标子客户端为所述主客户端相关联的n个子客户端中之一,n为大于等于1的整数;

所述目标子客户端基于所述授权码生成请求信息;

所述目标子客户端基于所述请求信息从第二服务器获取用户身份信息;其中,所述第二服务器为所述主客户端运行时所关联的服务器;

所述目标子客户端基于所述用户身份信息在所述第一服务器登录,在登录成功时通知所述主客户端在目标展示区域内展示所述目标子客户端的登录态;其中,所述第一服务器为所述目标子客户端运行时所关联的服务器。

如此,由主客户端获取其相关联的目标子客户端的授权码,将该授权码发送至目标子客户端,以使得目标子客户端基于该授权码获取用户身份信息之后完成在第一服务器的登录。从而通过跨客户端传递授权码的方式,避免用户每次登录目标子客户端均需要输入账号以及密码的操作,提升了登录处理的效率。另外,由于在主客户端内部即可完成针对目标子客户端的授权以及登录的处理,使得目标子客户端的授权码的传输受到主客户端的容器的保护,可以避免信息泄露,保证了目标子客户端的登录处理的安全性。

在介绍了本公开的基本原理之后,下面具体介绍本公开的各种非限制性实施方式。

示例性方法

本公开的第一个方面提供一种客户端登录方法,如图1所示,包括:

s101:在目标子客户端响应于主客户端的启动指令完成资源加载的情况下,所述主客户端获取所述目标子客户端对应的授权码;其中,所述目标子客户端为所述主客户端相关联的n个子客户端中之一,n为大于等于1的整数;所述目标子客户端根据所述授权码获取用户身份信息;

s102:所述主客户端将所述授权码发送至所述目标子客户端;

s103:在所述目标子客户端基于所述用户身份信息在第一服务器登录成功的情况下,所述主客户端在目标展示区域内展示所述目标子客户端的登录态;其中,所述第一服务器为所述目标子客户端运行时所关联的服务器。

本实施例提供的方案由主客户端执行。所述主客户端可以为终端设备中安装的客户端。所述主客户端可以关联n个子客户端。所述n个子客户端中的任意一个子客户端具体可以为所述主客户端中的联运子客户端。所述目标子客户端可以为所述主客户端相关联的n个子客户端中的任意之一。

执行s101之前,可以包括:在所述主客户端的展示界面中,展示所述n个子客户端所分别对应的图标;所述主客户端响应于针对所述n个子客户端中的目标子客户端所对应的图标的点击操作,所述主客户端向所述目标子客户端发送启动指令。

示例性的,参见图2左侧所示,在主客户端的展示界面中包含了3个子客户端的图标,分别为子客户端-1的图标、子客户端-2的图标以及子客户端-3的图标;用户在点击其中的子客户端-1的图标的情况下,所述子客户端-1即为前述目标子客户端,主客户端向所述子客户端-1(即目标子客户端)发送启动指令。

所述启动指令可以用于指示所述目标子客户端获取资源并进行加载。

在所述主客户端向所述目标子客户端发送启动指令之后,所述目标子客户端可以从第一服务器获取资源以开始进行资源加载,此时,在所述主客户端的目标展示区域内可以展示所述目标子客户端的加载页面。

其中,所述加载页面中可以展示所述目标子客户端的资源加载进度;所述加载进度至少可以包括:资源加载中、资源加载完成等等,这里不做穷举。

示例性的,如图2右侧所示,在所述主客户端的目标展示区域内,展示所述目标子客户端的加载页面,在所述加载页面中展示的加载进度为“资源加载中”。

所述主客户端的所述目标展示区域可以是在所述主客户端的所述展示界面内,其中,所述目标展示区域的大小不大于所述展示界面,并且所述目标展示区域的边框(或边界)均位于所述展示界面内,另外,所述目标展示区域在所述展示界面内的具体位置可以根据实际情况进行设置。比如,仍参见图2右侧,所述主客户端的所述目标展示区域22可以位于所述主客户端的展示界面21内。

在所述主客户端向所述目标子客户端发送启动指令之后,还可以包括:

所述主客户端可以判断所述目标子客户端是否完成资源加载,在所述目标子客户端未完成资源加载的情况下,所述主客户端可以持续判断所述目标子客户端是否完成资源加载;在所述目标子客户端完成资源加载的情况下,执行s101,也就是在目标子客户端响应于主客户端的启动指令完成资源加载的情况下,所述主客户端获取所述目标子客户端对应的授权码。

其中,所述主客户端判断所述目标子客户端是否完成资源加载的方式可以是所述主客户端判断是否接收到所述目标子客户端发来的第一指示来确定所述目标子客户端是否完成资源加载;比如,所述主客户端若接收到所述目标子客户端发来的所述第一指示,则确定所述目标子客户端完成资源加载。

所述第一指示可以是登录指令,该登录指令可以为所述目标子客户端请求登录的指令;或者,所述第一指示可以是用于表征所述目标子客户端完成资源加载的指示。

在执行s101之前,所述主客户端还可以获取所述目标子客户端的相关信息;其中,所述目标子客户端的相关信息可以包括所述目标子客户端的标识,比如,可以为所述目标子客户端的id(即目标子客户端的appid)。

s101中,所述主客户端获取所述目标子客户端对应的授权码,可以包括以下两种处理方式:

处理方式一:所述主客户端直接获取所述目标子客户端对应的授权码。

这种处理方式中,可以无需用户进行操作,而是在所述主客户端确定所述目标子客户端完成资源加载的时候,直接获取所述目标子客户端所对应的授权码。本处理方式可以较为快捷的获取到所述目标子客户端的授权码,并且可以减少用户的操作,使得整个处理更加便捷。

再进一步地,所述主客户端获取所述目标子客户端对应的授权码,可以为:所述主客户端从第二服务器获取所述目标子客户端对应的授权码;其中,所述第二服务器为所述主客户端运行时所关联的服务器。

具体来说,所述主客户端从第二服务器获取所述目标子客户端对应的授权码,可以包括:所述主客户端向所述第二服务器发送授权码获取请求;所述主客户端接收所述第二服务器反馈的所述目标子客户端对应的授权码。

相应的,在所述第二服务器侧,所述第二服务器接收到所述主客户端发来的所述授权码获取请求之后,生成所述目标子客户端对应的授权码;所述第二服务器将所述目标子客户端对应的授权码发送至所述主客户端。

这里,所述授权码获取请求中可以至少包括所述目标子客户端的标识。相应的,所述第二服务器生成所述目标子客户端对应的授权码的处理可以包括:基于所述目标子客户端的标识、授权范围、当前时间戳以及全局自增数字进行加密处理,生成所述目标子客户端对应的授权码。

其中,所述授权范围可以是所述授权码所对应的授权范围,比如,所述授权范围可以是用户在所述主客户端的用户相关信息;其中,所述用户相关信息可以包含用户在所述主客户端的用户身份信息,比如用户在所述主客户端的用户id(或账号id)。

所述当前时间戳可以为精确到纳秒级别的时刻,具体可以是所述第二服务器开始进行所述授权码生成处理的时刻,或者,可以是所述第二服务器接收到所述主客户端发来的所述授权码获取请求的时刻。

所述全局自增数字可以是每次生成授权码的时候均不相同的,也就是第二服务器每次生成授权码的时候均使用不同的全局自增数字。一种示例中,可以是所述第二服务器在接收到主客户端发来的所述目标子客户端对应的授权码获取请求的时候,对原全局自增数字增加预设数值后得到本次的全局自增数字。其中,所述预设数值可以是根据实际情况设置,比如可以为1。

其中,所述加密处理可以是采用sha加密算法执行的处理。

在具体处理中,可以包括:所述第二服务器将所述目标子客户端的标识、授权范围、当前时间戳以及全局自增数字拼接为待加密字符串;对所述待加密字符串进行加密处理得到所述目标子客户端对应的授权码;保存所述授权码及其所对应的所述授权范围以及用户相关信息。

一种示例中,生成所述授权码的实现代码可以包括:

@resource(name=”userredisclient”)

privateredisclusterserviceredisclient;

privatestaticfinalinttime=10*60;//有效时长为10*60秒;

privatefinalstringuserprefix=“user:”;//存储的用户前缀为“user:”;

privatefinalstringunique_key=”user:unique:key:index”;

/**

*方法:creategrantcode<br>

*描述:授权码的生成过程<br>

*@paramclientidstr

*@paramscopestr

*@paramuser

*@return

*@throwsexception

*/

publicstringcreategrantcode(stringappidstr,stringscopestr,useruser)throwsexception{

longincr=redisclient.incr(unique_key);//获取全局自增数字;

stringstr=appidstr+scopestr+string.valueof(system.nanotime())+incr;//拼装待加密字符串(clientid(所述目标子客户端的标识)+scope(授权范围)+当前时间戳);

stringencryptedstr=shaencode(str);//基于前述待加密字符串生成授权码;

redisclient.setwithexpiretime(userprefix+encryptedstr+“:scope”,scopestr,time);//保存本次请求的授权码所对应的授权范围;

redisclient.setwithexpiretime(userprefix+encryptedstr+“:user”,jsonobject.tojsonstring(user),time);//保存本次请求的授权码所对应的用户相关信息;

returnencryptedstr;//返回授权码;

}

还需要说明的是,所述授权码的长度可以为预设长度,比如可以是40bit,示例性的,某一个授权码可以是“fec1cdc7b5c5f0f4e32c36dc08a5b35bee83e8e9”。

所述授权码的作用可以是用于后续换取令牌(access_token);该授权码可以具备有效时长,在授权码在所述第二服务器侧保存时长超过有效时长的情况下,可以将该授权码设置为失效状态。也就是说,所述第二服务器侧还会在生成所述授权码的时候,对所述授权码进行保存,并且所述第二服务器侧会对所述授权码的保存时长进行检测,在所述授权码的保存时长达到有效时长的情况下,所述第二服务器将所述授权码设置为失效状态。其中,所述有效时长可以根据实际情况进行设置,比如可以为10分钟,又或者可以为5分钟、15分钟等等。

另外,一个授权码仅用于换取一次令牌,在第二服务器侧,若确定一个授权码已经成功换取对应的令牌的情况下,也可以将该授权码设置为失效状态。

处理方式二:所述主客户端在目标展示区域内展示所述目标子客户端的授权页面;所述主客户端响应于针对所述目标子客户端的授权页面中的目标按键的操作,获取所述目标子客户端对应的授权码。

处理方式二与处理方式一不同之处在于,处理方式二中会为用户展示所述目标子客户端的授权页面,在主客户端检测到用户点击所述授权页面中的目标按键的情况下,再获取所述目标子客户端对应的授权码。本处理方式仅需要用户进行简单的点击即可实现授权码的获取,从而保证了目标子客户端的信息安全性。

其中,所述针对所述目标子客户端的授权页面中的目标按键的操作,具体可以为点击操作,比如触控点击操作。所述目标按键具体可以为所述授权页面中展示的虚拟按键;另外,在所述目标按键中还可以展示有相应的文字提示信息,比如“授权登录”。还需要指出的是,所述授权页面中还可以展示有所述目标子客户端的相关信息,比如可以包括所述目标子客户端的图标等等。

举例来说,参见图3,在授权页面中可以包括有所述目标子客户端的图标以及目标按键31;在所述目标按键31中可以展示相应的文字提示信息,比如如图3中所示的“授权登录”,或者还可以为其他文字,这里不做穷举。

在上述处理方式二中,所述主客户端获取所述目标子客户端对应的授权码的方式与处理方式一相同,这里不再重复说明。

另外,上述两种处理方式还可以结合使用,具体来说:

一种示例中,前述s101,在目标子客户端响应于主客户端的启动指令完成资源加载的情况下,所述主客户端获取所述目标子客户端对应的授权码,可以包括:

在所述目标子客户端响应于所述主客户端的启动指令完成资源加载的情况下,所述主客户端从数据库中查询所述目标子客户端是否为已授权的子客户端,若是,则所述主客户端获取所述目标子客户端对应的授权码;

否则,所述主客户端在目标展示区域内展示所述目标子客户端的授权页面,所述主客户端响应于针对所述目标子客户端的授权页面中的目标按键的操作,所述主客户端获取所述目标子客户端对应的授权码。

也就是说,在所述目标子客户端响应于所述主客户端的启动指令完成资源加载的情况下,所述主客户端判断所述目标子客户端是否为已授权的子客户端;在所述目标子客户端为已授权的子客户端的情况下,采用前述处理方式一进行处理;在所述目标子客户端不为已授权的子客户端的情况下,采用前述处理方式二进行处理。

这里,所述主客户端判断所述目标子客户端是否为已授权的子客户端的方式可以是:所述主客户端从数据库中查询所述目标子客户端是否为已授权的子客户端;所述数据库可以是mysql数据库。

其中,所述数据库中可以保存有已授权的子客户端的标识,比如,某一个子客户端为已授权的子客户端,可以在所述数据库中保存该子客户端的标识,另外,所述数据库中可以保存该子客户端的标识以及已授权标记。也就是,所述主客户端可以从所述数据库中查找是否保存有所述目标子客户端的标识及其对应的已授权标记,若是,则可以确定所述目标子客户端为已授权的子客户端,否则,可以确定所述目标子客户端为未授权的子客户端。

另一种示例,前述s101中,在目标子客户端响应于主客户端的启动指令完成资源加载的情况下,所述主客户端获取所述目标子客户端对应的授权码,可以包括:

在目标子客户端响应于主客户端的启动指令完成资源加载的情况下,所述主客户端从数据库中查询所述目标子客户端是否为第二预设时长内授权过的子客户端,若是,则所述主客户端获取所述目标子客户端对应的授权码;

否则,所述主客户端在目标展示区域内展示所述目标子客户端的授权页面,所述主客户端响应于针对所述目标子客户端的授权页面中的目标按键的操作,从第二服务器获取所述目标子客户端对应的授权码。

也就是说,在所述目标子客户端响应于所述主客户端的启动指令完成资源加载的情况下,所述主客户端判断所述目标子客户端是否为在第二预设时长内授权过的子客户端;在所述目标子客户端为在第二预设时长内授权过的子客户端的情况下,采用前述处理方式一进行处理;在所述目标子客户端不为在第二预设时长内授权过的子客户端的情况下,采用前述处理方式二进行处理。

其中,所述第二预设时长可以根据实际情况设置,比如可以是3天内、或者10天内等等。

这里,所述主客户端判断所述目标子客户端是否为在第二预设时长内授权过的子客户端的方式可以是:所述主客户端从数据库中查询所述目标子客户端是否为在第二预设时长内授权过的子客户端;所述数据库可以是mysql数据库。

其中,所述数据库中可以保存有授权过的子客户端的标识、已授权标记以及最近一次授权时间。

具体可以为:所述主客户端可以从所述数据库中查找是否保存有所述目标子客户端的标识及其对应的已授权标记,若没有,则采用前述处理方式二进行后续处理;

若所述数据库中保存有所述目标子客户端的标识及其对应的已授权标记,则基于所述目标子客户端的标识在所述数据库中关联的最近一次授权时间以及当前时刻,确定所述目标子客户端是否为在第二预设时长内授权过的子客户端,若是,则可以采用前述处理方式一进行处理;否则,采用前述处理方式二进行处理。

完成前述s101之后,执行s102所述主客户端将所述目标子客户端对应的授权码发送至所述目标子客户端。

这里,所述主客户端以及所述目标子客户端可以通过通信sdk(softwaredevelopmentkit,软件开发工具包)进行通信。

其中,所述通信sdk可以为客户端以及终端设备提供通信功能,可以通过底层的websocket实现。相应的,所述主客户端将所述授权码发送至所述目标子客户端,可以为:所述主客户端通过通信sdk将所述授权码发送至所述目标子客户端。

进一步地,所述通信sdk可以包括所述主客户端的第一通信sdk,所述目标子客户端的第二通信sdk。相应的,所述主客户端将所述授权码发送至所述目标子客户端,可以为:所述主客户端将所述授权码通过所述第一通信sdk发送至所述第二通信sdk,由所述第二通信sdk将所述授权码发送至所述目标子客户端。

在所述目标子客户端接收到所述授权码的情况下,可以基于所述授权码从第二服务器获取对应的用户身份信息,再利用所述用户身份信息在第一服务器进行登录。

在s103中,在所述目标子客户端基于所述用户身份信息在第一服务器登录成功的情况下,所述主客户端在目标展示区域内展示所述目标子客户端的登录态。

所述主客户端在目标展示区域内展示所述目标子客户端的登录态具体可以为:所述主客户端在所述目标展示区域内展示所述目标子客户端的已登录成功账号的账号相关信息。

举例来说,在所述目标子客户端为游戏客户端的情况下,所述账号历史相关信息可以包括有:用户账号对应的游戏进度、用户账号对应的角色、道具、皮肤等相关信息。

结合图4对上述第一个方面的实施例进行示例性说明,可以包括:

s4011:在所述主客户端中点击目标子客户端的标识;

具体可以是:所述主客户端响应于针对所述目标子客户端的标识的点击操作生成启动指令;并且,所述主客户端还可以通过通信sdk将所述启动指令发送至目标子客户端。

s4012:所述主客户端监听到所述目标子客户端发来的登录指令;具体的,所述主客户端可以通过通信sdk监听到所述目标子客户端发来的登录指令。

所述主客户端可以进一步判断所述目标子客户端是否已经登录,若是,则获取所述目标子客户端的相关信息;否则,弹出登录页面,获取用户输入的账号以及密码。

在获取到所述目标子客户端的相关信息之后,执行s4013:所述主客户端判断所述目标子客户端是否为已授权的子客户端,若不是,则执行s4014;若是,则执行s4016。

这里,所述主客户端判断所述目标子客户端是否为已授权的子客户端的处理方式与前述实施例相同,不做重复说明。

s4014:所述主客户端在目标展示区域内展示所述目标子客户端的授权页面;

s4015:所述主客户端检测到针对所述目标子客户端的授权页面中的目标按键的操作;

s4016:所述主客户端获取所述目标子客户端对应的授权码。

s4017:所述主客户端将所述授权码发送至所述目标子客户端;具体可以是所述主客户端通过通信sdk将所述授权码发送至所述目标子客户端。

s4018:所述主客户端在目标展示区域内展示所述目标子客户端的登录态。具体可以是展示所述目标子客户端已登录成功账号的账号相关信息。

最后需要说明的是,前述主客户端可以是音乐客户端,所述目标子客户端可以是游戏客户端;当然,所述主客户端以及目标子客户端还可以分别为其他种类的客户端,只要目标子客户端为所述主客户端相关联的多个子客户端中任意之一,均在本实施例的保护范围内。

可见,通过采用上述方案,由主客户端获取其相关联的目标子客户端的授权码,将该授权码发送至目标子客户端,以使得目标子客户端基于该授权码获取用户身份信息之后完成在第一服务器的登录。从而通过跨客户端传递授权码的方式,避免用户每次登录目标子客户端均需要输入账号以及密码的操作,提升了登录处理的效率。另外,由于在主客户端内部即可完成针对目标子客户端的授权以及登录的处理,使得目标子客户端的授权码的传输受到主客户端的容器的保护,可以避免信息泄露,保证了目标子客户端的登录处理的安全性。

本公开的第二个方面提供一种客户端登录方法,如图5所示,包括:

s501:在目标子客户端响应于主客户端的启动指令完成资源加载的情况下,所述目标子客户端获取所述主客户端发送的授权码;其中,所述目标子客户端为所述主客户端相关联的n个子客户端中之一,n为大于等于1的整数;

s502:所述目标子客户端基于所述授权码生成请求信息;

s503:所述目标子客户端基于所述请求信息从第二服务器获取用户身份信息;其中,所述第二服务器为所述主客户端运行时所关联的服务器;

s504:所述目标子客户端基于所述用户身份信息在所述第一服务器登录,在登录成功时通知所述主客户端在目标展示区域内展示所述目标子客户端的登录态;其中,所述第一服务器为所述目标子客户端运行时所关联的服务器。

本实施例提供的方案由目标子客户端执行。所述目标子客户端可以为终端设备中安装的主客户端所关联的n个子客户端中任意之一。

执行s501之前,可以包括:所述目标子客户端响应于所述主客户端发来的启动指令,所述目标子客户端从第一服务器获取资源并进行加载。此时,可以在所述主客户端的所述目标展示区域内展示所述目标子客户端的加载页面。其中,所述启动指令可以用于指示所述目标子客户端获取资源并进行加载。

所述加载页面中可以展示所述目标子客户端的资源加载进度;所述加载进度至少可以包括:资源加载中、资源加载完成等等,这里不做穷举。示例性的,图2右侧所示,在所述主客户端的目标展示区域内,展示所述目标子客户端的加载页面,在所述加载页面中展示的加载进度为“资源加载中”。

进一步地,所述目标子客户端还可以在完成资源加载的情况下,向所述主客户端发送第一指示。其中,所述第一指示可以是登录指令,该登录指令可以为所述目标子客户端请求登录的指令;或者,所述第一指示可以是用于表征所述目标子客户端完成资源加载的指示。

相应的,所述主客户端在确定目标子客户端响应于主客户端的启动指令完成资源加载的情况下,获取所述目标子客户端对应的授权码,将所述授权码发送至所述目标子客户端。这里,关于所述主客户端获取所述目标子客户端对应的授权码的方式与前述实施例相同,不做重复说明。

还需要说明的是,所述目标子客户端在确定完成资源加载的情况下,向所述主客户端发送第一指示,还可以包括:所述目标子客户端在完成资源加载的情况下,判断所在终端设备是否为云设备,若是,则向所述主客户端发送第一指示;否则结束处理。

其中,所述判断所在终端设备是否为云设备的方式可以是:获取所述终端设备保存的配置信息;检测所述配置信息中是否包含预设内容,若包含,则所述终端设备为云设备,否则,所述终端设备不为云设备。举例来说,所述配置信息可以是根据实际情况预设在所述终端设备的指定存储位置的信息;所述预设内容可以是所述配置信息中用于指示所述终端设备的类型的字段中包含的指定的内容,比如,可以是所述配置信息中的“type”对应的信息为yes、是或“云设备”。其中,所述终端设备指的是所述主客户端以及所述目标子客户端所在的终端设备,或者是安装以及运行所述主客户端以及所述目标子客户端的终端设备。

其中,所述云设备可以是能够通过云服务器实现云服务的终端设备,比如可以是深度结合了网络服务的智能手机。

完成前述处理之后,所述目标子客户端执行s501,即在目标子客户端响应于主客户端的启动指令完成资源加载的情况下,所述目标子客户端获取所述主客户端发送的授权码。

具体来说,在s501的处理中,可以包括以下两种方式:

方式一、在目标子客户端响应于主客户端的启动指令完成资源加载的情况下,直接获取所述主客户端发送的授权码。

这种方式中,目标子客户端可以不通知所述主客户端进行任何页面的显示,只是监听所述主客户端发送的所述授权码;相应的,所述主客户端仅需要在确定目标子客户端响应于主客户端的启动指令完成资源加载,就可以直接从对应的第二服务器获取所述目标子客户端对应的授权码,并发送至所述目标子客户端。

方式二、

在目标子客户端响应于主客户端的启动指令完成资源加载的情况下,所述目标子客户端通知所述主客户端在目标展示区域内展示所述目标子客户端的授权页面;相应的,所述主客户端响应于针对所述目标子客户端的授权页面中的目标按键的操作,获取所述目标子客户端对应的授权码,并发送至所述目标子客户端;

所述目标子客户端接收所述主客户端发送的所述授权码。

所述针对所述目标子客户端的授权页面中的目标按键的操作,具体可以为点击操作,比如触控点击操作。所述目标按键具体可以为所述授权页面中展示的虚拟按键;另外,在所述目标按键中还可以展示有相应的文字提示信息,比如“授权登录”。还需要指出的是,所述授权页面中还可以展示有所述目标子客户端的相关信息,比如可以包括所述目标子客户端的图标等等。

这里,所述主客户端以及所述目标子客户端可以通过通信sdk进行通信。示例性的,所述目标子客户端通过通信sdk接收所述主客户端发送的所述授权码。

进一步地,所述主客户端可以对应第一通信sdk,所述目标子客户端可以对应第二通信sdk。相应的,所述目标子客户端获取所述主客户端发送的授权码,可以为:所述主客户端将所述授权码发送至所述第一通信sdk;然后所述第一通信sdk将所述授权码发送至所述第二通信sdk;所述目标子客户端通过所述第二通信sdk接收所述授权码。

所述方法还可以包括:所述目标子客户端完成资源加载的情况下,开启第一计时器;在所述第一计时器的计时时长达到第一预设时长且未接收到所述主客户端发送的授权码的情况下,所述目标子客户端控制在所述主客户端的所述目标展示区域展示登录页面;其中,所述登录页面中包含账号和/或密码的输入区域。

所述目标子客户端完成资源加载的情况下,开启第一计时器,可以是:所述目标子客户端可以在完成资源加载的情况下,直接开启所述第一计时器;又或者,所述目标子客户端在完成资源加载的情况下,向所述主客户端发送所述第一指示,同时开启所述第一计时器。

所述目标子客户端完成资源加载的情况下,开启第一计时器之后,可以包括:

所述目标子客户端开始监听是否接收到所述主客户端发送的授权码;

若在所述第一计时器的计时时长未达到所述第一预设时长且接收到所述主客户端发送的授权码,则执行s502;

若在所述第一计时器的计时时长达到所述第一预设时长且未接收到所述主客户端发送的授权码,则所述目标子客户端控制在所述主客户端的所述目标展示区域展示登录页面;其中,所述登录页面中包含账号和/或密码的输入区域。

这里,所述目标子客户端监听是否接收到所述主客户端发送的授权码,可以是:所述目标子客户端采用轮询的方式监听是否接收到所述主客户端发送的授权码。比如,可以是基于预设周期采用轮询的方式监听是否接收到所述主客户端发送的授权码。其中,所述预设周期可以是1秒钟、30毫秒等等。

所述第一预设时长可以根据实际情况进行设置,比如,可以是1分钟,或者可以为1.5分钟,或者可以更长或更短,这里不做穷举。

上述所述目标子客户端在所述第一计时器的计时时长达到所述第一预设时长且未接收到所述主客户端发送的授权码的原因,可以包括所述主客户端有可能未在所述第一预设时长内获取到所述授权码。这是由于所述授权码在所述主客户端运行时关联的第二服务器保存有所述授权码的有效时长,在所述第二服务器接收到所述主客户端发送的授权码获取请求的时候,若所述授权码为无效状态(比如,授权码的保存时长超过了有效时长被设置为无效状态),则所述第二服务器不会为所述主客户端反馈所述授权码,相应的,所述主客户端不为所述目标子客户端发送所述授权码。

前述登录页面的大小以及位置可以根据实际情况进行设置,只要位于目标展示区域即可。

所述登录页面中至少需要包含有账号和/或密码的输入区域,另外还可以包括有所述目标子客户端的图标或名称等相关信息。参见图6对所述登录页面进行举例说明,登录页面中包含有账号的输入区域61,密码的输入区域62。

一种示例中,所述登录页面中仅包含账号的输入区域,此时用户可以仅输入账号;所述目标子客户端可以将所述账号发送至第一服务器以及第二服务器,以在所述第一服务器以及第二服务器将该账号与主客户端的标识以及目标子客户端的标识进行绑定,从而完成登录。

另一示例中,所述登录页面中可以仅包含密码的输入区域,此时可以已经展示用户的账号,这种示例中仅需要用户输入该账号所对应的密码即可;所述目标子客户端可以将账号以及密码发送至第一服务器以及第二服务器,以在第一服务器以及第二服务器侧将账号、密码与主客户端的标识以及目标子客户端的标识进行绑定,从而完成登录。

又一示例中,所述登录页面中可以包含密码的输入区域和账号的输入区域,此时用户可以在两个输入区域内分别输入账号以及密码;所述目标子客户端可以将账号以及密码发送至第一服务器以及第二服务器,以在第一服务器以及第二服务器侧将账号、密码与主客户端的标识以及目标子客户端的标识进行绑定,从而完成登录。

s502中,所述目标子客户端基于所述授权码生成请求信息,包括:所述目标子客户端基于预设密钥对所述授权码进行加密处理得到所述请求信息。

其中,所述预设密钥可以为根据实际情况预先设置的密钥。

具体来说,所述目标子客户端基于预设密钥对所述授权码进行加密处理得到所述请求信息,可以包括:

所述目标子客户端将当前时间戳、签名算法类型、所述目标子客户端的标识以及所述授权码作为初始请求参数;

所述目标子客户端对所述初始请求参数进行拼接得到字符串;

所述目标子客户端基于所述预设密钥以及所述字符串进行处理得到签名串;

所述目标子客户端将所述签名串添加至所述初始请求参数得到目标请求参数,基于所述目标请求参数生成所述请求信息。

这里,所述当前时间戳也就是当前时刻,可以是毫秒级的时刻。所述当前时间戳具体可以是接收到所述授权码的时刻,又或者可以是基于授权码进行处理以生成所述请求信息的时刻。

所述签名算法类型可以是根据实际情况确定的,比如,可以是rsa算法。

其中,rsa算法是一种非对称加密算法,该算法可以在不直接传递密钥的情况下完成解密,这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。rsa算法是由一对密钥来进行加解密的过程,分别称为公钥和私钥,该rsa算法的原理就是通过一极大整数做因数分解的困难性来保证安全性。在rsa算法中规定私钥为个人保存,公钥是公开的(可能同时多人持有)。后续实施例中将私钥称为预设密钥进行说明。

示例性的,所述目标子客户端基于预设密钥对所述授权码进行加密处理得到所述请求信息可以采用以下代码实现:

privatestaticstringappkey=“game_appkey”;//请求报文加签

publicstaticstringsignrequest()throwsexpectation{

/**

*1:拼装请求参数

*/

map<string,string>params=newhashmap<string,string>();

jsonobjectjosnobject=newjsonobject();

params.put(“timestamp”,string.valueof(system.currenttimemillis()));//unix当前时间戳,毫秒级;

params.put(“signtype”,“rsa_sha256”);//所使用的签名算法类型,本示例中为rsa_sha256;

params.put(“appid”,“传入appid”);//主客户端分配给开发者的应用id(目标子客户端的标识);

jsonobject.put(“grantcode”,“uea9b569bb6180o”);//授权码;

params.put(“bizcontent”,jsonobject.tostring());//请求参数的集合(即初始请求参数)

/**

*2:请求报文拼接成字符串格式(即得到字符串)

*/

stringsigncheckcontent=getsigncheckcontent(params);

/**

*3:请求报文用私钥加签(即得到签名串)

*/

stingsign=rsa256sign(signcheckcontent,appkey,“utf-8”);

params.put(“sign”,sign);

/**

*4:请求数据组装成http协议报文格式(即生成请求信息)

*/

stingurlparams=asurlparams(params);

/**

*5:执行httppost请求

*/

returnhttppost(http://openapi.qa-bear.igame.163.com/openapi/music/basic/user/info/get/v2,urlp)

}

所述目标子客户端对所述初始请求参数进行拼接得到字符串,可以包括:对所述初始请求参数进行预处理,得到预处理之后的初始请求参数;将所述预处理之后的初始请求参数进行排序;将排序后的初始请求参数进行拼接,得到所述字符串。

其中,所述预处理可以包括去除所述初始请求参数中不符合预设要求的参数,比如在所述初始请求参数中若包含有“sign”参数,就可能会对后续的加签处理产生影响,此时“sign”参数即为不符合预设要求的参数,在预处理中,将该不符合预设要求的参数删除。

所述将所述预处理之后的初始请求参数进行排序,可以是按照预设的顺序进行排序。举例来说,预设的顺序可以是依次包含有以下参数:当前时间戳、签名算法类型、所述目标子客户端的标识以及所述授权码,则按照上述顺序对所述预处理之后的初始请求参数进行排序。

示例性的,所述目标子客户端对所述初始请求参数进行拼接得到字符串可以采用以下代码实现:

所述目标子客户端基于所述预设密钥以及所述字符串进行处理得到签名串,可以包括:基于指定的编码类型对所述预设密钥以及字符串进行处理得到所述签名串。

示例性的,可以采用以下代码实现:

//rsa加密算法

//content请求参数(授权码)

//appkey客户端加签密钥(预设密钥)

//charset数据编码格式

publicstaticstringrsa256sign(stringcontent,stringappkey,stringcharset)throwsruntimeexpection{

try{

privatekeyprikey=getprivatekeyfrompkcs8(“rsa”,newbytearrayinputstream(appkey.getbytes()));//将私钥封装到java.security.privatekey,指定rsa私钥类型;

signature.initsign(prikey);//初始化签名与私钥关系;

if(stringutils.isempty(charset)){

signature.update(content.getbytes());

}else{

signature.update(content.getbytes(charset));

}//指定编码类型;

byte[]signed=signature.sign();

returnbase64.encodebase64string(signed);//返回签名串;

}catch(exceptione){

thrownewruntimeexception(“rsacontent=”+content”;charset=”charset,e);

}

}

前述将所述签名串添加至所述初始请求参数得到目标请求参数,可以采用以下代码实现:“params.put(“sign”,sign)”也就是在目标请求参数中添加所述签名串;其中,“params”为最终得到的所述目标请求参数;“put()”表示添加的处理;“sign”表示所述签名串。

所述基于所述目标请求参数生成所述请求信息可以包括:基于所述目标请求参数以及所述网络地址信息,生成所述请求信息。其中,所述网络地址信息可以是从所述第二服务器获取用户身份信息的网络地址信息。

其中,所述请求信息可以为http(hypertexttransferprotocol,超文本传输协议)的post请求。

关于生成所述请求信息,可以使用以下代码实现:

在得到上述请求信息之后,执行s503,也就是所述目标子客户端执行所述请求信息,以从所述第二服务器获取所述用户身份信息。

其中,执行所述请求信息,获取所述第二服务器反馈的用户身份信息的处理,可以采用以下代码实现:

需要指出的是以上仅为执行所述请求信息的一种实现代码,实际处理中可以使用其他代码实现,只要可以获取到第二服务器反馈的用户身份信息均在本实施例保护范围内,不进行穷举。

相应的,所述第二服务器可以在接收到所述请求信息的情况下,对所述请求信息中包含的目标请求参数中的签名串进行验签,并对其中的授权码进行验证。

还可以包括:在所述第二服务器对所述请求信息中的所述授权码验证失败的情况下,所述目标子客户端控制在所述主客户端的所述目标展示区域展示登录页面。

这里,所述第二服务器对所述请求信息中的所述授权码验证失败,可以是由于:所述第二服务器中保存的所述授权码为失效状态的情况下,对所述请求信息中的所述授权码验证失败。此外,所述第二服务器对所述请求信息中的授权码验证失败的原因还可以包括有:第二服务器的授权码被篡改、或者是在请求信息传输过程中所述请求信息中的授权码被篡改。针对以上两种情况,均无法授权成功,如此也进一步保证了一键授权的安全性。

其中,所述授权码为失效状态的产生原因可以是:所述授权码在所述第二服务器的保存时长达到有效时长。

也就是说,若所述目标子客户端向所述第二服务器发送所述请求信息的时刻为所述授权码在所述第二服务器设置为失效状态之后的时刻,则可能会出现所述授权码验证失败的情况,此时,所述目标子客户端在确定所述授权码验证失败的时候,可以控制在所述主客户端的所述目标展示区域内展示登录页面。

这里,所述登录页面包含的内容,以及响应于用于在所述登录页面输入的账号和/或密码的后续处理与前述实施例相同,这里不做赘述。

另外,在所述第二服务器基于所述请求信息对所述授权码验证通过的情况下,所述第二服务器为所述目标子客户端发送用户身份信息;相应的,所述目标子客户端从所述第二服务器获取用户身份信息。

这里,所述用户身份信息具体可以包括:用户id。另外,所述目标子客户端还可以从所述第二服务器获取用户其他相关信息;所述用户其他相关信息可以包括以下至少之一:用户名、用户头像、令牌(即用户登录令牌)、令牌失效时间等等。本实施例重点关注的信息为所述用户身份信息,因此不对所述用户其他相关信息进行穷举。

然后执行s504,所述目标子客户端基于所述用户身份信息在所述第一服务器登录,在登录成功时通知所述主客户端在目标展示区域内展示所述目标子客户端的登录态。

这里,所述目标子客户端基于所述用户身份信息在所述第一服务器登录,包括:所述目标子客户端基于所述用户身份信息从所述第一服务器获取已登录成功账号的账号相关信息。

也就是说,在获取到所述用户身份信息的情况下,所述目标子客户端利用所述用户身份信息中的用户id从所述第一服务器获取已登录成功账号的账号相关信息。

所述在登录成功时通知所述主客户端在目标展示区域内展示所述目标子客户端的登录态,具体可以为:在所述目标子客户端通知所述主客户端在所述目标展示区域内展示包含有所述目标子客户端的已登录成功账号的账号相关信息的页面。

结合图4对上述第二方面的实施例进行示例性说明,可以包括:

s4021:目标子客户端响应于主客户端的启动指令,开始进行资源加载。

这里,所述主客户端的启动指令可以通过通信sdk发送至目标子客户端。

s4022:所述目标子客户端完成资源加载。

s4023:所述目标子客户端向所述主客户端发送登录指令。

这里,在执行s4023之前,所述目标子客户端还可以判断所在终端设备是否为云设备,若是,则执行s4023;否则,所述目标子客户端控制在所述主客户端的目标展示区域展示登录页面。其中,关于判断所述终端设备是否为云设备的方式在前述实施例已经说明,这里不做赘述。

另外,执行s4023的时候,所述目标子客户端还可以判断所述登录指令是否发送成功,若成功,则执行s4024;否则,所述目标子客户端控制在所述主客户端的目标展示区域展示登录页面。

其中,所述目标子客户端的登录指令发送失败的原因可以包括有网络通信出现问题或异常;或者是所述主客户端版本为不支持后续处理的版本,也就是说当前所述主客户端的版本过低(或者未升级)导致不支持获取授权码并使得目标子客户端基于授权码进行登录的处理。

s4024:所述目标子客户端监听授权码。

s4025:所述目标子客户端基于所述授权码生成请求信息,基于所述请求信息从第二服务器获取用户身份信息。

这里,s4025的处理具体可以包括:所述目标子客户端判断是否在发送登录指令之后的第一预设时长(比如60秒)内监听到所述主客户端发来的授权码,若是,则基于所述授权码生成请求信息,基于所述请求信息从第二服务器获取用户身份信息;否则,所述目标子客户端控制在所述主客户端的目标展示区域展示登录页面。

另外,所述主客户端可以是通过通信sdk将所述授权码发送至所述目标子客户端。

s4026:所述目标子客户端基于所述用户身份信息在所述第一服务器登录,在登录成功时通知所述主客户端在目标展示区域内展示所述目标子客户端的登录态。

所述目标子客户端展示登录页面的后续处理,在前述实施例也已经说明,因此不做赘述。

最后需要说明的是,前述主客户端可以是音乐客户端,所述目标子客户端可以是游戏客户端;当然,所述主客户端以及目标子客户端还可以分别为其他种类的客户端,只要目标子客户端为所述主客户端相关联的多个子客户端中任意之一,均在本实施例的保护范围内。

可见,通过采用上述方案,由主客户端获取其相关联的目标子客户端的授权码,将该授权码发送至目标子客户端,以使得目标子客户端基于该授权码获取用户身份信息之后完成在第一服务器的登录。从而通过跨客户端传递授权码的方式,避免用户每次登录目标子客户端均需要输入账号以及密码的操作,提升了登录处理的效率。

另外,由于在主客户端内部即可完成针对目标子客户端的授权以及登录的处理,使得目标子客户端的授权码的传输受到主客户端的容器的保护,可以避免信息泄露,保证了目标子客户端的登录安全性。

再次,由于在目标子客户端内通过授权码生成请求信息的处理中进行加密的处理,从而可以保证报文不被篡改,进一步保证了整体处理的安全性。

示例性系统

在介绍了本公开示例性实施方式的方法之后,接下来,对本公开示例性实施方式的客户端登录系统进行说明。

本公开的第三个方面提供一种客户端登录系统,参考图7,包括:终端设备71,第一服务器72以及第二服务器73;其中,所述终端设备71包括主客户端711以及目标子客户端712;所述目标子客户端为所述主客户端相关联的n个子客户端中之一,n为大于等于1的整数;其中,

所述主客户端711,用于在目标子客户端响应于主客户端的启动指令完成资源加载的情况下,获取所述目标子客户端对应的授权码;将所述授权码发送至所述目标子客户端;在目标展示区域内展示所述目标子客户端的登录态;

所述目标子客户端712,用于在响应于主客户端的启动指令完成资源加载的情况下,获取所述主客户端发送的授权码;基于所述授权码生成请求信息;基于所述请求信息从第二服务器获取用户身份信息;基于所述用户身份信息在所述第一服务器登录;在登录成功时通知所述主客户端在目标展示区域内展示所述目标子客户端的登录态;

所述第一服务器72,用于为所述目标子客户端提供登录态相关信息;

所述第二服务器73,用于为所述目标子客户端提供用户身份信息。

其中,所述主客户端711,用于在目标展示区域内展示所述目标子客户端的授权页面;响应于针对所述目标子客户端的授权页面中的目标按键的操作,获取所述目标子客户端对应的授权码。

所述主客户端711,用于从第二服务器获取所述目标子客户端对应的授权码;所述第二服务器73,用于生成所述目标子客户端对应的授权码。

所述第二服务器73,用于基于所述目标子客户端的标识、授权范围、当前时间戳以及全局自增数字进行加密处理,生成所述目标子客户端对应的授权码。

所述第二服务器73,具体用于将所述目标子客户端的标识、授权范围、当前时间戳以及全局自增数字拼接为待加密字符串;对所述待加密字符串进行加密处理得到所述目标子客户端对应的授权码;保存所述授权码及其所对应的所述授权范围以及用户相关信息。

一种示例中,所述第二服务器73生成所述授权码的实现代码可以包括:

@resource(name=”userredisclient”)

privateredisclusterserviceredisclient;

privatestaticfinalinttime=10*60;//有效时长为10*60秒;

privatefinalstringuserprefix=“user:”;//存储的用户前缀为“user:”;

privatefinalstringunique_key=”user:unique:key:index”;

/**

*方法:creategrantcode<br>

*描述:授权码的生成过程<br>

*@paramclientidstr

*@paramscopestr

*@paramuser

*@return

*@throwsexception

*/

publicstringcreategrantcode(stringappidstr,stringscopestr,useruser)throwsexception{

longincr=redisclient.incr(unique_key);//获取全局自增数字;

stringstr=appidstr+scopestr+string.valueof(system.nanotime())+incr;//拼装待加密字符串(clientid(所述目标子客户端的标识)+scope(授权范围)+当前时间戳);

stringencryptedstr=shaencode(str);//基于前述待加密字符串生成授权码;

redisclient.setwithexpiretime(userprefix+encryptedstr+“:scope”,scopestr,time);//保存本次请求的授权码所对应的授权范围;

redisclient.setwithexpiretime(userprefix+encryptedstr+“:user”,jsonobject.tojsonstring(user),time);//保存本次请求的授权码所对应的用户相关信息;

returnencryptedstr;//返回授权码;

}

所述授权码的长度可以为预设长度,比如可以是40bit,示例性的,某一个授权码可以是“fec1cdc7b5c5f0f4e32c36dc08a5b35bee83e8e9”。

所述授权码的作用可以是用于后续换取令牌(access_token);该授权码可以具备有效时长,在授权码在所述第二服务器侧保存时长超过有效时长的情况下,可以将该授权码设置为失效状态。另外,一个授权码仅用于换取一次令牌,在第二服务器侧,若确定一个授权码已经成功换取对应的令牌的情况下,也可以将该授权码设置为失效状态。

所述第二服务器73,还用于在生成所述授权码的时候,对所述授权码进行保存;所述第二服务器73,还用于在所述目标子客户端对应的所述授权码的保存时长达到有效时长的情况下,设置所述目标子客户端对应的所述授权码为失效状态。其中,所述有效时长可以根据实际情况进行设置,比如可以为10分钟,又或者可以为5分钟等等。

所述目标子客户端712,用于完成资源加载的情况下,开启第一计时器;在所述第一计时器的计时时长达到第一预设时长且未接收到所述主客户端发送的授权码的情况下,所述目标子客户端控制在所述主客户端的所述目标展示区域展示登录页面;其中,所述登录页面中包含账号和/或密码的输入区域。

所述目标子客户端712,用于基于预设密钥对所述授权码进行加密处理得到所述请求信息。

所述目标子客户端712,具体用于将当前时间戳、签名算法类型、所述目标子客户端的标识以及所述授权码作为初始请求参数;所述目标子客户端对所述初始请求参数进行拼接得到字符串;所述目标子客户端基于所述预设密钥以及所述字符串进行处理得到签名串;所述目标子客户端将所述签名串添加至所述初始请求参数得到目标请求参数,基于所述目标请求参数生成所述请求信息。

所述第二服务器73,用于接收目标子客户端发来的请求信息,对所述请求信息中包含的授权码进行验证;在验证通过的情况下,向所述目标子客户端发送用户身份信息。

这里,所述第二服务器可以基于保存的所述目标子客户端对应的授权码及其对应的有效时长,对所述请求信息中包含的授权码进行验证。比如,基于请求信息的接收时刻确定所述目标子客户端对应的授权码是否处于有效时长内,若是,则验证通过(或验证成功);否则,验证不通过(或验证失败)。

所述目标子客户端712,用于在所述第二服务器对所述请求信息中的所述授权码验证失败的情况下,所述目标子客户端控制在所述主客户端的目标展示区域展示登录页面;其中,所述登录页面中包含账号和/或密码的输入区域。

所述目标子客户端712,用于基于所述用户身份信息从所述第一服务器获取已登录成功账号的账号相关信息;所述第一服务器72,用于基于所述用户身份信息向所述目标子客户端发送已登录成功账号的账号相关信息。

关于所述主客户端711和所述目标子客户端712的具体处理,以及所述主客户端711与所述目标子客户端712之间的交互,在前述第一方面以及第二方面的实施例已经详细说明,这里不再重复。

最后,结合图8,以主客户端为云音乐客户端、目标子客户端为所述云音乐客户端相关联的联运游戏客户端、第二服务器为云音乐客户端运行时所关联的云音乐账号服务器、第一服务器为联运游戏客户端运行时所关联的游戏服务器为例,对系统的处理进行示例性说明:

s801:用户在云音乐客户端内点击试玩游戏按钮,触发云音乐客户端相关联的联运游戏客户端开始进行资源加载。

具体的,如图8所示,云音乐客户端可以通过其第一通信sdk以及联运游戏客户端的第二通信sdk向所述联运游戏客户端发送启动指令,以使得联运游戏客户端开始进行资源加载。

另外,在联运游戏客户端完成资源加载之后,还可以向云音乐客户端反馈加载完成的指示。

s802:联运游戏客户端完成资源加载,发送登录指令到云音乐客户端。

另外,还可以包括:如果登录指令发送失败,则可以所述联运游戏客户端可以控制云音乐客户端在目标展示区域内展示登录页面,以使得用户输入帐号和/或密码进行登录。这里,关于登录指令发送失败的原因以及登录页面的样式以及输入账号和/或密码的处理与前述实施例相同,不重复说明。

这里,如图8中所示,所述登录指令具体可以是发送至云音乐客户端的oauth(认证)服务,或称为云音乐客户端的认证服务功能;另外,所述登录指令可以是通过联运游戏客户端的第二通信sdk以及云音乐客户端内的第一通信sdk进行传输。

此外,云音乐客户端内的第一通信sdk还可以向联运游戏客户端反馈接收指令成功的信息,此时联运游戏客户端可以等待用户完成授权,也就是等待接收授权码。

s803:云音乐客户端向云音乐账号服务器发送授权码获取请求。

这里,云音乐客户端可以通过内部的oauth服务(或认证服务功能)从mysql数据库中查询该用户是否授权过该联运游戏客户端,如果授权过,则云音乐客户端内的oauth服务直接向云音乐账号服务器发送授权码获取请求;若未授权过,则展示授权页面,在用户点击授权按键的情况下云音乐客户端内的oauth服务向云音乐账号服务器授权码获取请求。其中授权页面的相关说明与前述实施例相同。

关于授权码的具体获取以及生成方式在前述实施例已经详细说明,这里不做赘述。

s804:云音乐客户端获取授权码。

s805:云音乐客户端发送授权码给联运游戏客户端。相应的,联运游戏客户端接收到授权码。

这里,联运游戏客户端可以在完成s802之后,通过轮询方式监听授权码,如果1分钟未接收到授权码,则直接弹出登录页面让用户输入帐号、密码信息完成登录(具体处理参见前述实施例不做重复说明)。如果1分钟内接收到授权码,则联运游戏客户端执行s806的处理。

s806:联运游戏客户端基于所述授权码生成请求信息,发送请求信息至云音乐账号服务器,从云音乐账号服务器获取用户身份信息。

具体可以是联运游戏客户端通过云音乐开放平台调用云音乐账号服务器,以获取如下信息:用户名,用户头像,(用户登录)令牌,用户id(即用户身份信息),令牌失效时间等等。

另外,若在云音乐账号服务器侧授权码验证失败,比如授权码被篡改或超时失效等情况导致的授权码验证失败,则联运游戏客户端控制在云音乐客户端弹出登录页面,让用户输入帐号和/或密码完成登录。

s807:联运游戏客户端获取用户身份信息后,根据用户身份信息从游戏服务器获取该已登录成功账号的账号相关信息,在云音乐客户端的目标展示区域内展示联运游戏客户端的登录态。

其中,已登录成功账号的账号相关信息可以是用户在联运游戏客户端中已登录成功账号下创建的角色,使用的道具、皮肤等信息。

上述联运游戏客户端,可以是手游开发商将云音乐方提供的联运sdk植入到自己的游戏客户端中得到的;该联运游戏客户端只能使用云音乐客户端的帐号(也就是用户身份信息)登录。

可见,通过采用上述方案,由主客户端获取其相关联的目标子客户端的授权码,将该授权码发送至目标子客户端,以使得目标子客户端基于该授权码获取用户身份信息之后完成在第一服务器的登录。从而通过跨客户端传递授权码的方式,避免用户每次登录目标子客户端均需要输入账号以及密码的操作,提升了登录处理的效率。

另外,由于在主客户端内部即可完成针对目标子客户端的授权以及登录的处理,使得目标子客户端的授权码的传输受到主客户端的容器的保护,可以避免信息泄露,保证了目标子客户端的登录处理的安全性。

再次,由于在目标子客户端内通过授权码生成请求信息的处理中进行加密的处理,从而可以保证报文不被篡改,进一步保证了整体处理的安全性。

示例性介质

在介绍了本公开示例性实施方式的方法之后,接下来,参考图9对本公开示例性实施方式的介质进行说明。

在一些可能的实施方式中,本公开的各个方面还可以实现为一种计算机可读介质,其上存储有程序,当程序被处理器执行时用于实现本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施方式的客户端登录方法中的步骤。

具体地,上述处理器执行上述程序时用于实现如下步骤:

在目标子客户端响应于主客户端的启动指令完成资源加载的情况下,所述主客户端获取所述目标子客户端对应的授权码;其中,所述目标子客户端为所述主客户端相关联的n个子客户端中之一,n为大于等于1的整数;所述目标子客户端根据所述授权码获取用户身份信息;

所述主客户端将所述授权码发送至所述目标子客户端;

在所述目标子客户端基于所述用户身份信息在第一服务器登录成功的情况下,所述主客户端在目标展示区域内展示所述目标子客户端的登录态;其中,所述第一服务器为所述目标子客户端运行时所关联的服务器。

以及,

在目标子客户端响应于主客户端的启动指令完成资源加载的情况下,所述目标子客户端获取所述主客户端发送的授权码;其中,所述目标子客户端为所述主客户端相关联的n个子客户端中之一,n为大于等于1的整数;

所述目标子客户端基于所述授权码生成请求信息;

所述目标子客户端基于所述请求信息从第二服务器获取用户身份信息;其中,所述第二服务器为所述主客户端运行时所关联的服务器;

所述目标子客户端基于所述用户身份信息在所述第一服务器登录,在登录成功时通知所述主客户端在目标展示区域内展示所述目标子客户端的登录态;其中,所述第一服务器为所述目标子客户端运行时所关联的服务器。

需要说明的是:上述的介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是但不限于:电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。

如图9所示,描述了根据本公开的实施方式的介质900,其可以采用便携式紧凑盘只读存储器(cd-rom)并包括程序,并可以在设备上运行。然而,本公开不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于:电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。

可以以一种或多种程序设计语言的任意组合来编写用于执行本公开操作的程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如java、c++等,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算设备。

示例性装置

在介绍了本公开示例性实施方式的方法之后,接下来,对本公开示例性实施方式的装置进行说明。

本公开的第四个方面提供一种主客户端,如图10所示,包括:

授权码获取单元1001,用于在目标子客户端响应于启动指令完成资源加载的情况下,获取所述目标子客户端对应的授权码;其中,所述目标子客户端为所述主客户端相关联的n个子客户端中之一,n为大于等于1的整数;所述目标子客户端根据所述授权码获取用户身份信息;

第一内部通信单元1002,用于将所述授权码发送至所述目标子客户端;

展示单元1003,用于在所述目标子客户端基于所述用户身份信息在第一服务器登录成功的情况下,在目标展示区域内展示所述目标子客户端的登录态;其中,所述第一服务器为所述目标子客户端运行时所关联的服务器。

在本公开的一个实施例中,所述展示单元1003,用于在目标展示区域内展示所述目标子客户端的授权页面;

所述授权码获取单元1001,用于响应于针对所述目标子客户端的授权页面中的目标按键的操作,获取所述目标子客户端对应的授权码。

在本公开的一个实施例中,所述授权码获取单元1001,用于从第二服务器获取所述目标子客户端对应的授权码;其中,所述第二服务器为所述主客户端运行时所关联的服务器。

本公开实施例的第五方面提供一种目标子客户端,如图11所示,包括:

第二内部通信单元1101,用于在响应于主客户端的启动指令完成资源加载的情况下,获取所述主客户端发送的授权码;其中,所述目标子客户端为所述主客户端相关联的n个子客户端中之一,n为大于等于1的整数;

请求生成单元1102,用于基于所述授权码生成请求信息;

身份信息获取单元1103,用于基于所述请求信息从第二服务器获取用户身份信息;其中,所述第二服务器为所述主客户端运行时所关联的服务器;

登录单元1104,用于基于所述用户身份信息在所述第一服务器登录,在登录成功时通知所述主客户端在目标展示区域内展示所述目标子客户端的登录态;其中,所述第一服务器为所述目标子客户端运行时所关联的服务器。

在本公开的一个实施例中,所述请求生成单元1102,用于基于预设密钥对所述授权码进行加密处理得到所述请求信息。

在本公开的一个实施例中,所述请求生成单元1102,用于将当前时间戳、签名算法类型、所述目标子客户端的标识以及所述授权码作为初始请求参数;对所述初始请求参数进行拼接得到字符串;基于所述预设密钥以及所述字符串进行处理得到签名串;将所述签名串添加至所述初始请求参数得到目标请求参数,基于所述目标请求参数生成所述请求信息。

在本公开的一个实施例中,还包括:

展示控制单元1105,用于在所述第二服务器对所述请求信息中的所述授权码验证失败的情况下,控制在所述主客户端的目标展示区域展示登录页面;其中,所述登录页面中包含账号和/或密码的输入区域。

在本公开的一个实施例中,还包括:

展示控制单元1105,用于进行资源加载完成的情况下,开启第一计时器;在所述第一计时器的计时时长达到第一预设时长且未接收到所述主客户端发送的授权码的情况下,控制在所述主客户端的所述目标展示区域展示登录页面;其中,所述登录页面中包含账号和/或密码的输入区域。

在本公开的一个实施例中,所述登录单元1104,用于基于所述用户身份信息从所述第一服务器获取已登录成功账号的账号相关信息。

根据本公开实施方式,由主客户端获取其相关联的目标子客户端的授权码,将该授权码发送至目标子客户端,以使得目标子客户端基于该授权码获取用户身份信息之后完成在第一服务器的登录。从而通过跨客户端传递授权码的方式,避免用户每次登录目标子客户端均需要输入账号以及密码的操作,提升了登录处理的效率。另外,由于在主客户端内部即可完成针对目标子客户端的授权以及登录的处理,使得目标子客户端的授权码的传输受到主客户端的容器的保护,可以避免信息泄露,保证了目标子客户端的登录处理的安全性。

示例性计算设备

在介绍了本公开示例性实施方式的方法、介质和装置之后,接下来,参考图12对本公开示例性实施方式的计算设备进行说明。

所属技术领域的技术人员能够理解,本公开的各个方面可以实现为系统、方法或程序产品。因此,本公开的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。

在一些可能的实施方式中,根据本公开实施方式的计算设备可以至少包括至少一个处理单元以及至少一个存储单元。其中,存储单元存储有程序代码,当程序代码被处理单元执行时,使得处理单元执行本说明书上述“示例性方法”部分中描述的根据本公开的各种示例性实施方式的客户端登录方法中的步骤。

下面参照图12来描述根据本公开的这种实施方式的计算设备1200。图12显示的计算设备1200仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。

如图12所示,计算设备1200以通用计算设备的形式表现。计算设备1200的组件可以包括但不限于:上述至少一个处理单元1201、上述至少一个存储单元1202,连接不同系统组件(包括处理单元1201和存储单元1202)的总线1203。

总线1203包括数据总线、控制总线和地址总线。

存储单元1202可以包括易失性存储器形式的可读介质,例如随机存取存储器(ram)12021和/或高速缓存存储器12022,可以进一步包括非易失性存储器形式的可读介质,例如只读存储器(rom)12023。

存储单元1202还可以包括具有一组(至少一个)程序模块12024的程序/实用工具12025,这样的程序模块12024包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。

计算设备1200也可以与一个或多个外部设备1204(例如键盘、指向设备等)通信。这种通信可以通过输入/输出(i/o)接口1205进行。并且,计算设备1200还可以通过网络适配器1206与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图12所示,网络适配器1206通过总线1203与计算设备1200的其它模块通信。应当理解,尽管图中未示出,可以结合计算设备1200使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。

应当注意,尽管在上文详细描述中提及了乐曲生成装置的若干单元/模块或子单元/子模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多单元/模块的特征和功能可以在一个单元/模块中具体化。反之,上文描述的一个单元/模块的特征和功能可以进一步划分为由多个单元/模块来具体化。

此外,尽管在附图中以特定顺序描述了本公开方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。

虽然已经参考若干具体实施方式描述了本公开的精神和原理,但是应该理解,本公开并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本公开旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1