uniapp使用相关技术要点

1 升级/更新

uniapp升级/更新的文档

评论区有提供一个更新插件:更新插件,支持整包更新、热更新,支持vue3 支持打开安卓、苹果应用市场,wgt静默更新。
插件地址

uniapp安卓包升级未生效

主要参考上这个文章里,对于dcloud_control.xml文件的处理,对于debug和syncDebug都要设置成false。不然就有可能升级不生效。

uniapp更新版本

uni-app离线包更新

uni-app离线包更新 (导出dist离线资源):

[HBuilder] 20:16:03.275 项目 'app-demo-uniapp' 编译成功。
[HBuilder] 20:16:03.275 文件查找失败:'vue-jsonp' at main.js:15
[HBuilder] 20:16:04.366 项目 'app-demo-uniapp'导出失败
  • 注意:需要npm以及cnpm命令来执行模块绑定。
npm install -g cnpm --registry=https://registry.npm.taobao.org

如果报错:没有权限,则在命令前添加sudo,输入密码即可。

npm ERR! It is likely you do not have the permissions to access this file as the current user

如果上述操作执行成功后,再次发布仍然没有导出资源。则可以执行如下命令:

cnpm install
  • 注意:在这之前还可以执行如下命令
npm install

导出成功,信息如下:

[HBuilder] 20:18:10.187 项目 'app-demo-uniapp'导出成功,路径为:/Users/hh/Documents/webviewapp-demo-uniapp/app-demo-uniapp/unpackage/resources/__UNI__XXXXX/www
[HBuilder] 20:18:10.193 提示:本wgt文件由HBuilderX 3.2.16版本生成,运行的基座sdk也需配套相同版本,否则在手机端部分功能可能无法正常使用。详见 http://ask.dcloud.net.cn/article/35627

2离线工程

iOS

  • 工程结构
---- app-demo-ios
    ---- Application
    ---- HBuilder
    ---- app-demo-ios.xcodeproj
---- SDK
    ---- Bundles
    ---- inc
    ---- Libs
    ---- control.xml

说明:iOS离线工程建议以uniapp提供的DEMO工程为参考,将工程放置于DEMO路径下(与demo里的其他示例工程同级)。如此,可以和示例工程一样同样共享SDK里的库和资源文件,且工程的Build Settings下的Search Paths配置可以和示例工程保持一致,减少不必要的错误。

Android

  • 工程结构
---- app
    ---- src
    ---- libs
    ---- build.gradle
---- build.gradle
---- gradle

说明:androids离线工程建议自定义工程,然后将uniapp提供的DEMO下的libs拷贝到app下libs目录中,再在app下的build.gradle中对需要用到的库进行配置(不需要的不要引入,从而减少安装包大小)即可。

3 安装到API使用

uni-app从安装到运行,简单使用

HTML5Plus

uni-app API

common.ajax

Mui

  • 参考:

平台区分判断:

如果是原生比如Android和iOS的开发,应该需要使用如下来判断

   // #ifdef APP-PLUS

如下这个是浏览器的判断

      // #ifdef H5

这个是判断代码在那个环境(app,浏览器,小程序)里运行,小程序里面又细分了平台,
这个官网有明确的文档。

uniapp检测网络变化

获取应用的版本号

  • 获取应用的版本号的不同
plus.runtime.version
plus.runtime.getProperty

说明:
plus.runtime.getProperty:从前端代码的manifest.json中获取version
plus.runtime.version:需要配置Android/iOS原生工程对应参数

注意:由于HBuilder支持热更新(APP增量更新),而增量更新不依赖原生工程,所以做APP更新升级的时候,获取版本号最好从plus.runtime.getProperty获取。

4 事件监听和触发

事件监听和触发

uniapp监听Android手机右滑事件

5 Storage存储

html Storage

  • html和vue通信方式:
    (1)在html中使用如下方式获取:
let progress = plus.storage.getItem('progresschange');

(2)在App.vue中使用如下设置:

uni.setStorageSync(key, data);

说明:这里是在cookie.js中封装了上述方法,实际调用如下:
cookie.set('progresschange', res.progress);

(3)注意:在App.vue中使用如下设置,暂时拿不到值,不知道为什么:

plus.storage.setItem('progresschange', res.progress);

说明:找到原因,通过对API的官方介绍,发现这个API的value的类型必须为string。而上面设置的为number类型。

plus.storage.setItem('progresschange', res.progress.toString());

uniapp获取ios/android存储数据

6 JSON和Console

解析Object为JSON对象

  • 可以使用如下来解析Object为JSON对象,并从对象里获取data的值。
var progressVar = JSON.parse(progress).data; 

-uniapp toJSON

Uni-App离线打包输出Console.log信息

  • 只需要修改 dcloud_control.xml 文件的<hbuilder>标签添加debug 和 syncDebug 如图所示:
<hbuilder debug="true" syncDebug="true">
<apps>
    <app appid="__UNI__XXXXX" appver=""/>
</apps>
</hbuilder>
  • ios修改control.xml文件中的同样标签即可。

  • 特别注意:
    (1)调试的时候,如果重新运行APP,可能需要卸载掉手机已有APP,然后再重新安装,不然可能代码修改会失效。
    (2)正式打包的时候,这两个要设置为false或者去掉,不然会导致热更新/升级失效。

  • 参考:
    https://blog.csdn.net/u010227042/article/details/115676438

uniapp转对象为json字符串

  • 对象转字符串
var str = JSON.stringify(Obj);

obj 替换成你要转的对象

  • 字符串转对象
var str1 = JSON.parse(str);

str 替换成你要转的字符串

7 微信登录

unipp(iOS)微信授权登录跳转到其他APP

  • 问题:
    手机同时安装有自己公司开发的两个应用,其中一个APP通过微信授权登录完成后会跳转到另一个APP。

  • 排查:
    (1)APP在配置微信登录的时候,只改了weixinoauth(官方文档介绍这是HBuilder 3.2.0之前的配置),而没有改weixin配置。
    (2)修改Universal Link。
    (3)查看info.plist文件下 URL types 下的Item(比如A工程为Item 3),其中的URL Schemes还是配置的为B工程的参数。


    image.png

8 一键登录

关于一键登录

2022-01-10 12:05:12.845339+0800 demo-app-ios[36551:13055048] <Weex>[log]WXBridgeContext.m:1310, jsLog: preLogin fail err: ---COMMA------BEGIN:JSON---{"errMsg":"preLogin:fail provider not find","errCode":0,"code":0}---END:JSON--- at assets/js/login.js:133 __LOG

参考:
https://baijiahao.baidu.com/s?id=1712308991464664814&wfr=spider&for=pc
https://blog.csdn.net/E86huang/article/details/107100073
https://ask.dcloud.net.cn/question/131159?notification_id-84803__rf-false__item_id-25486

  • 一键登录可以使用的日志判断:
10:20:08.726 getProvider success res, [Object] {"errMsg":"getProvider:ok","service":"oauth","provider":["univerify","weixin","qq","sinaweibo","google","f...}  at assets/js/login.js:110

说明:当返回结果的provider有提供“univerify”即说明一键登录可以使用。

  • 预登录失败:
10:20:09.084 preLogin fail err: , [Object] {"errMsg":"preLogin:fail -20203预登录失败","errCode":30005,"code":30005,"appid":"pPyZWvH3Fa6PXba10aJ009","metad...}  at assets/js/login.js:131

原因:一键登录的库导入的时候,漏掉了aar后缀,导致没有导入包内。

implementation files('libs/oauth-univerify-release.aar')
  • 注意:一键登录需要插入SIM卡,才能生效:

  • iOS的一键登录,需要导入库,如下3个:
    UniVerify.framework、libGTCommonSDK-1.2.2.0.a、GeYanSdk.framework

9 阿里云云空间

阿里云云空间云函数创建

  • 上传部署,报错:
11:39:02.828 [阿里云:]正在上传云函数get-phone-number...
11:39:02.847 [阿里云:]云函数get-phone-number上传失败。失败原因:请先选择一个云服务空间。。

原因:由于本地HBuilder X登录的是我自己的账号,但是阿里云云空间申请的是另一个开发账号,所以在阿里云云空间进行关联的时候就关联不上。

  • 由于新的项目,没有加入,所以报错:
11:46:10.856 [阿里云:demo-cloud]云函数get-phone-number上传失败。失败原因:此应用 DCloud APPID 为 __UNI__XXXXXX ,您不是这个应用的项目成员。1、联系这个应用的所有者,请求加入项目成员(https://dev.dcloud.net.cn可设置项目成员);2、重新在manifest.json中生成自己的APPID。

原因:这个还是需要在另一个开发账号的创建的工程上去创建云函数。目前本地创建的属于我个人的项目,所以Dcloud appid不一致。

  • 云函数,调试接口,报错:
[getPhoneNumber/ac141c151641282245358181067/39ms/ERROR] errCode: 1001 | errMsg: getPhoneNumber参数access_token值不可为空
Error: errCode: 1001 | errMsg: getPhoneNumber参数access_token值不可为空
    at Tt (/tmp/function/@dcloudio/serverless/lib/aliyun/uni-cloud.js:1:42161)
    at exports.main (/tmp/function/__index.js:4:29)
    at i (/tmp/function/index.js:1:2736)
    at p (/tmp/function/index.js:1:3209)
    at runUserFunction (/code/index.js:130:195499)
    at (<anonymous>)
    at _tickCallback (internal/process/next_tick.js:189:7)

参考:https://ask.dcloud.net.cn/question/125550

10 uniapp和原生交互

requireNativePlugin

  • uniapp和原生交互
    前端代码示例:
let info = {'name': 'abc', 'age': 12}
let nativeplugin = uni. requireNativePlugin('nativeplugin')
nativeplugin.nativeCall('haha', info, (res) => {
        if (res) {
              console.log('res:' + res)
        }
}}

说明:前端调用非常方便,代码非常简洁。

iOS

(1)定义协议类
NativeUniProxy.h

#import <Foundation/Foundation.h>
#import "UniPluginProtocol.h"

NS_ASSUME_NONNULL_BEGIN

@interface NativeUniProxy : NSObject<UniPluginProtocol>

@end

NS_ASSUME_NONNULL_END

NativeUniProxy.m

#import "NativeUniProxy.h"

@implementation NativeUniProxy

-(void)onCreateUniPlugin{
    NSLog(@"TestPlugin 有需要初始化的逻辑可以放这里!");
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    NSLog(@"TestPlugin 有需要didFinishLaunchingWithOptions可以放这里!");
    return YES;
}

@end

(2)定义UniModele类
NativeUniModule.h

#import <Foundation/Foundation.h>
#import "DCUniModule.h"

NS_ASSUME_NONNULL_BEGIN

@interface NativeUniModule : DCUniModule

@end

NS_ASSUME_NONNULL_END

NativeUniModule.m

#import "NativeUniModule.h"

@implementation NativeUniModule

UNI_EXPORT_METHOD(@selector(nativeCall:info:callback:))

- (void)nativeCall:(NSString *)params info:(NSDictionary *)info callback:(UniModuleKeepAliveCallback)callback
{
    NSLog(@"nativeCall:%@, info:%@", params, info);
    
    //other things
    
   if (mapCallback) {
        callback(@"result call mock", NO);
    }
}

@end

说明:
1)callback

typedef void (^UniModuleKeepAliveCallback)(id result, BOOL keepAlive);

callback第一个参数为需要回调给前端的参数;第二个参数表示是否保活,如果设置为NO,则回调调用一次即被销毁,而设置为YES,则执行回调后仍然继续存在,比如下载进度回调时就需要多次调用callback。

2)协议类和UniModule类
如果没有特殊情况下,协议类只需要设置一个即可。而UniModule类可以根据不同的功能做不同的自定义。

(3)配置Info.plist


image.png

说明:协议类和UniModule类都需要在这里配置。

Android

(1)继承UniModule

package com.demo.apps.nativeSDK;

import android.app.Activity;
import android.util.Log;

import org.json.JSONObject;

import io.dcloud.feature.uniapp.annotation.UniJSMethod;
import io.dcloud.feature.uniapp.bridge.UniJSCallback;
import io.dcloud.feature.uniapp.common.UniModule;

public class NativeUniModule extends UniModule {

    private static final String TAG = "demo.app: ";

    /**
     * @param params
     * @param jsCallback
     */
    @UniJSMethod(uiThread = true)
    public void nativeCall(String params,  JSONObject info, UniJSCallback jsCallback) {
        Log.d(TAG, "native ===> " + params);

        if (mUniSDKInstance.getContext() instanceof Activity) {
            Log.d(TAG, "native ===> can start ");

             //other things

//            com.alibaba.fastjson.JSONObject result = new com.alibaba.fastjson.JSONObject();
//            result.put("type", "native result:mock data");
//            jsCallback.invoke(result);

        }
    }
}

(2)callback
同iOS,也有两个,一个是invoke,invokeAndKeepAlive(保活)。

(3)配置dcloud_uniplugins.json
路径为:app/sr/main/assets/apps/__UNI_XXXXX/www

{
  "nativePlugins": [
    {
      "hooksClass": "",
      "plugins": [
        {
          "type": "module",
          "name": "nativeplugin",
          "class": "com.demo.apps.nativeSDK.NativeUniModule"
        },
        {
          "type": "module",
          "name": "othernativeplugin",
          "class": "com.demo.apps.nativeSDKOther.OtherNativeUniModule"
        }
      ]
    }
  ]
}

Native.js

  • Native.js技术,简称NJS,是一种将手机操作系统的原生对象转义,映射为JS对象,在JS里编写原生代码的技术。
    说明:Native.js技术与插件方式相比,优点在于不需要做额外配置,直接通过plus提供的封装接口来调用原生工程的API(包括系统的或者自定义的)。缺点在于它是直接在前端代码里嵌套调用原生API,导致代码臃肿,调用繁琐,不够灵活。

  • 示例:

let system = uni.getSystemInfoSync()
if (system.platform == 'android') {
      let util = plus.android.importClass('com.test.demo.app.TestUtil')
      if (util) {
          util.login('haha')
     }
} else if (system.platform == 'ios') {
      let tool = plus.ios.importClass('TestTools')
      if (tool) {
            tool.setTestValue('haha')
     }
}

说明:上面调用自定义类的时候,两者是有一些差别的,iOS是直接引入的类名,而Android是需要包名+类名。

原生是否可以直接调用uniapp方法

plus5调用Android的自定义类方法

11 定位和地图

uniapp获取定位权限

uniapp地图

  • 如果前端代码使用地图时使用了nvue,则会有地图不能显示的问题:
    从dcloud官方文档可知:
    开发者需要修改使用的地图插件时,需要修改dcloud_properties.xml文件的features节点下Maps节点value属性的配置,高德地图和百度地图的配置只能保留一个
    百度地图暂时不支持 nvue map 标签

  • API使用:
    根据官方文档可知,如果使用uni.getLocation方法,百度地图/高德地图都可以。
    如果使用uni.chooseLocation方法,目前APP端只支持高德地图。

  • 从百度地图切到高德地图:
    1.app下build.gradle下添加百度/高德的appkey,并在dependency下切换百度/高德的implementation对应的库文件
    2.修改dcloud_properties.xml文件的features节点下Maps节点value属性的配置,高德地图和百度地图的配置只能保留一个
    3.AndroidManifest.xml下配置百度/高德的权限以及对应的配置项

  • iOS:引入高德地图时,同样需要引入nvue相关库

plus.maps API

uniapp通过经纬度获取地理位置

腾讯地图API

uniapp获取定位失败。

  • assets/data目录下dcloud_properties.xml文件,features节点下添加:
<feature name="Maps" value="io.dcloud.js.map.JsMapPluginImpl"></feature>
Copy to clipboardErrorCopied
services节点下添加:

<service name="Maps"   value="io.dcloud.js.map.MapInitImpl" />

uni.getLocation获取位置信息失败

百度定位失败,日志信息:

D/baidu_location_service: baidu location service start1 ...20190617...24119
I/baidu_location_service: LocationAuthManager Authentication AUTHENTICATE_SUCC
D/baidu_location_service: baidu location service register ...
W/Settings: Setting airplane_mode_on has moved from android.provider.Settings.System to android.provider.Settings.Global, returning read-only value.
D/baidu_location_service: baidu location service stop ...
D/baidu_location_service: baidu location service has stoped ...

直接使用HBuilderX跑真机,错误信息:

10:06:38.220 ---> <UPopup> at uni_modules/uview-ui/components/u-popup/u-popup.vue:1
10:06:38.243     <UPicker> at uni_modules/uview-ui/components/u-picker/u-picker.vue:1
10:06:38.266      <DatetimePicker> at uni_modules/uview-ui/components/u-datetime-picker/u-datetime-picker.vue:1
10:06:38.289       <DatePicker> at components/uni-picker/uni-datePicker.vue:1
10:06:38.309        at marketing/crm/visit/comm/addVisit.vue:1
10:06:45.734 [JS Framework] Failed to execute the callback function:
10:06:45.758 TypeError: Cannot read property 'removeEventListener' of undefined
10:06:45.782 reportJSException >>>> exception function:__WEEX_CALL_JAVASCRIPT__, exception:JavaScript execute error!Uncaught TypeError: Cannot read property 'removeEventListener' of undefined

12 文件处理

uni.chooseFile

17:23:38.536  API `chooseFile` is not yet implemented __ERROR 

参考:
https://ask.dcloud.net.cn/question/125325

uniapp的预览文件ios不起作用

参考:
https://ask.dcloud.net.cn/question/116965
https://lequ7.com/guan-yu-uniapp-kua-ping-tai-wen-jian-zai-xian-yu-lan-jie-jue-fang-an-si-android-he-ios-yuan-sheng-cha-jian.html
https://www.cnblogs.com/lizhao123/p/11498948.html

uni.saveFile

  • 如下为前端代码调用uni.saveFile的日志:
    日志中"savedFilePath"对应的路径为uniapp特有,iOS沙盒中暂时找不到,不确定是不是uniap做了特殊的路径映射。
16:51:10.144  sy.app: downloadAndSaveFile download res:{"tempFilePath":"_doc/uniapp_temp_1649839860074/download/e18e6e9ee590525ec02179dfc6e0ebd1-Log07-10-22-15.txt","statusCode":200,"errMsg":"downloadFile:ok"} at utils/file.js:272 
16:51:10.168  sy.app: downloadAndSaveFile save res:{"errMsg":"saveFile:ok","savedFilePath":"_doc/uniapp_save/16498398700410.txt"} at utils/file.js:278 
  • iOS中保存文件
    报错:

2022-04-14 01:21:53.003730+0800 demo-app-ios[8296:2412596] sy.app: saveFileToLocalByPath fail: filePth:https://cos.ap-shanghai.myqcloud.com/6126-shanghai-007-shared-05-1256635546/1dc9-1400655679/bc4a-apps_131268/a1b4a05dc5d4ffe1cf5ed0adadf6ebcb-fileuploadtext.txt, toPath:/var/mobile/Containers/Data/Application/4ED63A5D-4C7B-490A-8082-172574448E68/Library/Caches/SavedFiles/a1b4a05dc5d4ffe1cf5ed0adadf6ebcb-fileuploadtext.txt, error:Error Domain=NSCocoaErrorDomain Code=262 "未能打开文件“a1b4a05dc5d4ffe1cf5ed0adadf6ebcb-fileuploadtext.txt”,因为不支持URL类型https。" UserInfo={NSURL=https://cos.ap-shanghai.myqcloud.com/6126-shanghai-007-shared-05-1256635546/1dc9-1400655679/bc4a-apps_131268/a1b4a05dc5d4ffe1cf5ed0adadf6ebcb-fileuploadtext.txt}

参考:
https://www.thinbug.com/q/32770050

uni.openDocument在iOS上打不开文件

13 腾讯即时通讯IM

tim-js-sdk: 腾讯即时通信IM

15:07:38.694 TIM 15:07:38 GMT+0800 (CST).360:TIM.VERSION: 2.17.1
15:07:38.714 API `getFileSystemManager` is not yet implemented
15:07:38.875 TIM 15:07:38 GMT+0800 (CST).517:TIM.VERSION: 2.17.1
15:07:39.314 %c uView V2.0.30 %c https://www.uviewui.com/
15:07:39.359 , color: #ffffff; background: #3c9cff; padding:5px 0;, color: #3c9cff;background: #ffffff; padding:5px 0; at node_modules/uview-ui/libs/config/config.js:6
15:07:39.674 TIM 15:07:39 GMT+0800 (CST).329:TIM.create
15:07:39.717 TIM 15:07:39 GMT+0800 (CST).378:SocketHandler._connect isWorkerEnabled:false socketID:48710914 url:wss://wss.im.qcloud.com/info?sdkappid=1400655679&instanceid=aa2d78c302e1fd61a2adce0ccd921d55&random=0.5302842571595281&platform=15&host=android
15:07:39.805 TIM 15:07:39 GMT+0800 (CST).460:SDK instanceID:aa2d78c302e1fd61a2adce0ccd921d55 SDKAppID:1400655679 host:android oversea:false inBrowser:false inMiniApp:true workerAvailable:false UserAgent:
15:07:39.832 TIM 15:07:39 GMT+0800 (CST).463:TIM.create ok
15:07:39.870 ________  ______  __       __  __       __  ________  _______
15:07:39.892 |        \|      \|  \     /  \|  \  _  |  \|        \|       \
15:07:39.916 \$$$$$$$$ \$$$$$$| $$\   /  $$| $$ / \ | $$| $$$$$$$$| $$$$$$$\
15:07:39.937 | $$     | $$  | $$$\ /  $$$| $$/  $\| $$| $$__    | $$__/ $$
15:07:39.957 | $$     | $$  | $$$$\  $$$$| $$  $$$\ $$| $$  \   | $$    $$
15:07:39.979 | $$     | $$  | $$\$$ $$ $$| $$ $$\$$\$$| $$$$$   | $$$$$$$\
15:07:40.000 | $$    _| $$_ | $$ \$$$| $$| $$$$  \$$$$| $$_____ | $$__/ $$
15:07:40.023 | $$   |   $$ \| $$  \$ | $$| $$$    \$$$| $$     \| $$    $$
15:07:40.046 \$$    \$$$$$$ \$$      \$$ \$$      \$$ \$$$$$$$$ \$$$$$$$
15:07:40.089 at node_modules/tim-wx-sdk/tim-wx-friendship.js:1
15:07:40.109 %cIM 智能客服,随时随地解决您的问题 →_→ https://cloud.tencent.com/act/event/smarty-service?from=im-doc, color:#006eff at node_modules/tim-wx-sdk/tim-wx-friendship.js:1
15:07:40.133 %c从v2.11.2起,SDK 支持了 WebSocket,小程序需要添加受信域名!升级指引: https://web.sdk.qcloud.com/im/doc/zh-cn/tutorial-02-upgradeguideline.html, color:#ff0000 at node_modules/tim-wx-sdk/tim-wx-friendship.js:1
15:07:40.180 参考以下文档,会更快解决问题哦!(#^.^#)
15:07:40.226 SDK 更新日志: https://cloud.tencent.com/document/product/269/38492
15:07:40.270 SDK 接口文档: https://web.sdk.qcloud.com/im/doc/zh-cn/SDK.html
15:07:40.313 常见问题: https://web.sdk.qcloud.com/im/doc/zh-cn/tutorial-01-faq.html
15:07:40.362 反馈问题?戳我提 issue: https://github.com/tencentyun/TIMSDK/issues
15:07:40.403 如果您需要在生产环境关闭上面的日志,请 tim.setLogLevel(1)
15:07:40.426 at node_modules/tim-wx-sdk/tim-wx-friendship.js:1
15:07:40.446 TIM 15:07:39 GMT+0800 (CST).467:set level from 0 to 0
15:07:40.466 当前是APP at api/message/imApi.js:35
15:07:40.779 TIM 15:07:40 GMT+0800 (CST).429:SocketHandler._onOpen cost 1092 ms. socketID:48710914
15:07:40.799 TIM 15:07:40 GMT+0800 (CST).434:SocketHandler._resend reConnectFlag:false promiseMap.size:0 simpleRequestMap.size:0
15:07:41.526 Unhandled promise rejection
15:07:41.629 定位问题-接口报错信息error:, [Object] {"message":"request:ok","status":500,"response":{"data":{"timestamp":"2022-05-24 15:07:41","status":500,"e...}  at utils/request.js:32
15:07:41.654 获取系统IM模块失败 at store/modules/im.js:223
15:07:42.395 定位问题-接口报错信息error:, [Object] {"message":"request:ok","status":500,"response":{"data":{"timestamp":"2022-05-24 15:07:42","status":500,"e...}  at utils/request.js:32
15:07:42.396 IM_SDK 登录失败, [Object] {"timestamp":"2022-05-24 15:07:42","status":500,"error":"Internal Server Error","exception":"com.xxx.demo...}  at store/modules/im.js:238

IM调试问题:

apps_131584 当前使用的设备信息如下:
该 UserID 从未上报过证书ID 和设备 Token,请检查。

uniapp接入IM离线消息

14 其他

uniapp不弹toast

uniapp navigator

uni-list

uview

注意:这个轮子很好,很方便,赞。

uniapp配置tabBar没有显示

参考:
https://blog.csdn.net/wangzhenhuait/article/details/104309232
https://blog.csdn.net/qq_28004379/article/details/121160126?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ETopBlog-1.topblog&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ETopBlog-1.topblog

uni.hideTabBar无效

uniapp启动页面隐藏tabbar

uni-simple-router

mac查看nodejs版本

uniapp设置Android状态栏

wgt安装失败

15:44:43.812 sy.shop: install fail, e:{"code":-1202,"message":"WGT安装包中manifest.json文件不存在"} at utils/console-custom.js:3

原因:wgt即zip,只是后缀名改了一下。
这里wgt安装失败,原因是,Jenkins打包时shell脚本压缩文件夹时zip包内部文件夹结构不一样。
HBuilder的zip内部是直接文件分布,目前Jenkins打包时的zip内部是先有www文件夹路径,www内部有文件。

处理:通过如下命令来处理文件夹压缩

if [ -d "www"]; then
    zip -q -r www.zip .
    echo 'zip www.zip successful!'
else
    echo 'zip www.zip failure'
fi

原生APP制作wgt包使用的是zip哪个命令

uni-app的快速上手里的cli命令

npm清理缓存

npm cache clean -f
npm cache clean --force

执行:

npm WARN using --force Recommended protections disabled.

原因:版本太高导致
使用命令降低版本即可:
npm install npm@6.14.10 -g

当前版本:

npm@8.1.1 /usr/local/lib/node_modules/npm

当前环境无法运行“Vue3”版本的uni-app应用!

uniapp录音

uniapp播放音视频

unipush和个推

uniapp配置VideoPlayer无反应

15 问题处理

xcode编译报错:

error: write /Users/hh/Library/Developer/Xcode/DerivedData/app-demo-ios-dcdjysptjjflydaxwrnaypfthnac/Build/Intermediates.noindex/ArchiveIntermediates/app-demo-ios/InstallationBuildProductsLocation/Applications/app-demo-ios.app/Pandora/apps/__UNI__XXXXX/www/__uniappchooselocation.html: Bad address (in target 'app-demo-ios' from project 'app-demo-ios')

  • 原因:Pandora/apps/__UNI__XXXXX/下除了www文件夹外,还放了一个zip包,之前没有遇到这个问题,刚删掉就正常了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容