如何在没有明确注册的情况下识别Unity中的移动用户

问题描述 投票:0回答:2

首先,我一直在寻找论坛大约一年的可行解决方案。我正在寻找的是一种通过未链接到设备的ID来识别移动用户的方法。

所以没有SystemInfo.deviceUniqueIdentifier

我的想法是使用用户的Google帐户(Android)或Apple帐户(iOS)识别用户。

到目前为止我尝试过的是通过GooglePlayGames API连接应用程序。它已成功连接并正常工作。它在我启动应用程序时自动登录,并在我的数据库中检索并存储googleId。然而,这里的缺点是应用程序现在依赖于GooglePlayGames,这是我不喜欢的。我不喜欢其他应用程序的显式依赖。我还需要为iOS找到合适的等价物。

我尚未实施Unity IAP以启用应用内购买。我找不到任何有关如何将事务链接到android / iOS上的用户的信息。有没有办法在交易过程中检索/存储任何与用户相关的ID?

在我看来,在使用应用程序购买时,您需要有一些方法来报销/重新激活用户在切换手机时所做的购买。

最好的情况是在不依赖Unity IAP的情况下存储Id的简单方法,因此免费游戏用户也可以轻松恢复其帐户。

c# unity3d
2个回答
1
投票

您可以使用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。您可以使用它来确定任何设备上的用户。

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的背景,那么自己制作一个并不是很难。


1
投票

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

文档使它看起来非常简单,看起来像一个函数调用,如果用户尚未登录,将提示用户登录。

之后应该与Google Play商店API相同。

© www.soinside.com 2019 - 2024. All rights reserved.