使用应用商店收据唯一标识iOS iTunes帐户?
有几个问题需要讨论通过iTunes帐户唯一标识iOS用户的机制(例如)。我一直试图以不同的方式实现这一点,基本上是使用应用商店收据的使用应用商店收据唯一标识iOS iTunes帐户?,ios,objective-c,iphone,in-app-purchase,icloud,Ios,Objective C,Iphone,In App Purchase,Icloud,有几个问题需要讨论通过iTunes帐户唯一标识iOS用户的机制(例如)。我一直试图以不同的方式实现这一点,基本上是使用应用商店收据的不透明值字段。这似乎表明(至少对于OS X应用程序而言),不透明值字段基本上包含用户iTunes帐户的唯一ID(当然不是电子邮件地址!),这表明同一iTunes帐户下的不同设备的ID相同 我在没有实施应用内购买的应用上尝试过这个,但是我发现,NSBundle的appStoreReceiptURL属性包含一个有效的URL,而我尝试过的应用(从应用商店下载,然后使用Xc
不透明值
字段。这似乎表明(至少对于OS X应用程序而言),不透明值
字段基本上包含用户iTunes帐户的唯一ID(当然不是电子邮件地址!),这表明同一iTunes帐户下的不同设备的ID相同
我在没有实施应用内购买的应用上尝试过这个,但是我发现,NSBundle
的appStoreReceiptURL
属性包含一个有效的URL,而我尝试过的应用(从应用商店下载,然后使用Xcode用测试代码更新)中从未存在该文件
即使对于没有IAP的免费/付费应用程序,收据也应该一直存在吗?是否有人试图使用收据唯一标识iTunes用户?这似乎是一个非常有希望的方法 如果找不到收据,您需要发出
SKReceiptRefreshRequest
来生成收据
let receiptRequest = SKReceiptRefreshRequest()
receiptRequest.delegate = self
receiptRequest.start()
以下链接提供了您可能遇到的其他一些问题的提示:
我试图解决同样的问题。据我所知,苹果的文档中并没有我们可以信任的唯一ID,但可能的解决方法是使用iCloud记录ID 使用iCloud记录ID(CKRecordID) Swift3/4+
let container = CKContainer.default()
container.fetchUserRecordID() {
recordID, error in
if let err = error {
print(err.localizedDescription)
}
else if recID = recordID {
print("fetched ID \(recID.recordName ?? "NA")")
}
}
对于自动创建的记录,ID名称字符串基于
UUID,因此保证是唯一的
在采购收据中
在我的例子中,我想阻止服务器端不同iTunes帐户的升级/降级。因此,我使用原始的购买日期(假设一个用户帐户在同一时间段内不可能多次购买)。首次购买特定iTunes帐户后,此ID将始终相同。我将此ID与产品ID一起保存在服务器中,并在用户升级/降级时(当应用程序发送新收据时)始终在收据中检查此ID。如果同一产品ID不同,我假设是不同的用户尝试升级产品
原始购买日期-自动续费订阅
收据,这表示订阅期的开始,甚至
如果订阅已续订