Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.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
Iphone 应用程序在运行时请求AppleID_Iphone_Ios_Storekit_In App - Fatal编程技术网

Iphone 应用程序在运行时请求AppleID

Iphone 应用程序在运行时请求AppleID,iphone,ios,storekit,in-app,Iphone,Ios,Storekit,In App,我正在用苹果建议的交易验证控制器代码更新我的iOS应用程序,以验证应用程序内的购买,因为最近发布的“黑客”允许人们在ap购买时购买,而无需支付来自伪造苹果服务器的伪造收据 我已经把所有东西都整合好了,现在正在测试。我已经运行了几次应用程序和验证的东西已经运行了好几次 我想测试所有关于购买的东西,包括从一个全新的应用程序和AppleID开始。所以我完全从我的测试设备上删除了这个应用程序。我在iTunes Connect中创建了一个全新的“测试用户”应用程序ID。我转到测试设备上的设置应用程序,转到

我正在用苹果建议的交易验证控制器代码更新我的iOS应用程序,以验证应用程序内的购买,因为最近发布的“黑客”允许人们在ap购买时购买,而无需支付来自伪造苹果服务器的伪造收据

我已经把所有东西都整合好了,现在正在测试。我已经运行了几次应用程序和验证的东西已经运行了好几次

我想测试所有关于购买的东西,包括从一个全新的应用程序和AppleID开始。所以我完全从我的测试设备上删除了这个应用程序。我在iTunes Connect中创建了一个全新的“测试用户”应用程序ID。我转到测试设备上的设置应用程序,转到存储,并将设备的默认AppleID更改为新创建的AppleID

我使用调试器从Xcode重新运行应用程序,调试器将应用程序重新安装到测试设备上,并以全新方式运行

问题是,几乎在启动时,测试设备立即显示AppleID密码警报类型视图,并要求提供旧AppleID的密码,我最初用于测试所有内容,包括原始的应用内购买和验证。它不会要求输入新设备AppleID的密码,如store下设置应用程序中设置的密码

当我把它作为一个新的应用程序运行时,验证代码不会运行,并且除了一个单独的应用程序之外,我的任何例程都不会运行任何与Apple StoreKit相关的代码

[[SKPaymentQueue defaultQueue] addTransactionObserver:observer];
(observer是StoreKit的委托对象,它是被创建的,但是除了init之外,它没有运行任何例程,init除了为自己设置一个静态变量来创建一个单例类型类之外,什么都不做)

为了便于检查,我还添加了

NSLog(@"in App Delegate, payment queue transactions are %@", [[SKPaymentQueue defaultQueue] transactions]);
这表明没有旧的交易

我不知道为什么它在新安装应用程序时开始询问原始测试用户的AppleID,设备存储区的AppleID不同,并且我无法识别正在运行的访问StoreKit的代码(如上所述除外)

如能对此有所了解,将不胜感激

ETA:在密码对话框中触摸取消不会导致应用程序中运行任何额外代码,也不会阻止应用程序运行

如果我进入应用程序内购买屏幕(应用程序在其中查询应用程序内的可用购买),它会以相同的方式在旧的AppleID上再次请求密码。我可以取消,但似乎什么也没发生。如果我真的按了应用程序中的“恢复购买”按钮,它会询问在商店设置中设置的新应用程序ID上的密码。我还没有超过这一点,因为我想了解正在发生的事情,不想在新的AppleID下完成/尝试恢复或购买而把事情搞砸


谢谢

StoreKit.framework
在系统范围内工作,因此显示的Apple ID与您的应用程序没有任何关系,重新安装应用程序不会产生任何影响

但是,您可以:

  • 点击设置→ iTunes和应用商店
  • 点击Apple ID登录(顶部的按钮)
  • 点击“注销”
  • 当您再次使用应用程序时,
    StoreKit
    应提示输入电子邮件和密码。

    修复步骤:

  • 从应用商店开始,拉起多任务栏并点击设置应用
  • 向下滚动并点击“常规”
  • 向下滚动并点击“日期和时间”
  • 如果“自动设置”开关打开,请将其关闭
  • 点击“设置日期和时间”
  • 点击显示“[星期几],[月][日],2013”的字段
  • 将年轮调整为“2012”,并退出日期和时间部分
  • 多任务返回应用商店并再次尝试下载应用
  • 点击“无法连接…”模式上的“取消”
  • 返回本机设置>常规>日期和时间>设置日期和时间
  • 返回到月份、日期、年份,并将年份更改为“2030”
  • 返回主屏幕并启动应用商店
  • “无法连接到商店”模式应立即出现
  • 点击“确定”,然后多任务返回设置
  • 再次返回月份、日期和年份,并将年份改回“2013”
  • 多任务返回应用商店并再次尝试下载应用

  • 我也遇到了同样的问题,我费了好几个小时才解决

    如前所述,
    StoreKit
    在系统范围内工作,系统不断要求登录任何需要登录的事务

    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
    
    尚未调用。我正在使用,查看源代码,发现以下可疑行:

    if (error.code != RMStoreErrorCodeUnableToCompleteVerification) { 
        // If we were unable to complete the verification we want StoreKit to keep reminding us of the transaction
        [queue finishTransaction:transaction];
    }
    
    可能就是这样发生的:

    • 我首先用我的测试苹果ID购买了这个产品
    • 出于测试目的,我删除了该产品
    • 我试图再次购买它。此时我输入了错误的凭证,RMStore没有调用
      [[SKPaymentQueue defaultQueue]finishTransaction:
    • 应用程序在每次启动时都开始要求登录
    我尝试使用不同的测试帐户登录,但仍然发出相同的警报,要求使用旧的Apple ID登录。我还删除了iTunes Connect上的Apple ID,但这没有帮助

    最后,我设法通过恢复(而不是购买)具有相同帐户的产品来解决问题。
    我不知道是否有其他方法可以解决此问题(即重置StoreKit队列)。无论如何,请始终记住在代码中调用
    finishTransaction

    我不知道您是否看到有关AppleID与存储在设置中的AppleID不相关的评论(“设备存储区的AppleID不同”)这几乎就像iOS在某处存储了信息,上面写着“此应用程序正在请求以前的购买信息”,并且在后续加载时情不自禁地请求。只有删除应用程序才能帮我摆脱它。@chadbag啊,对不起,没有取消