70

Apicloud 几个使用事项

 4 years ago
source link: https://hexo.hainuo.info/posts/apicloud-h5-usefully-guidance/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

  1. 如何避免 openWin() 的黑屏问题

    两种解决方式

    1. openWin() 参数中设置 bgColor:'#fff'
    2. config.xml 中设置 appBackgroundwindowBackground 的值为 #fff ;(当然您也可以顺手将, frameBackgroundColor 的值设置为 #fff ,解决某些情况下 frame 也黑屏的问题)
      当然以上黑屏问题就变成了白屏问题,:joy:哈哈哈。
  2. 少量持久化信息的存储

    持久化信息的存储,在 Apicloud 中给了明确的说明 也提供了三个方法来解决添加,获取,删除的问题。见以下代码:

    // 存储持久化数据
    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 ; 如果本来就有那么需要在原基础上增加。


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK