需要登录 输入 的密码。 [环境:沙盒]
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 解决了这个问题。
【讨论】:
以上是关于需要登录 输入 的密码。 [环境:沙盒]的主要内容,如果未能解决你的问题,请参考以下文章