0

我们的 Worklight 项目中有一个“iPhone”环境,用于在 XCode 5 中进行本机 iOS 客户端开发。尽管在 Worklight 控制台中禁用了应用程序身份验证,但我们遇到了身份验证错误。

我们遵循的步骤是:

  1. 调用wlConnectWithDelegate:方法开启WLClient sharedInstance
  2. 成功后wlConnectWithDelegate,我们调用适配器过程invokeProcedure:withDelegate:

代码如下所示:

#import <BlocksKit/A2DynamicDelegate.h>

+ (void) connectToWorklightOnSuccess: (SuccessBlock) success onFailure: (FailureBlock) failure {
    WLClient *client = [WLClient sharedInstance];
    A2DynamicDelegate *dd = [client dynamicDelegateForProtocol: @protocol(WLDelegate) ];
    [dd implementMethod: @selector(onSuccess:) withBlock: success];
    [dd implementMethod: @selector(onFailure:) withBlock: failure];

    [client wlConnectWithDelegate:(id <WLDelegate>)dd];
}

+ (void) invokeProcedure: (WLProcedureInvocationData *) proc onSuccess: (SuccessBlock) success onFailure: (FailureBlock) failure {
    [WJServiceGateway connectToWorklightOnSuccess:^(WLResponse *response) {
        NSLog(@"WLClient connect succeeded");
        WLClient *client = [WLClient sharedInstance];
        A2DynamicDelegate *dd = [client dynamicDelegateForProtocol: @protocol(WLDelegate) ];
        [dd implementMethod: @selector(onSuccess:) withBlock: success];
        [dd implementMethod: @selector(onFailure:) withBlock: failure];
        [client invokeProcedure:proc withDelegate:(id<WLDelegate>) dd];
    } onFailure:^(WLFailResponse *failResponse) {
        NSLog(@"WLClient connect failed: %@", failResponse);
        [failure invoke];
    }];
}

一次我们的invokeProcedure:onSuccess:onFailure:方法,我们得到一个错误响应:

Status: 403
InvocationResult: (null)
InvocationContext: (null)
Response text: /*-secure-
{"WL-Authentication-Failure":{"wl_antiXSRFRealm":{"reason":"illegal state"}}}*/
Error code: 0
Error message: (null)

在应用程序被杀死并重新启动之前,后续调用会成功且不会出错。

这个问题可能和这些问题有关(其实这是同一个项目发生的问题):

不过,看起来很奇怪的是,我们禁用了应用程序身份验证(使用 Worklight 控制台中的下拉选项)并且仍然看到身份验证错误。此 WL-Authentication-Failure/“非法状态”响应是否有其他来源?

我们在这里用我们的连接和调用错误地实现了一些东西吗?有没有一种解决方案可以让我们在应用启动后调用的第一个适配器不会失败?

4

1 回答 1

0

如评论中所述,这与应用程序真实性保护无关。

  • 您需要首先调用到 Worklight Server 的连接,并在其成功回调中调用适配器过程

  • 您也可以仅在应用程序启动时连接到 Worklight Server,然后在需要执行适配器过程调用时连接。

有关在原生 iOS 应用程序中连接和调用的工作示例,请参阅以下教程和示例:https ://developer.ibm.com/mobilefirstplatform/documentation/getting-started-6-3/server-side-development/invoking -adapter-procedures-native-ios-applications/

于 2015-04-23T08:57:40.377 回答