使用AppReceiptId验证Windows应用商店应用中的用户身份?

时间:2012-11-06 22:51:41

标签: windows-8 windows-runtime windows-store-apps

我希望能够使用CurrentApp.GetAppReceiptAsync()的结果中的AppReceiptId并将其绑定到我的后端服务中的用户名,以验证用户是否已实际购买了该应用。

我知道我应该使用CurrentAppSimulator代替CurrentApp,但是CurrentAppSimulator.GetAppReceiptAsync()总是为AppReceiptId返回一个不同的随机值。这使我很难用我的服务进行测试。

有没有办法让它总是返回相同的值,而不仅仅是使用硬编码的?我担心当我用CurrentApp替换CurrentAppSimulator并将其提交给商店时,它将不会按照我期望的方式运行。在现实世界中,AppReceiptId永远不会改变,对吧?

我用来获取AppReceiptId的代码:

var receiptString = await CurrentAppSimulator.GetAppReceiptAsync();
XmlDocument doc = new XmlDocument();
doc.LoadXml(receiptString);

var ReceiptNode = (from s in doc.ChildNodes 
                   where s.NodeName == "Receipt"
                   select s).Single();

var AppReceiptNode = (from s in ReceiptNode.ChildNodes
                      where s.NodeName == "AppReceipt"
                      select s).Single();

var idNode = (from s in AppReceiptNode.Attributes
              where s.NodeName == "Id"
              select s).Single();

string id = idNode.NodeValue.ToString();

id永远是一些随机的Guid。

1 个答案:

答案 0 :(得分:0)

CurrentApp.GetAppReceiptAsync()。Id 是实际购买的唯一ID。虽然它在技术上代表了由单个Windows ID进行的独特购买,但它并不代表用户本身,我认为对该ID的持久性没有任何保证。

您是否更适合使用Windows Live SDK跟踪跨设备的实际用户身份?

无论如何,要回答你原来的问题,不,我不相信有任何方法可以让它一直返回相同的ID。该功能的唯一合理位置是 WindowsStoreProxy.xml 文件,我在模式中看不到任何允许您指定此信息的内容。