使用电子邮件模板发送帐户恢复电子邮件

本教程介绍如何使用 PlayFab 的电子邮件模板功能向玩家的联系人电子邮件地址发送帐户恢复邮件来让玩家重置密码。

要求

重要

这是高级教程。 请确保满足所有要求,否则无法完成本教程。

  • 要使用电子邮件模板发送自定义电子邮件,需要拥有自己的 SMTP 服务器以及用户名和密码。 在使用我们的教程使用加载项设置 SMTP 服务器之前,请确保拥有自己的 SMTP 服务器。

注意

可以使用 Gmail 进行测试,但 Gmail 限制每天只能发送 2,000 封电子邮件。

  • 在调用帐户恢复逻辑之前,需要有具有用户名和密码的玩家,因此,必须具备有关如何创建玩家的基础知识。
  • 如果不熟悉 Game Manager,请阅读 Game Manager 快速入门,因为我们将在 Game Manager 中创建电子邮件模板。
  • 需要了解如何使用玩家档案,以便确认有必要使用电子邮件来检查联系人电子邮件是否已添加到玩家档案中。 请阅读获取玩家档案教程中获取玩家档案的方法,并确保在 游戏客户端个人资料选项 下允许 联系人电子邮件地址

第 1 步 - 创建电子邮件模板

我们要做的第一件事是创建帐户恢复电子邮件模板。

  • 转到 内容
  • 选择 电子邮件模板 选项卡。
  • 选择 新电子邮件模板 按钮。

Game Manager - Content - Email Templates

添加一个 新电子邮件模板,按如下方式填写字段,并将 错误回调 URL 留空:

  • 模板名称: PasswordRecoveryTemplate
  • 模板名称: 帐户恢复
  • 电子邮件使用者: 要求重置密码
  • 电子邮件正文: (输入如下内容)
<head></head>
<body><p> You recently requested a password reset with us.</p>
<p>Please click <a href='$ConfirmationUrl$'>here</a> to be directed to a page to reset your password. Thanks!</p>
  • 发件人名称: 需要在电子邮件的发件人字段中显示的名称。
  • 发件人电子邮件地址:想要在电子邮件的发件人字段中显示的电子邮件地址。 这必须是 SMTP 服务器允许发送电子邮件的发件人电子邮件域。

注意

Gmail 等某些电子邮件服务器将忽略此字段,并从使用 SMTP 服务器设置的帐户发送。

  • 回调 URL: 密码恢复表单的回调 URL。 表单必须至少包含 密码 字段,以供玩家输入新密码。

几个注意事项

  • 电子邮件正文中的 $ConfirmationUrl$ 生成一个自定义 URL,如果选择它,则跟踪用户选择该 URL 后,发出向回调 URL 的重定向。 在本例中,是注入定位标记中。
  • 回调 URL 是在玩家选择确认 URL 链接后 PlayFab 将重定向到的 URL。 它需要是一个托管的 Web 表单,其中至少包含一个 Password 字段,以便在本教程稍后部分进行 ResetPassword API 调用。

Game Manager - Content - Email Templates - New Email Template

填写表格后,选择 保存电子邮件模板 按钮,将重定向回到包含 电子邮件模板 显示的列表的页面。 记下将在第 4 步中使用的电子邮件模板的 ID。

Game Manager - Content - 电子邮件模板 ID

第 2 步 - 为玩家添加用户名、密码、登录电子邮件和联系人电子邮件

对于此步骤,需要一个现有玩家帐户。

我们将使用 AddUsernamePassword 添加用户名、密码和登录电子邮件。 此外,我们使用 AddOrUpdateContactEmail 向玩家添加联系人电子邮件。

注意

玩家档案中的联系人电子邮件字段与玩家档案中的登录电子邮件字段不同,即使它们可能 包含相同的电子邮件地址。 每次向玩家发送电子邮件时,都将转到联系人电子邮件地址。

C# 代码示例

在以下示例中,我们登录一个玩家,然后使用 AddUsernamePassword 添加用户名、密码和登录电子邮件。 然后,我们使用 AddOrUpdateContactEmail 添加联系人电子邮件。 确保与该玩家关联的电子邮件地址是能够访问的电子邮件地址。

void CreatePlayer()
{
    var loginReq = new LoginWithCustomIDRequest
    {
        CustomId = "SomeCustomID", // replace with your own Custom ID
        CreateAccount = true // otherwise this will create an account with that ID
    };

    var username = "yourusername"; // Set this to your username
    var password = "yourpassword"; // Set this to your password
    var emailAddress = "testaddress@example.com"; // Set this to your own email

    PlayFabClientAPI.LoginWithCustomID(loginReq, loginRes =>
    {
        Debug.Log("Successfully logged in player with PlayFabId: " + loginRes.PlayFabId);
        AddUserNamePassword(username, password, emailAddress); // Add a username and password
        AddOrUpdateContactEmail(loginRes.PlayFabId, emailAddress);
    }, FailureCallback);
}

void AddUserNamePassword()
{
    var request = new AddUsernamePasswordRequest
    {
        Username = "yourusername",
        Password = "yourpassword",
        Email = "exampleemail@emaple.com" // Login email
    };
    PlayFabClientAPI.AddUsernamePassword(request, result =>
    {
        Debug.Log("The player's account now has username and password");
    }, FailureCallback);
}

void AddOrUpdateContactEmail(string playFabId, string emailAddress)
{
    var request = new AddOrUpdateContactEmailRequest
    {
        PlayFabId = playFabId,
        EmailAddress = emailAddress
    };
    PlayFabClientAPI.AddOrUpdateContactEmail(request, result =>
    {
        Debug.Log("The player's account has been updated with a contact email");
    }, FailureCallback);
}

void FailureCallback(PlayFabError error)
{
    Debug.LogWarning("Something went wrong with your API call. Here's some debug information:");
    Debug.LogError(error.GenerateErrorReport());
}

第 3 步 - 确认已将此联系人电子邮件添加到该玩家的档案中

下一步,确认已将此联系人电子邮件添加到该玩家的档案中。 登录到 Game Manager,然后访问“玩家的个人资料”页面。 可以看到为该玩家列出的 联系人电子邮件

游戏管理员 - 玩家个人资料 - 联系人电子邮件

PlayerProfileViewConstraints 中的 ShowContactEmailAddresses 设置为 true 时,还可以调用 GetPlayerProfile,以证明该玩家现在具有我们刚刚添加的联系人电子邮件。

第 4 步 - 发送帐户恢复模板电子邮件

接下来,使用 SendEmailFromTemplate 及第 1 步中的电子邮件模板 ID 将验证电子邮件发送到我们在第 2 步中创建的玩家。

C# 代码示例

在以下示例中,我们使用 SendCustomAccountRecoveryEmail 发送帐户恢复电子邮件。

void SendCustomAccountRecoveryEmail(string emailAddress, string emailTemplateId)
{
    var request = new SendCustomAccountRecoveryEmailRequest
    {
        Email = emailAddress,
        EmailTemplateId = emailTemplateId
    };

    PlayFabServerAPI.SendCustomAccountRecoveryEmail(request, res =>
    {
        Debug.Log("An account recovery email has been sent to the player's email address.");
    }, FailureCallback);
}

void FailureCallback(PlayFabError error)
{
    Debug.LogWarning("Something went wrong with your API call. Here's some debug information:");
    Debug.LogError(error.GenerateErrorReport());
}

第 5 步 - 检查电子邮件是否已发送

最后,我们可检查是否发送了帐户恢复电子邮件。

第一步是转到玩家的 PlayStream 区域。 在 游戏管理员 中:

  • 从左侧菜单中选择 玩家
  • 转到屏幕的 PlayStream 区域。
  • 其应显示 发送电子邮件事件

Game Manager - Players - PlayStream - Sent email event

选择事件上的 信息 图标应显示类似于如下所示的 JSON。

{
    "EventName": "sent_email",
    "EventNamespace": "com.playfab",
    "Source": "PlayFab",
    "EntityType": "player",
    "TitleId": "YourTitleId",
    "EventId": "655f14ac45b341b59c217dcf04d26ef9",
    "EntityId": "64647AA368D6448E",
    "SourceType": "BackEnd",
    "Timestamp": "2017-10-27T23:53:58.8717009Z",
    "History": null,
    "CustomTags": null,
    "Reserved": null,
    "emailTemplateId": "DC3E1B28881C6071",
    "emailTemplateName": "PasswordRecoveryTemplate",
    "emailTemplateType": "AccountRecovery",
    "success": true,
    "emailName": "Primary"
}

若要检查是否确实收到了此电子邮件,则转到在第 2 步中创建的玩家电子邮件。 应有一个类似于如下所示的电子邮件。

要求重设密码 - 电子邮件

如果检查该电子邮件中的 URL,可以看到它与此示例类似。

https://a5f3.playfabapi.com/EmailConfirmation/Confirm/?token=2346241B7C277796&titleId=A5F3&templateId=38017AAE7F494AB3

当玩家选择该 URL 时,会发生以下三种情况:

  1. PlayFab 生成一个新 PlayStream 事件,称为 auth_token_validated。 这样就知道该玩家在电子邮件中选择了该 URL。 可以使用该事件触发操作,例如向玩家授予硬币或物品。
  2. PlayFab 返回一个重定向 URL,将该玩家发送到回调 URL 网站。 在这种情况下,它应该是游戏网站,其中包含供玩家输入新密码的表单。
  3. 重定向 URL 将在查询字符串中包含一个类似以下内容的令牌。

https://www.example.com/?token=2346241B7C277796.

第 6 步 - 重置玩家密码

待玩家定向到回调 URL 并用新密码填写表单后,除了查询字符串中的令牌以外,还可以使用此信息发出 ResetPassword 调用。

C# 代码示例

在下面的示例中,我们使用 ResetPassword 根据令牌和玩家在表单中指定的新密码重置玩家密码。

void ResetPassword(string newPassword, string token)
{
    var request = new ResetPasswordRequest
    {
        Password = newPassword,
        Token = token
    };

    PlayFabAdminAPI.ResetPassword(request, result =>
    {
        Debug.Log("The player's password has been resetl");
    }, FailureCallback);

}

void FailureCallback(PlayFabError error)
{
    Debug.LogWarning("Something went wrong with your API call. Here's some debug information:");
    Debug.LogError(error.GenerateErrorReport());
}

第 7 步 - 检查密码是否已重置

最后,通过使用 LoginWithPlayFab 登录,验证玩家是否已成功重置密码。

C# 代码示例

在下面的 C# 示例中,我们使用 LoginWithPlayFab 和玩家在第 6 步中重置的新密码登录。

void LoginWithPlayFab(string username, string password)
{
    var request = new LoginWithPlayFabRequest
    {
        Username = username,
        Password = password
    };

    PlayFabClientAPI.LoginWithPlayFab(request, result =>
    {
        Debug.Log("Successfully logged in player with ID " + result.PlayFabId);
    }, FailureCallback);
}

void FailureCallback(PlayFabError error)
{
    Debug.LogWarning("Something went wrong with your API call. Here's some debug information:");
    Debug.LogError(error.GenerateErrorReport());
}

总结

本教程的内容就是这些! 已经了解了如何设置 SMTP 服务器、创建电子邮件模板、发送帐户恢复电子邮件和重置玩家密码。

如果对本教程有任何疑问或反馈,请在 社区论坛中告诉我们