Ker*_*ayi 6 objective-c ios cordova auth0
我正在尝试使用cordova对iOS进行auth0锁定.它似乎工作,但是当我在插件完成后解除视图时我做错了.它被解雇但我不能再与科尔多瓦视图互动.它变得反应迟钝.
这是插件代码:
@implementation lockPlugin
-(void)init:(CDVInvokedUrlCommand*)command {
A0Lock *lock = [A0Lock sharedLock];
A0LockViewController *controller = [lock newLockViewController];
controller.onAuthenticationBlock = ^(A0UserProfile *profile, A0Token *token) {
CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK
messageAsDictionary:@{
@"idToken":token.idToken,
@"refreshToken":token.refreshToken,
@"tokenType":token.tokenType,
@"accessToken":token.accessToken,
@"email":profile.email
}];
[self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
[self.viewController dismissViewControllerAnimated:YES completion:nil];
};
[lock presentLockController:controller fromController:self.viewController];
}
@end
Run Code Online (Sandbox Code Playgroud)
我不得不承认你的代码看起来不错,我在它或谷歌上找不到任何问题。我确实找到了一些关于竞争条件的参考,这让我想到了最新和最后的想法......
missViewControllerAnimated 是从 CDVPluginResult 调用的,并引用 CDVPluginResult.viewController 而不是原始的 viewController。动作本身是动画的,这意味着需要一段时间,到那时,引用为零。或者,您似乎不应该从块中调用解雇,因为它不是 UI 线程。这似乎支持了我的第二个理论。尝试做
dispatch_async(dispatch_get_main_queue(), ^{
[self.viewController dismissViewControllerAnimated:YES completion:nil];
});
Run Code Online (Sandbox Code Playgroud)
=================================================== ===========================
事实上它的工作原理很奇怪。您将锁定变量放置在 init 方法中的本地上下文中,iOS 的 Auth0 文档表示您应该“将其作为强大的属性保留在 AppDelegate 中......只要您需要它,就让它保持活动状态。” 由于它是 init 中的局部变量,因此应在方法终止后立即释放它。
也许每 x 秒进行一次会话检查,并且应用程序有时有足够的宽限期来工作和加载新屏幕。
| 归档时间: |
|
| 查看次数: |
243 次 |
| 最近记录: |