MobileFirst使用适配器直接更新自定义

时间:2016-03-17 15:11:11

标签: ibm-mobilefirst mobilefirst-adapters

我试图通过从适配器获取所有消息来自定义直接更新。 如果直接更新被触发,我没有得到适配器成功回调。 我想显示一个对话框,为用户提供取消直接更新的选项。 以下是我正在尝试的代码:

 wl_directUpdateChallengeHandler.handleDirectUpdate = function (directUpdateData,directUpdateContext){
    console.log("Test for directUpdate");
    var invocationData = {
            adapter : 'DirectUpdateCustomizationAdapter',
            procedure : 'getConfig',
            parameters : ["android","1.9.0"]
        };
    var result = WL.Client.invokeProcedure(invocationData,{timeout: 30000,
        onSuccess :  function(success){
            console.log("Adapter call success" + JSON.stringify(success));
        },
        onFailure : function(failure){alert(3);console.log("Adapter call fail" + JSON.stringify(failure));},
    });

};

我正在使用以下安全测试:

<customSecurityTest name="customTests">
            <test realm="wl_antiXSRFRealm" step="1"/>
            <test realm="wl_authenticityRealm" step="1"/>
            <test realm="wl_remoteDisableRealm" step="1"/>
            <test realm="wl_directUpdateRealm" mode="perSession" step="1"/>
            <test realm="wl_anonymousUserRealm" isInternalUserID="true" step="1"/>
            <test realm="wl_deviceNoProvisioningRealm" isInternalDeviceID="true" step="2"/>
        </customSecurityTest>

如果未触发直接更新且适配器调用在挑战处理程序之外,则适配器调用成功。

请指导。

2 个答案:

答案 0 :(得分:0)

直接更新与适配器有什么关系?

您无法在适配器中调用或处理它;它必须在客户端处理,因为它是处理直接更新的客户端SDK,而不是驻留在服务器端的适配器。

答案 1 :(得分:0)

要使这种流程起作用,必须从任何安全性中剥离DirectUpdateCustomizationAdapter#getConfig方法并使用不受保护的访问。 含义:在DirectUpdateCustomizationAdapter适配器的xml文件中 getConfig方法应该有一个额外的属性:

<procedure name="getConfig"  securityTest="wl_unprotected" />

因为getConfig返回非机密数据,所以我认为可以取消保护它。 适配器代码中的此类更改需要将适配器文件重新部署到Worklight服务器。

然而,不建议在直接更新处理程序期间从远程服务器检索数据。正如Idan在这里所说,自定义标题,正文和其他文本元素的最佳方法实际上是在设备上的某些属性文件中包含这些字符串(网络跳跃需要花费时间)。 使用新文本更新此类属性文件可以通过直接更新机制本身完成(就像更新任何其他Web资源一样)。