需要登录 输入 的密码。 [环境:沙盒]

Posted

技术标签:

【中文标题】需要登录 输入 的密码。 [环境:沙盒]【英文标题】:Sign-In Required Enter the password for . [Environment: Sandbox] 【发布时间】:2018-12-27 17:42:51 【问题描述】:

当我启动我的 Unity ios 应用程序时不断提示我:

输入 的密码。 [环境沙箱]

注意没有用户名,我不能输入用户名。所以我也不能输入密码。

我删除了对 IAP 的所有引用(渠道和购买文件夹,并禁用了 IAP 服务),删除了 iOS 构建文件夹并重新构建它,然后编译它。

我在 iPhone 上退出了 iTunes。

我仍然提示我。 我附上了截图。

【问题讨论】:

听起来像是您添加到项目中的插件或库,您是否尝试删除它们? 如果您意外设置了沙盒帐户,也值得检查。这是 iOS 12 上的新功能 -> ***.com/questions/53087001/ios-12-iap-sandbox 【参考方案1】:

我在使用 RevenueCat(react-native-purchases)的 React Native 应用程序中实现 IAP 时遇到了同样的问题。

我的解决方案:

    在 AppDelegate.h 中,导入 StoreKit 并将 SKPaymentTransactionObserver 添加到 AppDelegate 接口。
#import <React/RCTBridgeDelegate.h>
#import <UIKit/UIKit.h>
#import <StoreKit/StoreKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate, SKPaymentTransactionObserver>

@property (nonatomic, strong) UIWindow *window;

@end
    在 AppDelegate.m 中,导入 StoreKit 并在 didFinishLaunchingWithOptions 中添加观察者。
#import <StoreKit/StoreKit.h>

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 
  [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
...

    再次在 AppDelegate.m 中,添加所需的方法 updatedTransactions 以满足 SKPaymentTransactionObserver 的协议。
(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
  for(SKPaymentTransaction *transaction in transactions)
    switch(transaction.transactionState)
      case SKPaymentTransactionStatePurchasing:
        [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
        NSLog(@"Transaction state -> Purchasing");
        break;
      case SKPaymentTransactionStatePurchased:
        [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
        NSLog(@"Transaction state -> Purchased");
        break;
      case SKPaymentTransactionStateRestored:
        NSLog(@"Transaction state -> Restored");
        [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
        break;
      case SKPaymentTransactionStateFailed:
        if(transaction.error.code == SKErrorPaymentCancelled)
          NSLog(@"Transaction state -> Cancelled");
        
        [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
        break;
    
  

    在出现问题的物理设备上运行应用程序,当消息出现时点击取消。

    在 XCode 中查看 finishTransaction 在任何 switch 案例中被调用。幸运的是,它将被调用的次数与未完成的交易一样多。

在此之后,烦人的消息不应再弹出。就我而言,大约有 15 笔未完成的交易,这就是为什么每 5 分钟就会出现一次消息... ¬¬

我在问题消失后评论了上面的代码,因为正如我所说,我正在使用框架来管理 IAP。

这只是一种解决方法,但希望它对你有用。

【讨论】:

来自 RevenueCat 的雅各布在这里。那很有意思。我们的 SDK 应该完成所有交易。您是否可以在后端配置之前试用我们的 SDK?在我们的后端接受之前,我们不会完成交易(所以我们不会丢失交易)。很抱歉,你不得不经历所有的麻烦。 我不这么认为 Jacob (90%),但可能存在这种可能性,这可以很好地解释为什么会发生这种情况。另一方面(我们不好),我们在 Apple Connect 上删除了一些沙盒用户,这些用户已经开始购买,我们一直认为这是未完成交易的原因。 您好,请通过 updatedTransactions 快速重写此内容不会被调用...【参考方案2】:

我最近遇到了同样的问题,我经常被要求提供沙盒帐户“。”的凭据。 - 每当我打开有问题的应用程序或网络连接发生变化时,都会发生这种情况。我不知道它是如何进入那种状态的,但我发现了Milos had the answer。

基本上,如果您还没有(您可能有),您需要设置一个SKPaymentTransactionObserver。然后在paymentQueue:updatedTransactions: (docs) 内部,循环遍历队列中的所有事务,调用每个事务:

斯威夫特:

SKPaymentQueue.default().finishTransaction(transaction)

对象-C:

[[SKPaymentQueue defaultQueue] finishTransaction:transaction];

我不得不删除我在事务队列循环中的现有代码,因为它似乎触发了凭据对话框并意味着其他事务无法完成。

运行带有这些临时更改的应用程序已经为我解决了这个问题,所以看起来事务队列只是被破坏了。

【讨论】:

感谢您的回复。虽然 App 是在 Unity 中创建的。【参考方案3】:

在设置应用程序中的Erase All Content and Settings 上重置设备之前,没有任何效果。

【讨论】:

重置后设备初始设置时不应从 iCloud 备份中恢复数据【参考方案4】:

我通过在 App Connect Store 上创建一个新的 APP 和 APP ID 解决了这个问题。

【讨论】:

以上是关于需要登录 输入 的密码。 [环境:沙盒]的主要内容,如果未能解决你的问题,请参考以下文章

您的 Apple ID 已被禁用 [环境:沙盒]

在App Purchase中:需要登录[环境:沙箱]

如何在iphone中制作沙盒环境

Centos环境变量文件的读取流程

基于linux环境下的C++机房预约系统开发

window环境下修改postgrep密码