4

我希望能够使用 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。

4

1 回答 1

0

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

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

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

于 2013-02-28T18:59:54.837 回答