谷歌访问不了网站的原因如何能正常访问?

本页面介绍了 Google 使用的 Cookie 类型和类似技术,还说明了 Google 和我们的合作伙伴如何在广告中使用 Cookie。Cookie 是由您访问的网站向您的浏览器发送的小段文本。它能帮助相应网站记住与您的访问活动相关的信息,以便下次访问时更加快捷,同时也能让该网站为您提供更加实用的服务。类似技术也可实现上述功能,比如用于标识应用/设备的唯一标识符、像素标签和 local storage。本页提到的 Cookie 和类似技术都可用于下述用途。如需了解我们在使用 Cookie 和其他信息时如何保护您的隐私,请参阅隐私权政策。下方所述的部分/全部 Cookie 或类似技术可能会存储在您所用的浏览器/应用/设备中。如需管理 Cookie 的使用方式,包括拒绝使用特定 Cookie,您可访问 g.co/privacytools。您也可在浏览器中管理 Cookie;不过,移动设备版浏览器可能不支持查看 Cookie。上述某些技术或许可以在设备/应用设置中进行管理。功能用于实现功能的 Cookie 和类似技术让您能够使用服务的基本功能。提供服务需要具备的基本功能包括:记住选择及偏好设置,例如您选择的语言;存储与您的会话相关的信息,例如购物车内的商品;实现功能或执行您请求的任务;以及实现有助于维护和改进相应服务的产品优化机制。某些 Cookie 和类似技术会用于保留您的偏好设置。例如,大多数使用 Google 服务的用户的浏览器中都有一个名为“NID”或“_Secure-ENID”的 Cookie,具体取决于他们选择的 Cookie 设置。我们会利用这些 Cookie 记住您的偏好设置和其他信息,例如您的首选语言、您希望每个搜索结果页显示的结果条数(比如 10 条或 20 条)以及您是否想开启 Google 的安全搜索过滤器。“NID”Cookie 会在用户最后一次使用的 6 个月后过期,而“_Secure-ENID”Cookie 的有效期则为 13 个月。名为“VISITOR_INFO1_LIVE”和“__Secure-YEC”的 Cookie 会用于在 YouTube 上实现类似用途,还会用于检测和解决此服务出现的问题。这两种 Cookie 的有效期分别为 6 个月和 13 个月。其他 Cookie 和类似技术会用于在特定会话期间维护和提升您的体验。举例来说,YouTube 会使用“PREF”Cookie 存储信息,例如您偏好的页面配置和播放设置(比如明确设置的自动播放选择、随机播放内容以及播放器尺寸)。对于 YouTube Music,这类偏好设置包括音量、重复模式和自动播放。该 Cookie 会在用户最后一次使用的 8 个月后过期。“pm_sess”Cookie 也会帮助维护您的浏览器会话,有效期为 30 分钟。Cookie 和类似技术可能还会用于改进 Google 服务的性能。例如,“CGIC”Cookie 可根据用户初始输入的内容自动补全搜索查询,从而提供更切合用户需求的搜索结果。该 Cookie 的有效期为 6 个月。Google 会使用有效期为 13 个月的“SOCS”Cookie 来存储用户的 Cookie 选择状态。安全用于保障安全性的 Cookie 和类似技术可帮助验证用户身份、防范欺诈行为以及在用户与服务互动时保障用户安全。用于验证用户身份的 Cookie 和类似技术可帮助确保只有账号的实际所有者能访问相应账号。例如,名为“SID”和“HSID”的 Cookie 包含关于用户 Google 账号 ID 和最近登录时间的记录,这些记录都经过了数字签名和加密。通过结合使用这些 Cookie,Google 可以防范很多类型的攻击,例如试图窃取您在 Google 服务中提交的表单内容的行为。某些 Cookie 和类似技术会用于检测垃圾内容、欺诈行为和滥用行为。例如,“pm_sess”和“YSC”Cookie 可用于确保浏览会话内的请求是用户(而非其他网站)发出的。这些 Cookie 可防止恶意网站在用户不知情的情况下代该用户执行操作。“pm_sess”Cookie 的有效期为 30 分钟,而“YSC”Cookie 仅在用户浏览会话期间有效。“__Secure-YEC”和“AEC”Cookie 会用于检测垃圾内容、欺诈行为和滥用行为,帮助确保广告主不会因欺诈性的或其他性质的无效展示或无效的广告互动而被误收费,并确保参与 YouTube 合作伙伴计划的 YouTube 创作者都能获得公正合理的报酬。“AEC”Cookie 的有效期为 6 个月,而“__Secure-YEC”Cookie 的有效期为 13 个月。数据分析用于分析用途的 Cookie 和类似技术可协助相关服务收集数据,以了解您与特定服务的互动情况。借助所获得的分析结果,服务提供者不但可改进内容,还可打造更好的功能,从而提升用户体验。某些 Cookie 和类似技术可帮助网站和应用了解访问者使用服务的情况。例如,Google Analytics(分析)会使用一系列 Cookie 代那些运用 Google Analytics(分析)服务的商家收集信息并向商家报告网站使用情况统计信息,但不会透露访问者的任何个人身份信息。“_ga”是 Google Analytics(分析)使用的主要 Cookie,能让此服务将一位访问者与另一位访问者区分开来。该 Cookie 的有效期为 2 年。所有实现了 Google Analysis(分析)的网站(包括 Google 服务)均会使用“_ga”Cookie。每个“_ga”Cookie 都是专属于特定媒体资源的,因此无法用来在不相关的网站上跟踪特定用户或浏览器。为了进行分析,Google 服务也会在 Google 搜索上使用“NID”和“_Secure-ENID”Cookie,并在 YouTube 上使用“VISITOR_INFO1_LIVE”和“__Secure-YEC”Cookie。Google 移动应用也可使用唯一标识符(例如“Google Usage ID”)进行分析。广告Google 会将 Cookie 用于广告用途,包括投放和呈现广告、展示个性化广告(具体取决于您在 myadcenter.google.com 和 adssettings.google.com/partnerads 上指定的设置)、限制相同广告向同一用户显示的次数、屏蔽您已选择不想再看到的广告以及衡量广告效果。“NID”Cookie 会用于在 Google 服务中向未登录账号的用户展示 Google 广告,而“ANID”“IDE”和“id”Cookie 会用于在非 Google 网站上展示 Google 广告。移动广告 ID(例如 Android 的广告 ID [AdID])用于在移动应用内实现类似用途,具体取决于您的设备设置。如果您启用了“个性化广告”功能,系统会使用“ANID”和“IDE”Cookie 向您展示个性化广告。如果您关闭了“个性化广告”功能,系统会使用“ANID”和“id”Cookie 记住这项偏好设置,因此您不会再看到个性化广告。“NID”Cookie 会在距用户最后一次使用满 6 个月后过期。在欧洲经济区 (EEA)、瑞士和英国 (UK),“ANID”“IDE”和“id”Cookie 的有效期为 13 个月;在其他国家/地区,该 Cookie 的有效期为 24 个月。其他 Google 服务(例如 YouTube)可能也会使用这些和其他 Cookie 及技术(例如“VISITOR_INFO1_LIVE”Cookie)展示广告,具体取决于您的广告设置。用于广告用途的某些 Cookie 和类似技术适用于已登录账号的 Google 服务用户。例如,系统会使用“DSID”Cookie 识别非 Google 网站上的已登录用户,以便相应地遵循用户的广告个性化设置。“DSID”Cookie 的有效期为 2 周。通过 Google 的广告平台,商家可在 Google 服务中及非 Google 网站上投放广告。某些 Cookie 支持 Google 在第三方网站上展示广告,这些 Cookie 是在您访问的网站所属的网域中设置的,例如,“_gads”Cookie 支持在网站上展示 Google 广告。名称以“_gac_”开头的 Cookie 来自 Google Analytics(分析),可供广告主用于衡量其广告系列的用户活动和效果。“_gads”Cookie 的有效期为 13 个月,“_gac_”Cookie 的有效期为 90 天。某些 Cookie 和类似技术会用于衡量广告和广告系列的效果以及 Google 广告在您访问的网站上的转化率。例如,名称以“_gcl_”开头的 Cookie 主要用于协助广告主确定用户点击广告并最终在其网站上执行操作(例如购买)的次数。用于衡量转化率的 Cookie 不会用于投放个性化广告。“_gcl_”Cookie 的有效期为 90 天。类似的技术(例如 Android 设备上的广告 ID)也可用于衡量广告和广告系列的效果。您可以在 Android 设备上管理您的广告 ID 设置。如需详细了解用于广告用途的 Cookie,请点击此处。个性化用于个性化用途的 Cookie 和类似技术可通过提供个性化内容和功能提升您的体验,具体取决于您在 g.co/privacytools 上指定的设置或者您的应用及设备设置。个性化内容和功能包括更切合您需求的结果和推荐内容、为您量身定制的 YouTube 首页、根据您的兴趣投放的广告,等等。例如,借助“VISITOR_INFO1_LIVE”Cookie,系统或许能在 YouTube 上基于以往的观看和搜索活动提供个性化推荐内容。“NID”Cookie 则可于您在 Google 搜索中输入搜索字词时提供个性化自动补全功能。此类 Cookie 会在距用户最后一次使用满 6 个月后过期。另一个 Cookie“UULE”会从您的浏览器中向 Google 的服务器发送确切位置信息,以便 Google 向您显示与您所在位置相关的结果。该 Cookie 的使用方式取决于您的浏览器设置以及您是否已选择为浏览器开启位置信息服务。“UULE”Cookie 的有效期为至多 6 小时。即使您拒绝将 Cookie 和类似技术用于个性化用途,您所看到的非个性化的内容和功能仍可能受到情境因素(例如您的位置、所用语言、设备类型或您正在查看的内容)的影响。
注意:本指南适用于使用 Play 游戏服务 v1 SDK。如需了解最新的 SDK,请参阅 Play 游戏服务 v2 文档。如果您的游戏使用后端服务器,我们建议您使用 Google 登录对玩家进行身份验证,并将玩家的身份安全地传递到后端服务器。这也让您的游戏可以安全地检索玩家的身份和其他数据,而不会在通过设备时面临可能被篡改的风险。在这种情况下,您的游戏会照常提示玩家登录 Google Play 游戏服务。当玩家成功登录时,GoogleSignInAccount 对象包含一个特殊的一次性代码(称为服务器授权代码),客户端会将其传递到服务器。然后,在服务器上用服务器授权代码换取 OAuth 2.0 令牌,以供服务器用于调用 Google Play 游戏服务 API。如需获得有关在游戏中添加登录功能的其他指导,请参阅 Android 游戏中的登录功能。如需查看详细的代码示例,了解如何使用 Google 登录机制对玩家进行身份验证,请参阅 GitHub 上的 clientserverskeleton 示例。如需离线访问,必须执行以下步骤:在 Google Play 管理中心内:为您的游戏服务器创建凭据。凭据的 OAuth 客户端类型为“Web”。
在 Android 应用中:在登录过程中,请求获取服务器凭据的服务器授权代码,并将其传递给您的服务器。
在游戏服务器上:使用 Google 身份验证服务将服务器授权代码替换为 OAuth 访问令牌,然后使用此代码调用 Play 游戏服务 REST API。
准备工作您需要先在 Google Play 管理中心内添加游戏,然后才能将 Google 登录集成到您的游戏中,如设置 Google Play 游戏服务中所述。为您的游戏创建关联的服务器端 Web 应用Google Play 游戏服务未针对网络游戏提供后端支持。但该服务为 Android 游戏的服务器提供了后端服务器支持。如果您希望在服务器端应用中使用适用于 Google Play 游戏服务的 REST API,请按以下步骤操作:在 Google Play 管理中心的关联的应用部分,为您的游戏创建一个关联的 Web 应用。请注意,launch_url 不用于此流程,并且可以留空。
如需获取应用的凭据信息,请按以下步骤操作:
在 Google Play 管理中心内的游戏中,点击游戏详情。
向下滚动到 API 控制台项目部分,然后点击指向 API 控制台项目的链接。
在 Google API 控制台中的 API 和服务 & gt; 凭据屏幕中,下载 Web 应用的 client_secret.json 文件,并将其保存到服务器可以访问的位置。记录凭据的客户端 ID 以供日后参考。
重启服务器端应用,使其准备好接受来自游戏客户端应用的请求。
GoogleSignInClient 类是主要入口点,用于检索当前已登录玩家的帐号,以及让玩家登录(如果玩家之前未在设备上的应用中这样做)。注意:GoogleSignInClient 类使用 Google Play 服务 Task 类异步返回结果。如需详细了解如何使用任务来管理线程工作,请参阅 Tasks API 开发者指南。如需创建登录客户端,请按以下步骤操作:通过 GoogleSignInOptions 对象创建登录客户端。在 GoogleSignInOptions.Builder 中,如需配置登录,您必须指定 GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN。
此外,您还必须调用 GoogleSignInOptions.Builder.requestServerAuthCode() 方法并以服务器的客户端 ID 作为参数,为您的游戏指定需要后端服务器授权代码。稍后,按照获取服务器授权代码中所述,检索后端服务器上的身份验证令牌。
调用 GoogleSignIn.getClient() 方法并传入您之前配置的选项。如果调用成功,Google Sign-In API 将返回 GoogleSignInClient 实例。
获取 GoogleSignInClient 实例后,您应继续从 Activity 的 onResume() 以静默方式让玩家登录,如执行静默登录中所述。
示例如下:
private static final int RC_SIGN_IN = 9001;
private GoogleSignInClient mGoogleSignInClient;
private void startSignInForAuthCode() {
// Client ID for your backend server.
String webClientId = getString(R.string.webclient_id);
GoogleSignInOptions signInOption = new
GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
.requestServerAuthCode(webClientId)
.build();
GoogleSignInClient signInClient = GoogleSignIn.getClient(this, signInOption);
Intent intent = signInClient.getSignInIntent();
startActivityForResult(intent, RC_SIGN_IN);
}
获取服务器授权代码如需检索您的游戏可用于获取后端服务器上访问令牌的服务器授权代码,请对 Google 登录机制在玩家成功登录时返回的 GoogleSignInAccount 对象调用 getServerAuthCode() 方法。示例如下:
// Auth code to send to backend server.
private String mServerAuthCode;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()) {
mServerAuthCode = result.getSignInAccount().getServerAuthCode();
} else {
String message = result.getStatus().getStatusMessage();
if (message == null
message.isEmpty()) {
message = getString(R.string.signin_other_error);
}
new AlertDialog.Builder(this).setMessage(message)
.setNeutralButton(android.R.string.ok, null).show();
}
}
}
使用服务器授权代码交换服务器上的访问令牌将服务器授权代码发送到后端服务器以换取访问令牌和刷新令牌。
访问令牌可用于代表玩家调用 Google Play 游戏服务 API,还可选择存储刷新令牌以便在访问令牌到期时获取新的访问令牌。以下代码段展示了如何在 Java 编程语言中实现用服务器端授权代码换取访问令牌的服务器端代码。它使用 clientserverskeleton 示例应用:/**
* Exchanges the authcode for an access token credential.
The credential
* is the associated with the given player.
*
* @param authCode - the non-null authcode passed from the client.
* @param player
- the player object which the given authcode is
*
associated with.
* @return the HTTP response code indicating the outcome of the exchange.
*/
private int exchangeAuthCode(String authCode, Player player) {
try {
// The client_secret.json file is downloaded from the Google API
// console.
This is used to identify your web application.
The
// contents of this file should not be shared.
//
File secretFile = new File("client_secret.json");
// If we don't have the file, we can't access any APIs, so return
// an error.
if (!secretFile.exists()) {
log("Secret file : " + secretFile
.getAbsolutePath() + "
does not exist!");
return HttpServletResponse.SC_FORBIDDEN;
}
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(
JacksonFactory.getDefaultInstance(), new
FileReader(secretFile));
// Extract the application id of the game from the client id.
String applicationId = extractApplicationId(clientSecrets
.getDetails().getClientId());
GoogleTokenResponse tokenResponse =
new GoogleAuthorizationCodeTokenRequest(
HTTPTransport,
JacksonFactory.getDefaultInstance(),
"https://oauth2.googleapis.com/token",
clientSecrets.getDetails().getClientId(),
clientSecrets.getDetails().getClientSecret(),
authCode,
"")
.execute();
log("hasRefresh == " + (tokenResponse.getRefreshToken() != null));
log("Exchanging authCode: " + authCode + " for token");
Credential credential = new Credential
.Builder(BearerToken.authorizationHeaderAccessMethod())
.setJsonFactory(JacksonFactory.getDefaultInstance())
.setTransport(HTTPTransport)
.setTokenServerEncodedUrl("https://www.googleapis.com/oauth2/v4/token")
.setClientAuthentication(new HttpExecuteInterceptor() {
@Override
public void intercept(HttpRequest request)
throws IOException {
}
})
.build()
.setFromTokenResponse(tokenResponse);
player.setCredential(credential);
// Now that we have a credential, we can access the Games API.
PlayGamesAPI api = new PlayGamesAPI(player, applicationId,
HTTPTransport, JacksonFactory.getDefaultInstance());
// Call the verify method, which checks that the access token has
// access to the Games API, and that the player id used by the
// client matches the playerId associated with the accessToken.
boolean ok = api.verifyPlayer();
// Call a Games API on the server.
if (ok) {
ok = api.updatePlayerInfo();
if (ok) {
// persist the player.
savePlayer(api.getPlayer());
}
}
return ok ? HttpServletResponse.SC_OK :
HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
} catch (IOException e) {
e.printStackTrace();
}
return HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
}
如需详细了解如何代表已登录玩家从后端服务器访问 Google API,请参阅启用服务器端访问。如需将玩家退出游戏,请在 GoogleSignInClient 上调用 signOut() 方法。如需查看示例代码段,请参阅使玩家退出帐号。从服务器调用 REST API有关可用的 API 调用的完整说明,请参阅适用于 Google Play 游戏服务的 REST API。以下这些 REST API 调用示例可能对您有所帮助:玩家想要获取已登录玩家的 ID 和个人资料数据?使用 'me' 作为 ID 调用 Players.get。
好友请务必查看好友指南,以便对好友进行更详细的说明。想要检索玩家的好友列表?使用 'friends_all' 作为 collection 调用 Players.list。
检查您是否有权访问好友列表?对 me 调用 Players.get,并查看响应中的 profileSettings.friendsListVisibility 字段。
成就请务必查看成就指南,其中对成就进行了更详细的说明。想要获取当前成就的列表?您可以调用 AchievementDefinitions.list。
然后结合调用 Achievements.list 的结果,便可了解玩家解锁了哪些成就。
玩家是否获得了成就?使用 Achievements.unlock 解锁成就!
玩家是否在达成部分成就上取得了进展?使用 Achievements.increment 报告进度(并了解玩家是否已解锁该进度)。
您要调试尚未正式发布的游戏吗?尝试从 Management API 调用 Achievements.reset 或 Achievements.resetAll 可将成就重置为其原始状态。
排行榜请务必查看排行榜指南,其中更详细地介绍了排行榜。是否想获取游戏中所有记分板的列表?调用 Leaderboards.list。
玩家是否已完成游戏?您可将他们的得分提交到 Scores.submit 并了解该得分是否是新的最高得分。
要显示排行榜吗?从 Scores.list 获取数据并向用户显示。
使用 Scores.listWindow 查找一系列接近用户最高得分的得分。
如需详细了解玩家在特定排行榜中的得分(例如,如果玩家是所有玩家中排名前 12%),请调用 Scores.get。
您正在调试游戏吗?尝试从 Management API 调用 Scores.reset 以重置该玩家在特定排行榜中的所有得分

我要回帖

更多关于 谷歌访问不了网站的原因 的文章

 

随机推荐