0%

Apicloud 几个使用事项

在使用Apicloud的时候遇到的一些问题:

  1. 如何避免 openWin() 的黑屏问题
    两种解决方式

    1. openWin() 参数中设置 bgColor:'#fff'
    2. config.xml 中设置 appBackgroundwindowBackground 的值为 #fff;(当然您也可以顺手将,frameBackgroundColor 的值设置为 #fff,解决某些情况下 frame 也黑屏的问题)
      当然以上黑屏问题就变成了白屏问题,😂哈哈哈。
  2. 少量持久化信息的存储
    持久化信息的存储,在 Apicloud 中给了明确的说明 也提供了三个方法来解决添加,获取,删除的问题。见以下代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // 存储持久化数据
    api.setPrefs({
    key: 'userName',
    value: 'api'
    });
    // 获取持久化数据 只用同步就好了,因为大部分时候我们都是要同步获取数据来用的;异步还是要根据实际应用场景来选择使用,不建议用。
    //同步返回结果:
    var userName = api.getPrefs({
    sync: true,
    key: 'userName'
    });
    //删除持久化数据
    api.removePrefs({
    key: 'userName'
    });

    通过以上的三个方法可以解决用户登陆态的基本问题,但是有时候我们会遇到,明明已经设定了 prefs 为什么获取的时候获取不到?我猜测有两个方面:

    1. UIWebViewWKWebView中混用,这是最常见的问题。
    2. 在设置的时候,窗口销毁。导致操作未完成。
      针对第一种情况,我们不需要做特殊处理,就是将原来设定的 framewindow 中的属性 useWKWebView 这里保留默认就好了。 苹果公司在 2020 年 4 月 20 日回将 UIWebview设置内部 API ,所以这里默认就是使用了 WKWebview
      针对第二种情况,一般就是数据量较大,需要更换为 fs 或者 db 等方式处理数据。
      对于另一对方法 setGlobalDatagetGlobalData ,如果您的应用只需要当次打开用,退出应用后不记录任何状态,那么可以使用。这两个方法是记录临时数据的。
  3. 关闭到某个窗口 api.closeToWin({name:'root'})
    如果是使用 apicloud 云端打包,默认窗口的名字是 root,这样有利于我们快速返回首页。

  4. 关于窗口交互 记住当存在一个窗口打开或者关闭操作时,其他的窗口的打开或者关闭指令是被忽略的,窗口关闭打开的交互时间延迟至少要 800ms 之前试过 500ms 不起作用,有兴趣的可以亲自去测试这个问题。

  5. 关于 tabBar 的监听,如何确认使用的事件是对的?

    1. 针对 tabitembtn 的事件监听,是用来确认点击某个按钮后,是否要执行页面展示操作。比如我们有一个页面登陆后才能看到,那么就可以用这个事件来监听登陆态是否存在,存在则打开页面,不存在则停止操作(或者打开登陆页面)
    2. 针对 tabframe 的事件监听,有两个方式回出发此事件,第一个是点击 tabBar ,第二个是左右划屏(这个需要在调用 openTabLayout 时设置 tabBarscrollEnabled 属性为 true)。 这种时候也可以通过这个判断登陆态 ,如果未登陆则 通过 方法 api.setTabBarAttr({index: 1});来让用户返回首页或者某个不需要登陆的页面。同样 这个方法还可以用于处理 navigationBar 的按钮问题,尤其是在 tabBar 不同的页面左上角和右上角有不同的按钮和触发事件的时候。
  6. 针对没有 tabBar 的页面 需要处理底部沉浸式问题,在适当的 div 或者 body 标签上要增加样式 document.querySelector('body').style.paddingBottom = api.safeArea.bottom;如果本来就有那么需要在原基础上增加。

  7. 针对没有 navigationBar 的需要处理顶部沉浸式问题,在适当的 div 或者 body 标签上要增加样式 document.querySelector('body').style.paddingTop = api.safeArea.top; 如果本来就有那么需要在原基础上增加。