playfab为开发者提供了可以对玩家进行身份验证的方法,可以使用玩家的设备标识或者是自定义的用户名作为标识:
LoginWithCustomID , LoginWithAndroidDeviceID , LoginWithIOSDeviceID
此处的登录方法均为匿名登录。当玩家更换设备之后账号的信息就找不回来了,所以我们需要向玩家提供使用固定账号登陆的方法,比如使用邮箱,google账号,steam账号,Nintendo账号等。
1.unity编辑器扩展
这一步是方便后续的调试,以便于不用启动游戏也能进行调试。如果只是想要查看登录playfab的方法,这一步可以跳过。
1.在asset中创建一个Editor文件夹,在里面添加脚本
打开脚本,添加如下的命名空间。UnityEditor是为了扩展编辑器。
using UnityEditor;
using PlayFab;
using PlayFab.ClientModels;
添加如下代码。
public class PlayfabControllWindow : EditorWindow
{
[MenuItem("Window/PlayfabControl")]
public static void ShowWindow()
{
EditorWindow.GetWindow(typeof(PlayfabControllWindow));
}
}
该类继承自EditorWindow;
在让窗口在Window下的PlayfabControl展开,如果不想放在Window下也可以使用其他的名称 。
在unity中效果如下:该窗口放置在Window下的PlayfabControl中
2.添加一个按钮,调用登录方法
string myAccount;
private void OnGUI()
{
myAccount = EditorGUILayout.TextField("本人登录id", myAccount);
if (GUILayout.Button("登录"))
{
Login(myAccount);
}
}
调用OnGUI方法进行窗口布局。
创建一个TextField输入玩家的CustomID,在游戏中此处可以获取玩家的设备标识号。
创建一个按钮,当按下按钮的时候调用Login方法,传入 输入框的输入的ID
窗口如图:
2.使用匿名账号登陆
1.编写Login方法进行匿名账号登陆
public void Login(string myAccount)
{
if (myAccount == "") myAccount = "GettingStartedGuide";
if (string.IsNullOrEmpty(PlayFabSettings.staticSettings.TitleId))
{
//设置你自己游戏的TitleId,如果刚刚在unity中设置了游戏,就可以跳过这一步
PlayFabSettings.staticSettings.TitleId = "9DB1F";
}
PlayFabClientAPI.LoginWithCustomID(new LoginWithCustomIDRequest()
{//此处填写LoginWithCustomIDRequest的参数,注意用 逗号 分隔而不是分号
CustomId = myAccount,
CreateAccount = true
},
result =>
{//一个回调函数,如果登录成功,返回登录结果
Debug.Log("Congratulations, you made your first successful API call!");
},
error =>
{//如果登录失败,返回错误报告
Debug.LogError(error.GenerateErrorReport());
});
}
}
此处第一个if是为了在编辑器中方便使用,如果没有输入账户id则使用一个固定的账户登录。
之后保存代码,进入编辑器,打开窗口点击“登录”按钮,即可登录到playfab
如果在输入框输入不同的字符则可以创建并登录到不同的账号。
2.输入不同的ID登录到不同的账号
如图输入WYouYYY点击登录,等待console响应成功后查看playfab玩家界面,点击search出现一个新玩家
打开该玩家界面可以看到:
3.将账号绑定到邮箱
调用playfaAPI的AddUsernamePassword
查看api得知需要邮箱,用户名和密码
1.首先编辑器扩展一个绑定布局,
GUILayout.Label("账号绑定");
usernameInput = EditorGUILayout.TextField("用户名:", usernameInput);
emailInput = EditorGUILayout.TextField("邮箱:", emailInput);
passwardInput = EditorGUILayout.TextField("密码:", passwardInput);
if (GUILayout.Button("绑定"))
{
BindAccount();
}
为了区分不同的登录,将上面的登录按钮修改为匿名登录,添加一个使用账号登录的按钮
2.调用api实现账号绑定:
public void BindAccount()
{
//首先判断是否有输入正确的字符
//真正的游戏中可以判断玩家输入的字符是否合法,比如邮箱验证,密码的要求等
if (usernameInput == "" || emailInput == "" || passwardInput == "")
return;
var request = new AddUsernamePasswordRequest()
{
Username = usernameInput,
Email = emailInput,
Password = passwardInput
};
//调用API进行绑定
PlayFabClientAPI.AddUsernamePassword(request,
result =>
{
Debug.Log("账号" + myAccount + "已绑定到邮箱" + emailInput);
},
error =>
{
Debug.LogError(error.GenerateErrorReport());
});
}
使用以上函数进行账号绑定,在开头可以进行判断,比如玩家的输入是否合法等。
request是一个储存绑定信息的类,是AddUsernamePassword的参数
3.绑定账号测试
在unity中打开刚才的窗口,输入对应的信息,点击绑定
绑定成功:(此处id未填写会使用默认的id)
如果此时打开playfab,找到对应玩家就可以看到绑定的信息
如果已经绑定的账号重新绑定会报错
4.使用邮箱和密码登录
再绑定邮箱之后就可以使用邮箱和密码进行登录了
在OnGui中添加的按钮下执行LoginWithEmail
编写LoginWithEmail的函数体;
public void LoginWithEmail()
{
var request = new LoginWithEmailAddressRequest()
{//还可以使用TitleId指定登录的游戏
Email = emailInput,
Password = passwardInput
};
PlayFabClientAPI.LoginWithEmailAddress(request,
result =>
{
Debug.Log("欢迎回来: " + result.PlayFabId);
},
error =>
{
Debug.LogError(error.GenerateErrorReport());
});
}
在unity编辑器中,输入邮箱,密码,点击登录到现有账号
登录成功如图所示:
登陆失败:
playfab还提供了许多连接到现有账户的方法,这里就不展开赘述了,以后有闲心了再来补充