Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用应用商店收据唯一标识iOS iTunes帐户?_Ios_Objective C_Iphone_In App Purchase_Icloud - Fatal编程技术网

使用应用商店收据唯一标识iOS iTunes帐户?

使用应用商店收据唯一标识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

有几个问题需要讨论通过iTunes帐户唯一标识iOS用户的机制(例如)。我一直试图以不同的方式实现这一点,基本上是使用应用商店收据的
不透明值
字段。这似乎表明(至少对于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不同,我假设是不同的用户尝试升级产品

原始购买日期-自动续费订阅 收据,这表示订阅期的开始,甚至 如果订阅已续订