2014-07-10 74 views
1

在Worklight 6.2中,您可以在同一系列的应用程序之间共享信息。Worklight 6.2共享应用程序系列之间的信息

我的理解是使用此API可以在应用程序之间共享键值对。是否可以将复杂的JSON设置为值?或者只能共享一个字符串?

我不确定您需要如何定义应用程序属于应用程序系列 - 它是如何配置的?有关于这个功能的教程吗?

回答

2

要启用简单的数据共享的工作灯6.2

  1. 添加的环境
  2. 编辑应用程序描述符文件,以使应用程序之间简单的数据共享
  3. 指定应用程序的姓氏
  4. 保存和构建所有环境

欲了解更多信息,请参阅Enabling simple data sharing in worklight 6.2

在您的应用程序中使用简单的数据共享。您可以使用以下WL.Client阿比的

  • setSharedToken(object)
  • getSharedToken(object)
  • clearSharedToken(object)

欲了解更多信息请参阅 WL.Client api for worklight 6.2

截至目前我没有找到简单的数据任何教程分享。

并回答您的问题AFAIK您可以使用JSON对象作为您的密钥的值。它仅适用于Android和iOS环境。

更新2014年7月18日 我找不到任何教程,如此创建一个为simple data shar between apps

-1

IBM工作灯有“启用用于混合应用的简单数据共享”的特征(即,共享的两个或更多的应用程序属于同一家族之间的数据)

但这并不工作。

用于设置我们使用数据 “WL.Client.setSharedToken(对象)”,这需要JSON对象作为, 对象= { 键: “ABC”, 值: “12345” };作为参数。 这将设备中的令牌设置为JSON对象,如{abc:“12345”}

并且用于检索数据我们的“ , var object = { key:“abc” }; 这将返回密钥“abc”的值(即本例中的“12345”)

“WL.Client”中存在一个错误。getSharedToken(object)“,用于获取存储的信息。 在用于获取数据(在调用WL.Client.getSharedToken(object)时)的worklight.js(其中定义了所有客户端API)文件时,正在进行的调用是异步的,但它应该是同步的。

内部WL.Client.getSharedToken(对象)调用cordova函数(用于调用本地设备功能以获取由WL存储的数据。 Client.setSharedToken(对象)),这是异步的,所以它不等待设备返回所存储的值,但返回空对象。

它应该是一个同步呼叫。

this.getSharedToken = function(obj){ var dfd = $ .Deferred();

obj = obj || {}; 
    var key = obj.key || ''; 

    if (((WL.Client.getEnvironment() === WL.Env.IPHONE) 
     || (WL.Client.getEnvironment() === WL.Env.IPAD) 
     || (WL.Client.getEnvironment() === WL.Env.ANDROID)) 
     && (typeof cordova === 'object')) { 
    setTimeout(function() { 
     cordova.exec(dfd.resolve, dfd.reject, 'WLApp', 'getSharedToken', [key]); 
    }, 0); 
    } else { 
    setTimeout(dfd.resolve, 0); 
    } 

    return dfd.promise(); 

};

我修改了上面的功能worklight.js在由工作灯创建的Android项目,当我们建立环境

this.getSharedToken =函数(OBJ){VAR DFD = $ .Deferred() ;

obj = obj || {}; 
    var key = obj.key || ''; 

    if (((WL.Client.getEnvironment() === WL.Env.IPHONE) 
     || (WL.Client.getEnvironment() === WL.Env.IPAD) 
     || (WL.Client.getEnvironment() === WL.Env.ANDROID)) 
     && (typeof cordova === 'object')) { 
    setTimeout(function() { 
     cordova.exec(function(data){alert(JSON.stringify(data));}, function(res){alert(JSON.stringify(res))}, 'WLApp', 'getSharedToken', [key]); 
    }, 0); 
    } else { 
    setTimeout(dfd.resolve, 0); 
    } 

    return dfd.promise(); 

};

所以它首先将空对象返回给客户端,然后提醒从设备获取的数据(cordova.exec成功回调中给出的警报)。

这不是预期的行为。它应该是一个同步调用,即一旦数据从设备中获取,那么只有它应该被返回。

+0

这不是报告错误的地方;如果您是IBM客户,那么请继续并开启PMR--他们的开发将继续进行并提供修复。 –

+0

这是预期的行为。 Javascript并不是一种语言,它可能会做很长时间的同步调用;任何对磁盘的调用应该是异步完成的,否则你将锁定Webcore和/或UI线程,并减慢你的应用程序,甚至可能造成死锁。这对任何其他编程语言和环境都是如此,但对JS尤其关键,因为所有东西都在一个线程中运行。如果您不同意实现,请打开一个功能请求,但首先我建议您阅读文档,以便在说明错误之前了解其工作原理。 –

+0

仅供参考,以下是用于Javascript的WLClient API:供参考:http://www-01.ibm.com/support/knowledgecenter/SSZH4A_6.2.0/com.ibm.worklight.apiref.doc/html/refjavascript-client /html/WL.Client.html?cp=SSZH4A_6.2.0%2F10-0-0-1-6简单数据共享的方法在该类中。正如set和getSharedToken都可以看到的那样,返回的值是一个承诺,一旦完成保存或检索数据,它就会被调用。 –

相关问题