如何在Unity中识别移动用户而无需显式注册

4
首先,我已经搜索了约一年的论坛,寻找可行的解决方案。我想要的是一种通过ID识别移动用户的方法,该ID与设备没有关联。
因此,不能使用SystemInfo.deviceUniqueIdentifier。
我的想法是使用用户的Google帐户(Android)或Apple帐户(iOS)来识别用户。
到目前为止,我尝试过使用GooglePlayGames API连接应用程序。它成功连接并正常工作。当我启动应用程序时,它会自动登录,并且我会检索和存储googleId在我的数据库中。然而,这里的缺点是应用程序现在依赖于GooglePlayGames,这是我不喜欢的。我不喜欢对其他应用程序有明确的依赖关系。我还需要找到适用于iOS的合适替代品。
我还没有实施Unity IAP以启用应用内购买。我找不到任何关于如何将交易链接到Android / iOS用户的信息。是否有一种在交易期间检索/存储任何与用户相关的ID的方法?
在我的看来,在应用内购买时,似乎需要某种方式来偿还/重新激活由用户进行的购买,例如当他们更换手机时。
最理想的情况是有一种简单的方法来存储ID,而不依赖于Unity IAP,以便免费玩家也可以轻松恢复其帐户。

为什么没有 SystemInfo.deviceUniqueIdentifier?“一种通过ID标识移动用户,而该ID与设备无关。” 如果您需要标识设备,则需要与设备相关联的内容,否则标识将无法正常工作。 - Programmer
SystemInfo.deviceUniqueIdentifier 不是100%可靠的,特别是在IOS上。此外,如果用户更换设备,我将失去与用户的连接。 - Immorality
2个回答

3

您可以使用MAC地址。这是每个设备的唯一标识。

string GetMacAddress()
{
    string reesult = "";
    foreach (NetworkInterface ninf in NetworkInterface.GetAllNetworkInterfaces())
    {
        if (ninf.NetworkInterfaceType != NetworkInterfaceType.Ethernet) continue;
        if (ninf.OperationalStatus == OperationalStatus.Up)
        {
            reesult += ninf.GetPhysicalAddress().ToString();
            break;
        }
    }
    return reesult;
}

现在,如果设备已越狱或被篡改,则Mac地址可以被欺骗或暂时更改。
SystemInfo.deviceUniqueIdentifier不是100%可靠,特别是对于IOS。而且,如果用户更换设备,我将失去与用户的连接。
您可以使用Unity的SocialPlatforms API检查用户是否已登录,然后获取用户ID。您可以使用该ID来确定任何设备上的用户。
Social.localUser.Authenticate(success =>
{
    if (success)
    {
        Debug.Log("Authentication successful");

        string userInfo = Social.localUser.id;

        Debug.Log(userInfo);
    }
    else
        Debug.Log("Authentication failed");
});

如果您需要更多对用户的控制,您应该实现自己的基于令牌的身份验证,例如oauth2。如果您有PHP和MySQL的背景,自己制作一个并不难。


谢谢你的回答。 我确实使用Socialplatforms通过Google进行身份验证。 如果不连接Google,它检索到的UserId是一个测试ID(即使在实际设备上)。 然而,我将研究基于令牌的身份验证,因为服务器确实运行在PHP和MySQL上。 - Immorality

1

对于iOS,您需要实现Apple Game Center

文档使其看起来非常容易,似乎只需调用一个函数即可提示用户登录(如果他们尚未登录)。

之后应该与Google Play Store API相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接