混合Android应用程序未连接到MobileFirst服务器

时间:2015-08-24 13:59:55

标签: android ibm-mobilefirst mobilefirst-server

在我的QA环境中,混合Android应用程序无法连接到MFP服务器 在我的本地计算机上,使用MFP CLI工具,应用程序连接没有问题 在我的QA环境中,混合iPhone应用程序连接到MFP服务器。

失败的WL.Client.connect()上的回调获取此错误对象:

{
  "status": 403
}

以下是错误处理程序的堆栈跟踪:

08-25 14:31:56.016: D/CordovaLog(27971): file:///android_asset/www/default/assets/js/dependencies.js: Line 23 : trace: Error
08-25 14:31:56.016: D/CordovaLog(27971):     at Object.connectionFailure [as onFailure] (file:///android_asset/www/default/assets/js/dependencies.js:23:190)
08-25 14:31:56.016: D/CordovaLog(27971):     at onFailureResetSettings (file:///android_asset/www/default/worklight/worklight.js:8251:12)
08-25 14:31:56.016: D/CordovaLog(27971):     at onInitFailure (file:///android_asset/www/default/worklight/worklight.js:8245:4)
08-25 14:31:56.016: D/CordovaLog(27971):     at Object.onFailure (file:///android_asset/www/default/worklight/worklight.js:951:20)
08-25 14:31:56.016: D/CordovaLog(27971):     at klass.window.WLJSX.Ajax.WLRequest.WLJSX.Class.create.onFailure (file:///android_asset/www/default/worklight/worklight.js:3650:26)
08-25 14:31:56.016: D/CordovaLog(27971):     at klass.window.WLJSX.Ajax.WLRequest.WLJSX.Class.create.onWlFailure (file:///android_asset/www/default/worklight/worklight.js:3599:12)
08-25 14:31:56.016: D/CordovaLog(27971):     at Object.<anonymous> (file:///android_asset/www/default/worklight/worklight.js:3437:27)
08-25 14:31:56.016: D/CordovaLog(27971):     at Object.<anonymous> (file:///android_asset/www/default/worklight/wljq.js:1202:33)
08-25 14:31:56.016: D/CordovaLog(27971):     at fire (file:///android_asset/www/default/worklight/wljq.js:1047:30)
08-25 14:31:56.016: D/CordovaLog(27971):     at Object.self.fireWith [as rejectWith] (file:///android_asset/www/default/worklight/wljq.js:1158:7)

我在服务器日志中看不到有关被拒绝的连接请求的任何内容。

我从我的WL.Client.connect()调用的成功处理程序调用{​​{1}},该调用本身在窗口加载事件中调用。

注意:根据以下评论,我已更改为从WL.Client.init()调用connect()但是没有更改...堆栈跟踪以上是来自那个场景)

以下是执行连接的代码:

wlCommonInit()

这可能与Android应用的真实性设置有关吗? (例如(function () { 'use strict'; angular .module('myng-worklight', []) .run(WorklightRun) WorklightRun.$inject = ['$rootScope', '$q']; /** * Load worklight */ function WorklightRun($rootScope, $q) { // Worklight statuss var worklightDeferred = $q.defer(); $rootScope.worklightPromise = worklightDeferred.promise; $rootScope.worklightLoaded = false; $rootScope.worklightConnected = false; var worklightLoadEvent = null; worklightLoadEvent = document.createEvent('CustomEvent'); // Worklight connect options var wlConnectOptions = { timeout: 30000, onFailure: connectionFailure, onSuccess: function () { console.log('MFP: Connected'); $rootScope.worklightConnected = true; worklightDeferred.resolve(); } }; // Worklight init options var wlInitOptions = { timeout: 10000, onConnectionFailure: connectionFailure, onFailure: connectionFailure, onSuccess: function () { console.log('MFP: Loaded'); $rootScope.worklightLoaded = true; if (window.addEventListener) { window.addEventListener(WL.Events.WORKLIGHT_IS_CONNECTED, wlConnectedHandler, true); window.addEventListener(WL.Events.WORKLIGHT_IS_DISCONNECTED, wlDisconnectedHandler, true); } else if (window.attachEvent) { window.attachEvent(WL.Events.WORKLIGHT_IS_CONNECTED, wlConnectedHandler); window.attachEvent(WL.Events.WORKLIGHT_IS_DISCONNECTED, wlDisconnectedHandler); } console.log('MFP: About to connect with: ' + JSON.stringify(wlConnectOptions, null, 2)); WL.Client.connect(wlConnectOptions); } }; // we should connect on the cb from init -- output! // Listen for load / onload and start worklight init if (window.addEventListener) { window.addEventListener('load', loadHandler, false); } else if (window.attachEvent) { window.attachEvent('onload', loadHandler); } function connectionFailure(err) { console.log('MFP: No Connection - ' + JSON.stringify(err, null, 2)); worklightDeferred.reject(err); } function loadHandler() { try { console.log('MFP: Load event detected, about to init with: ' + JSON.stringify(wlInitOptions, null, 2)); WL.Client.init(wlInitOptions); } catch (err) { console.error('MFP: "WL" not defined - ' + err); connectionFailure(); worklightLoadEvent.initCustomEvent('worklightLoadFailure', true, false, {}); window.dispatchEvent(worklightLoadEvent); } } function wlConnectedHandler() { $rootScope.worklightConnected = true; WL.App.hideSplashScreen(); } function wlDisconnectedHandler() { $rootScope.worklightFailureAcknowledged = true; $rootScope.worklightConnected = false; WL.App.hideSplashScreen(); } } })(); 中的publicSigningKey或application-descriptor.xml中的customTests

以下是authenticationConfig.xml的相关位:

application-descriptor.xml

来自<android securityTest="customTests" version="1.0"> <worklightSettings include="false"/> <pushSender key="XYZ" senderId="123"/> <security> <encryptWebResources enabled="false"/> <testWebResourcesChecksum enabled="false" ignoreFileExtensions="png, jpg, jpeg, gif, mp4, mp3"/> <publicSigningKey>MIIBI...</publicSigningKey> <packageName>com.MyPackage</packageName> </security> </android>

authenticationConfig.xml

1 个答案:

答案 0 :(得分:0)

IMO这是错误的。

您不应该以这种方式致电WL.Client.connect 应该在wlCommonInit()函数内调用Worklight API,该函数位于common \ main.js文件中,而不是来自common \ initOptions.js文件。

查看Developer Center提供的各种示例应用程序。它们都不是以这种方式实现的......(样本适用于7.1并且您使用的是6.2,因为概念是相同的)。

所有onSuccess都不应该这样做;