Dav*_*den 4 storekit ios skstorereviewcontroller
TL; DR:iOS上是否有某种方法可以检测iOS 10.3中添加的Storekit App Rating对话框的存在/显示?
我最近使用以下方法为我的应用添加了对新应用评级对话框的支持:
[SKStoreReviewController requestReview];
Run Code Online (Sandbox Code Playgroud)
但是,我知道有一些使用注意事项(如此处所述),即在调用上述功能时可能会或可能不会显示对话框,不是包括客户是否已对应用程序进行评级或客户已经暗淡的情况对话3次.
我也知道Apple不希望用户操作直接调用对话框的呈现,因此要报告对话框的存在:
虽然在应用程序的用户体验流程中有意义时应调用此方法,但评级/审阅请求视图的实际显示由App Store策略控制.由于此方法可能会或可能不会显示警报,因此响应按钮点击或其他用户操作来调用它是不合适的.
但这并不能阻止UX团队将这些按钮放在图形设计中并询问"我们能否知道对话框是否显示"?
所以,我的问题是,是否有其他间接方式可以确定此对话框的表示?
我最近使用Appium对Android和iOS应用程序进行了一些自动测试,并使用Xpaths查找原生UI元素,所以只是想知道是否可以在iOS应用程序的上下文中实现相同的功能.
Los*_*aty 10
你的问题让我思考,这比我想象的要容易.
我的第一个想法是检查UIWindow相关的东西 - 快速查看 文档显示,有UIWindow相关的通知 - 太棒了!我做了一个快速的项目,订阅了所有这些并提交了审查控制器.这会弹出日志:
method : windowDidBecomeVisibleNotification:
object -> <SKStoreReviewPresentationWindow: 0x7fe14bc03670; baseClass = UIApplicationRotationFollowingWindow; frame = (0 0; 414 736); opaque = NO; gestureRecognizers = <NSArray: 0x61800004de30>; layer = <UIWindowLayer: 0x61800003baa0>>
Run Code Online (Sandbox Code Playgroud)
因此,为了检测是否显示了审阅控制器,您需要订阅通知并检查其object属性以查找其类:
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(windowDidBecomeVisibleNotification:)
name:UIWindowDidBecomeVisibleNotification
object:nil];
}
- (void)windowDidBecomeVisibleNotification:(NSNotification *)notification {
if ([notification.object isKindOfClass:NSClassFromString(@"SKStoreReviewPresentationWindow")]) {
NSLog(@"the review request was shown!");
}
}
Run Code Online (Sandbox Code Playgroud)
现在请记住,SKStoreReviewPresentationWindow不能公开访问 - 所以你不能简单地写[SKStoreReviewPresentationWindow class],并通过使用欺骗系统NSClassFromString只是 - 欺骗系统.不幸的是,另一个最有趣的通知,UIWindowDidResignKey没有发布 - 我希望主窗口会辞职,但不幸的是没有.一些进一步的调试也表明主窗口仍然是关键而不是隐藏.当然,你可以尝试比较notification.object到[UIApplication sharedApplication].window,但也有被显示其他窗口- UITextEffectsWindow而且UIRemoteKeyboardWindow,特别是当第一次被证明该通知后,他们两人也都是不公开的.
我认为这个解决方案是一个黑客攻击 - 它很容易被Apple改变,这会破坏它.但最重要的是,这可能是审查期间拒绝的理由,因此请自担风险.我在iPhone 7+模拟器,iOS 10.3,Xcode 8.3.2上进行了测试
现在,因为我们现在知道它是有点可以检测,如果被证明的审查控制器,一个更有趣的问题是如何检测到它是不显示.您需要引入一些超时,之后您将执行某些操作,因为未显示警报.这可能会让您的应用感觉被绞死,因此对您的用户来说这将是一次糟糕的体验.此外,我注意到审查控制器没有立即显示,因此更有意义的是为什么Apple不建议在按下按钮后显示它.
| 归档时间: |
|
| 查看次数: |
1994 次 |
| 最近记录: |