需要登录 输入密码以 . [环境:沙盒]

13

当我启动我的Unity iOS应用时,它不停地提示:

输入密码。[环境沙盒]

请注意没有用户名,因此我无法输入用户名,也无法输入密码。

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

我在iPhone上注销了iTunes账户。

它仍然提示我输入密码。 我附上了一张屏幕截图。

输入图片描述


听起来像是您添加到项目中的插件或库,您尝试过删除它们吗? - Chico3001
还值得检查一下是否意外设置了沙盒账户。这是iOS 12的一个新功能-> https://dev59.com/TVQJ5IYBdhLWcg3wzJEP - enc_life
4个回答

2

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

我的解决方案:

  1. 在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;
    }
  }
  1. 在出现消息时,在出现问题的物理设备上运行应用程序,然后点击取消。

  2. 在XCode中检查finishTransaction是否在任何情况下都被调用。幸运的是,它将被调用与未完成的交易次数一样多。

之后,烦人的消息就不应该再弹出了。在我的情况下,有大约15个未完成的交易,这就是为什么消息每5分钟显示一次的原因...... ¬¬

由于我正在使用框架来管理IAP,所以在问题解决后我注释了上述代码。

这只是一个解决方法,但希望对您有用。


RevenueCat的Jacob在这里。很有趣。我们的SDK应该完成所有交易。您是否可能在后端配置之前尝试过我们的SDK?在我们的后端接受交易之前,我们不会完成交易(以便我们不会丢失交易)。很抱歉让您经历了这些麻烦。 - Jacob Eiting
我不太确定,Jacob(90%),但可能有一种可能性,这将是为什么会发生这种情况的很好的解释。另一方面(我们的过失),我们在Apple Connect上删除了一些沙盒用户,这些用户已经启动了购买流程,我们一直认为这是未完成交易的原因。 - Luis Galvez
嗨,我用Swift重写了这个程序,但是updatedTransactions没有被调用... - Satsuki

1
直到在设置应用中的“抹掉所有内容和设置”上重置设备之前,什么也没起作用。

在设备重置后的初始设置过程中,不应从iCloud备份中恢复数据。 - Joey

1
我最近也遇到了同样的问题,即在沙盒账户中不断被要求提供凭据。每当我打开相关应用程序或网络连接发生变化时,都会出现这种情况。我不知道它是如何进入这种状态的,但我发现Milos有答案

基本上,如果您还没有设置SKPaymentTransactionObserver(您可能已经设置了一个),则需要进行设置。然后在paymentQueue:updatedTransactions:文档)内循环遍历队列中的所有交易,并对每个交易调用:

Swift:

SKPaymentQueue.default().finishTransaction(transaction)

Obj-C:

[[SKPaymentQueue defaultQueue] finishTransaction:transaction];

我不得不删除事务队列循环中已有的代码,因为它似乎触发了凭据对话框,并导致其他交易无法完成。

使用这些临时更改运行应用程序已经在我看来解决了问题,因此看起来事务队列只是出现了故障。


感谢您的回复。虽然该应用程序是使用Unity创建的。 - Spinteractive

0
我通过在 App Connect Store 上创建一个新的应用程序和应用程序 ID 来解决了这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接