
iOS离线打包
最新iOS平台App本地离线打包,请前往https://nativesupport.dcloud.net.cn/AppDocs/usesdk/ios
预备环境
- iOS开发环境,Mac OS、XCode 7.2以上版本;
- 下载HBuilderX离线打包iOS版SDK(5+ SDK下载)。
注意:本文档基于XCode10 其他版本如有问题请留言
注意:如果离线打包的是uni-app项目 请点击进入查看如何配置
SDK目录说明
- HBuilder-Hello:离线打包演示应用;
- Feature-iOS.xls:iOS平台各扩展Feature API对应的库文件列表;
- Readme.txt:说明文件。
注意:HBuilder运行环境相关库文件已全部包含在HBuilder-Hello演示应用中
配置编译工程
- 从演示应用HBuilder-Hello创建工程
解压SDK包,进入目录HBuilder-Hello, 双击“HBuilder-Hello.xcodeproj”文件打开工程:
(建议不要将工程移出SDK目录,如需移动工程则要重新引入头文件和静态库文件到工程里)

- 配置应用标识(Bundle Identifier)
选择左侧“Project Navigator”中应用工程根目录,选中TARGETS下的HBuilder打开工程属性界面,在General下修改Identity的值:
其中Bundle Identifier为苹果的AppID,必须与应用发布是配置的Profile关联的AppID一致;Version为应用版本号,在App Store中显示的版本号,推荐与manifest.json中version下的name值一致;Build为编译版本号,App Store判断升级使用,推荐与manifest.json中version下的code值一致。
<a id="name">- 配置应用名称 </a>
1、在打开的原生工程中,点击工程的targets和点开manifest文件,然后将manifest文件里的“name”字段的内容 和原生工程里的Display Name 的写成一样。注意,manifest文件里的”name“ 对应的是HBuilderX打开的工程里的“基础配置”里的应用名称。如下图红色框所示:
2、如果需要配置国际化,在工程导航界面,选择InfoPlist.strings文件,修改CFBundleDisplayName值为应用名字:
InfoPlist.strings(English)为英文系统应用名,Simplified为中文简体系统应用名
<a id="versionname">- 配置应用版本名称 </a>
在打开的原生工程中,点击工程的targets和点开manifest文件,然后将manifest文件里的“version”字段里的“name”的内容 和原生工程里的Version 的写成一样。注意,manifest文件里的“version”字段里的“name” 对应的是HBuilderX打开的工程里的“基础配置”里的应用版本名称。如下图红色框所示:
<a id="versioncode">- 配置应用版本号 </a>
在打开的原生工程中,点击工程的targets和点开工程里的manifest文件,然后将manifest文件里的“version”字段里的“code”的内容 和原生工程里的Build 的写成一样。注意,manifest文件里的“version”字段里的“code” 对应的是HBuilderX打开的工程里的“基础配置”里的应用版本号。如下图红色框所示:
- 配置应用图标和启动界面
第一种Launch Images Source方式
1、按下图所示,在配置的地方设置为空,这样配置之后启动界面就会是splash目录里配置的图了,就不会是LaunchScreen.storyboard 作为启动界面了。
2、演示工程中已经配置好了应用的图标和启动界面,只需要将对应的,符合要求的图片拷贝到对应工程里的icon和splash目录即可:
第二种Launch Screen File方式
1、按下图方法配置Launch Screen File,这样配置之后启动界面就会是设置的LaunchScreen.storyboard。
2、制作LaunchScreen.storyboard(这个storyboard的名称是可以自定义的),如果想自定义LaunchScreen.storyboard,这需要你会原生知识,知道怎样创建Launch Screen File,知道怎样在storyboard中布局视图,设置约束等。如果不想自定义,可以使用官方已经制作好的storyboard,官方提供了2个storyboard,一个是图标、名称在上方的;另外一个是图标、名称在下方的。
注意:在使用Launch Screen File方式作为启动界面时,需要把一张或几张清晰的图标拷贝到app.imageset文件夹下,用来给启动界面加载图标。如果拷贝过去的图标不清晰会导致启动界面上的图标不清晰、模糊的现象出现。
- 更新应用资源
注意:Pandora目录为folder references引入方式,修改后不会自动更新,需要在模拟器或设备删除应用后再重新运行
注意:拷贝到Pandora目录的www目录中manifest.json需要删除注释
如何从HBuilderX中导出应用资源请参考:HBilderX生成本地打包App资源
打开pandora -> apps 目录,将下面“HelloH5”目录名称修改为应用manifest.json中的id字段值,uni-app项目为manifest.json中的appid字段值(这步非常重要,否则会导致应用无法正常启动),并将所有应用资源拷贝到其下的www目录中:
- 配置应用信息
打开工程目录下的control.xml文件,修改appid值:
其中appid值为HBuilder应用的appid,必须与应用manifest.json中的id字段值(uni-app项目为manifest.json中的appid字段值)完全一致;appver为应用的版本号,用于应用资源的升级,必须保持与manifest.json中的version -> name值完全一致;version值为应用基座版本号(plus.runtime.innerVersion返回的值),不要随意修改。
- 配置应用使用的5+功能模块(可选)
演示应用中已经引用HBuilder所有扩展的5+ API功能模块,如果在应用中没有使用到,为了减少发布时安装包的大小可以删除不使用的模块。按下图打开链接库文件配置列表:
在“Feature-iOS.xls”文件中查找不使用模块对应的“LinkerFlags”,从列表中删除。
如不使用“相机模块”,则可选中“liblibCamera.a”、按退格键删除(按option键可以多选):
- 配置第三方库的参数
如果用到使用第三方库的功能模块(如推送、分享、语音识别、统计),则需要通过“Feature-iOS.xls”文件中查找对应模块的“Info”值,并在工程属性界面“Info”下“Custom iOS Target Properties”中找到对应的项配置:
如百度地图,需要配置在百度云平台申请应用的appkey,找到“baidu”项下的“appkey”,双击后输入正确的appkey值:
注意:新浪微博和微信分享还需要配置应用的URL Schemes,在“URL Types”项下分别输入在各开放平台申请的值:
配置完成编译运行
应用配置完毕,在模拟器上编译运行应用:
正确编译后启动模拟器并运行:
<a id="channel">如何配置多渠道和广告 </a>
在需要的打包的原生工程中找到工程的配置文件-Info.plist ,然后添加marketChannel节点,节点内容格式为:包名|应用标识|广告标识|渠道 如io.dcloud.HB|appid|adid|apple
包名:对应xcode里的bundleid,如io.dcloud.HBuilder。
应用标识:对应5+或uni-app项目manifest.json中appid。
广告标识:DCloud的广告标识,开通广告后可在dev.dcloud.net.cn获取,如果没有开通广告,设置值为空即可。
渠道:可以填apple。
注意:如果要配置广告,需要2个步骤:
1.在info.plist文件里加DCLOUD_AD_ID节点,内容 为自己申请的广告adid
2.把marketChannel节点的广告标识换成申请的广告标识。如下图所示:
如何关闭广告
5+SDK里默认打开了开屏广告,用户如果不需要开屏广告可在Appdelegate.m文件中注释如下部分,并删除ad库文件,即可关闭广告
// 示例默认带开屏广告,如果不需要广告,可注释下面一行,
#define ENABLEAD
如果需要关闭其他类型的广告可在应用的manifest.json文件中增加如下配置
"plus": {
"ads": {
"push":"false",
"splash":"false",
"rp":"false",
"spot":"false",
}
}
说明可参考文档 Manifest.json文档说明 manifest配置ads部分
如何配置3D Touch
<a id="advertisingIdentifier">如何配置IDFA </a>
首先要知道:打开IDFA不影响AppStore审核
如何知道项目中是否使用广告标示符,其实就是查看framework中是否有个叫AdSupport.framework的框架,如果检查工程中没有AdSupport.framework,可能是接入的第三方库里面有,用以下方法检查第三方中是否包含有IDFA版本:
(1)打开终端cd到要检查的文件的目录;
(2)执行命令:grep -r advertisingIdentifier . (注意别少了点);
iOS平台配置应用使用广告标识(IDFA)
<a id="pushRegister">如何配置启动时是否注册Push </a>
提交审核时提示有其他支付并隐藏功能被拒的处理办法
Android平台请参考Android离线打包
最新iOS平台App本地离线打包,请前往https://nativesupport.dcloud.net.cn/AppDocs/usesdk/ios
预备环境
- iOS开发环境,Mac OS、XCode 7.2以上版本;
- 下载HBuilderX离线打包iOS版SDK(5+ SDK下载)。
注意:本文档基于XCode10 其他版本如有问题请留言
注意:如果离线打包的是uni-app项目 请点击进入查看如何配置
SDK目录说明
- HBuilder-Hello:离线打包演示应用;
- Feature-iOS.xls:iOS平台各扩展Feature API对应的库文件列表;
- Readme.txt:说明文件。
注意:HBuilder运行环境相关库文件已全部包含在HBuilder-Hello演示应用中
配置编译工程
- 从演示应用HBuilder-Hello创建工程
解压SDK包,进入目录HBuilder-Hello, 双击“HBuilder-Hello.xcodeproj”文件打开工程:
(建议不要将工程移出SDK目录,如需移动工程则要重新引入头文件和静态库文件到工程里)
- 配置应用标识(Bundle Identifier)
选择左侧“Project Navigator”中应用工程根目录,选中TARGETS下的HBuilder打开工程属性界面,在General下修改Identity的值:
其中Bundle Identifier为苹果的AppID,必须与应用发布是配置的Profile关联的AppID一致;Version为应用版本号,在App Store中显示的版本号,推荐与manifest.json中version下的name值一致;Build为编译版本号,App Store判断升级使用,推荐与manifest.json中version下的code值一致。
<a id="name">- 配置应用名称 </a>
1、在打开的原生工程中,点击工程的targets和点开manifest文件,然后将manifest文件里的“name”字段的内容 和原生工程里的Display Name 的写成一样。注意,manifest文件里的”name“ 对应的是HBuilderX打开的工程里的“基础配置”里的应用名称。如下图红色框所示:
2、如果需要配置国际化,在工程导航界面,选择InfoPlist.strings文件,修改CFBundleDisplayName值为应用名字:
InfoPlist.strings(English)为英文系统应用名,Simplified为中文简体系统应用名
<a id="versionname">- 配置应用版本名称 </a>
在打开的原生工程中,点击工程的targets和点开manifest文件,然后将manifest文件里的“version”字段里的“name”的内容 和原生工程里的Version 的写成一样。注意,manifest文件里的“version”字段里的“name” 对应的是HBuilderX打开的工程里的“基础配置”里的应用版本名称。如下图红色框所示:
<a id="versioncode">- 配置应用版本号 </a>
在打开的原生工程中,点击工程的targets和点开工程里的manifest文件,然后将manifest文件里的“version”字段里的“code”的内容 和原生工程里的Build 的写成一样。注意,manifest文件里的“version”字段里的“code” 对应的是HBuilderX打开的工程里的“基础配置”里的应用版本号。如下图红色框所示:
- 配置应用图标和启动界面
第一种Launch Images Source方式
1、按下图所示,在配置的地方设置为空,这样配置之后启动界面就会是splash目录里配置的图了,就不会是LaunchScreen.storyboard 作为启动界面了。
2、演示工程中已经配置好了应用的图标和启动界面,只需要将对应的,符合要求的图片拷贝到对应工程里的icon和splash目录即可:
第二种Launch Screen File方式
1、按下图方法配置Launch Screen File,这样配置之后启动界面就会是设置的LaunchScreen.storyboard。
2、制作LaunchScreen.storyboard(这个storyboard的名称是可以自定义的),如果想自定义LaunchScreen.storyboard,这需要你会原生知识,知道怎样创建Launch Screen File,知道怎样在storyboard中布局视图,设置约束等。如果不想自定义,可以使用官方已经制作好的storyboard,官方提供了2个storyboard,一个是图标、名称在上方的;另外一个是图标、名称在下方的。
注意:在使用Launch Screen File方式作为启动界面时,需要把一张或几张清晰的图标拷贝到app.imageset文件夹下,用来给启动界面加载图标。如果拷贝过去的图标不清晰会导致启动界面上的图标不清晰、模糊的现象出现。
- 更新应用资源
注意:Pandora目录为folder references引入方式,修改后不会自动更新,需要在模拟器或设备删除应用后再重新运行
注意:拷贝到Pandora目录的www目录中manifest.json需要删除注释
如何从HBuilderX中导出应用资源请参考:HBilderX生成本地打包App资源
打开pandora -> apps 目录,将下面“HelloH5”目录名称修改为应用manifest.json中的id字段值,uni-app项目为manifest.json中的appid字段值(这步非常重要,否则会导致应用无法正常启动),并将所有应用资源拷贝到其下的www目录中:
- 配置应用信息
打开工程目录下的control.xml文件,修改appid值:
其中appid值为HBuilder应用的appid,必须与应用manifest.json中的id字段值(uni-app项目为manifest.json中的appid字段值)完全一致;appver为应用的版本号,用于应用资源的升级,必须保持与manifest.json中的version -> name值完全一致;version值为应用基座版本号(plus.runtime.innerVersion返回的值),不要随意修改。
- 配置应用使用的5+功能模块(可选)
演示应用中已经引用HBuilder所有扩展的5+ API功能模块,如果在应用中没有使用到,为了减少发布时安装包的大小可以删除不使用的模块。按下图打开链接库文件配置列表:
在“Feature-iOS.xls”文件中查找不使用模块对应的“LinkerFlags”,从列表中删除。
如不使用“相机模块”,则可选中“liblibCamera.a”、按退格键删除(按option键可以多选):
- 配置第三方库的参数
如果用到使用第三方库的功能模块(如推送、分享、语音识别、统计),则需要通过“Feature-iOS.xls”文件中查找对应模块的“Info”值,并在工程属性界面“Info”下“Custom iOS Target Properties”中找到对应的项配置:
如百度地图,需要配置在百度云平台申请应用的appkey,找到“baidu”项下的“appkey”,双击后输入正确的appkey值:
注意:新浪微博和微信分享还需要配置应用的URL Schemes,在“URL Types”项下分别输入在各开放平台申请的值:
配置完成编译运行
应用配置完毕,在模拟器上编译运行应用:
正确编译后启动模拟器并运行:
<a id="channel">如何配置多渠道和广告 </a>
在需要的打包的原生工程中找到工程的配置文件-Info.plist ,然后添加marketChannel节点,节点内容格式为:包名|应用标识|广告标识|渠道 如io.dcloud.HB|appid|adid|apple
包名:对应xcode里的bundleid,如io.dcloud.HBuilder。
应用标识:对应5+或uni-app项目manifest.json中appid。
广告标识:DCloud的广告标识,开通广告后可在dev.dcloud.net.cn获取,如果没有开通广告,设置值为空即可。
渠道:可以填apple。
注意:如果要配置广告,需要2个步骤:
1.在info.plist文件里加DCLOUD_AD_ID节点,内容 为自己申请的广告adid
2.把marketChannel节点的广告标识换成申请的广告标识。如下图所示:
如何关闭广告
5+SDK里默认打开了开屏广告,用户如果不需要开屏广告可在Appdelegate.m文件中注释如下部分,并删除ad库文件,即可关闭广告
// 示例默认带开屏广告,如果不需要广告,可注释下面一行,
#define ENABLEAD
如果需要关闭其他类型的广告可在应用的manifest.json文件中增加如下配置
"plus": {
"ads": {
"push":"false",
"splash":"false",
"rp":"false",
"spot":"false",
}
}
说明可参考文档 Manifest.json文档说明 manifest配置ads部分
如何配置3D Touch
<a id="advertisingIdentifier">如何配置IDFA </a>
首先要知道:打开IDFA不影响AppStore审核
如何知道项目中是否使用广告标示符,其实就是查看framework中是否有个叫AdSupport.framework的框架,如果检查工程中没有AdSupport.framework,可能是接入的第三方库里面有,用以下方法检查第三方中是否包含有IDFA版本:
(1)打开终端cd到要检查的文件的目录;
(2)执行命令:grep -r advertisingIdentifier . (注意别少了点);
iOS平台配置应用使用广告标识(IDFA)
<a id="pushRegister">如何配置启动时是否注册Push </a>
提交审核时提示有其他支付并隐藏功能被拒的处理办法
Android平台请参考Android离线打包
收起阅读 »
复制行以及重复插入行或选区
ctrl+c或x:
如果选中了文字,则复制剪切文字;如果没有选中文字,则复制剪切当前行。
重复插入行或选区的快捷键是ctrl+shift+r:
如果选中文字,则重复插入相同选区的文字;如果没有选中文字,则在下一行插入相同内容的一行。
ctrl+alt+上下在win8以后的系统上被os拦截了,在HBuilder里敲此快捷键会激活windows的屏幕旋转。
ctrl+c或x:
如果选中了文字,则复制剪切文字;如果没有选中文字,则复制剪切当前行。
重复插入行或选区的快捷键是ctrl+shift+r:
如果选中文字,则重复插入相同选区的文字;如果没有选中文字,则在下一行插入相同内容的一行。
ctrl+alt+上下在win8以后的系统上被os拦截了,在HBuilder里敲此快捷键会激活windows的屏幕旋转。
收起阅读 »
Android离线打包常见问题
导入工程提示“Unable to resolve target 'android-14'”错误
这是因为Android开发环境中没有安装Android4.0(API 14)SDK,可以右键工程“Properties”,在工程配置页面选择Android栏中选择已安装的SDK进行编译:
右键工程“Android Tools”-> “Fix Project Properties”修复工程中存在的错误配置。
AndroidManifest.xml文件提示错误
模板应用考虑到对低版本的兼容性,目前设置minSdkVersion值为8(即支持Android2.2),而其他库用到的部分特性在此版本不支持,所以提示错误,解决方法:
- 如果应用不考虑支持低版本,将minSdkVersion的值改成14(Android4.0),或者其它版本;
- 忽略操作,在工程上右键 -> “Android Tools” -> “Clear Lint Markers”。
应用启动后一直停留在启动界面
-
确认assets -> apps目录下应用目录名称是否与manifest.json中的id是否一致:
-
确认assets -> apps 目录下应用目录名称是否与asset -> data下control.xml文件中的appid是否一致:
编译是提示Multiple dex files define错误
在编译的过程中提示以下错误:
Unable to execute dex: Multiple dex files define Lio/dcloud/feature/aps/APSBootImpl; [2014-11-22 02:53:30 - HBuilder-Hello] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lio/dcloud/feature/aps/APSBootImpl;
这是因为同时引用个推和MKey推送平台,这两个推送平台只能选择一个。
使用个推推送平台,请在工程的libs目录下删除以下jar包:
aps-dhPush.jar、MKeyPush.jar
使用MKey推送平台,请在工程的libs目录下删除以下jar包:
aps-igexin.jar、GetuiExt-.jar、GetuiSdk.jar
MKey推送平台是数字天堂面向企业用户的私有推送平台
应用启动时白屏
必须保持Androidmanifest.xml下的manifest节点中的package属性与build.gradle中的applicationId一致!
导入工程提示“Unable to resolve target 'android-14'”错误
这是因为Android开发环境中没有安装Android4.0(API 14)SDK,可以右键工程“Properties”,在工程配置页面选择Android栏中选择已安装的SDK进行编译:
右键工程“Android Tools”-> “Fix Project Properties”修复工程中存在的错误配置。
AndroidManifest.xml文件提示错误
模板应用考虑到对低版本的兼容性,目前设置minSdkVersion值为8(即支持Android2.2),而其他库用到的部分特性在此版本不支持,所以提示错误,解决方法:
- 如果应用不考虑支持低版本,将minSdkVersion的值改成14(Android4.0),或者其它版本;
- 忽略操作,在工程上右键 -> “Android Tools” -> “Clear Lint Markers”。
应用启动后一直停留在启动界面
-
确认assets -> apps目录下应用目录名称是否与manifest.json中的id是否一致:
-
确认assets -> apps 目录下应用目录名称是否与asset -> data下control.xml文件中的appid是否一致:
编译是提示Multiple dex files define错误
在编译的过程中提示以下错误:
Unable to execute dex: Multiple dex files define Lio/dcloud/feature/aps/APSBootImpl; [2014-11-22 02:53:30 - HBuilder-Hello] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lio/dcloud/feature/aps/APSBootImpl;
这是因为同时引用个推和MKey推送平台,这两个推送平台只能选择一个。
使用个推推送平台,请在工程的libs目录下删除以下jar包:
aps-dhPush.jar、MKeyPush.jar
使用MKey推送平台,请在工程的libs目录下删除以下jar包:
aps-igexin.jar、GetuiExt-.jar、GetuiSdk.jar
MKey推送平台是数字天堂面向企业用户的私有推送平台
应用启动时白屏
必须保持Androidmanifest.xml下的manifest节点中的package属性与build.gradle中的applicationId一致!
收起阅读 »
【文档已过期】Android离线打包
新版离线sdk文档已发布,离线打包请参考最新文档
<!--
eclipse集成方式已过期,请改用Android studio方式集成,具体请参考文档:
AndroidStudio打包请参考Android平台使用AndroidStudio离线打包说明
=========================以下为过期的eclipse集成文档=========================
预备环境
-
Android开发环境,推荐使用ADT开发工具;
并要求安装Android4.0(API 14)SDK。 -
下载HBuilder离线打包Android版SDK(5+ SDK下载)。
离线打包SDK目录说明
- HBuilder-Hello:eclipse环境离线打包演示应用;
- HBuilder-Integrate:eclipse环境离线打包带扩展插件演示应用;
- HBuilder-Integrate-AS:Android Studio环境离线打包带扩展插件演示应用;
- libs:SDK库文件目录;
- Feature列表.xls:Android平台各扩展Feature API对应的permission;
- Readme.txt:版本说明文件。
配置编译工程
- 导入演示应用HBuilder-Hello工程
启动带ADT的eclipse程序,菜单中选择“File”-> “Import”,打开Import对话框,选中Android下的“Existing Android Code Inot Workspace”:
点击“Browse...”选择模板应用的目录,并选中“Copy project into workspac”将应用导入到Workspace中:
演示工程中已经配置好HelloH5应用相关资源,完成导入后,可Ctrl+F11直接编译运行:
- 从SDK目录中拷贝要使用的feature库到工程libs目录
参考“Feature列表.xls”文档确定应用中使用到的扩展API,拷贝libs目录中对应的jar/so文件到应用工程的libs目录下。如使用分享功能(新浪微博分享、腾讯微博分享,微信分享),则需要拷贝以下文件:
拷贝完成后在工程中F5刷新可在工程的libs目录下显示:
注意:如果不需要使用到HTML5Plus API,则仅需要pdr.jar包即可。
- 配置应用的权限
参考“Feature列表.xls”文档确定应用中使用到的扩展API,在AndroidManifest.json文件中删除不用到API的权限。如不使用音频(plus.audio.*)相关5+ API,则可删除Audio相关的权限:
- 配置其它第三方库的数据
由于第三方库需要使用一些特定的数据,所以在使用时需要将相关参数配置到AndroidManifest.json文件中。如使用分享功能,则需要配置各分享平台的申请应用的相关参数:
如果不使用此类API,则可将此数据删除。
- 配置应用的包名及版本号
打开AndroidManifest.xml文件,在代码视图中修改根节点的package属性值,如下:
其中package为应用的包名,采用反向域名格式,为应用的标识;versionCode为应用的版本号(整数值),用于各应用市场的升级判断,建议与manifest.json中version -> code值一致;versionName为应用的版本名称(字符串),在系统应用管理程序中显示的版本号,建议与manifest.json中version -> name值一致。
注意:因为其它第三方的SDK也使用到包名相关资源配置,所以需要在AndroidManifest.xml将所有“io.dcloud.HBuilder.Hello”替换成要修改成的包名。
- 配置应用名称
打开res -> values -> strings.xml文件,修改“app_name”字段值,该值为安装到手机上桌面显示的应用名称:
- 配置应用图标和启动界面
将应用的图标(文件名为icon.png)和启动图片按照对应的尺寸拷贝到工程的res -> drawable-XXX目录下:
- 更新应用资源
打开assets -> apps 目录,将下面“HelloH5”目录名称修改为应用manifest.json中的id字段值,uni-app项目为manifest.json中的appid字段值(这步非常重要,否则会导致应用无法正常启动),并将所有应用资源拷贝到其下的www目录中:
- 配置应用信息
打开assets -> data下的dcloud_control.xml文件,修改appid值:
其中appid值为HBuilder应用的appid,必须与应用manifest.json中的id值完全一致;appver为应用的版本号,用于应用资源的升级,必须保持与manifest.json中的version -> name值完全一致;version值为应用基座版本号(plus.runtime.innerVersion返回的值),不要随意修改。
配置完成编译运行
应用配置完毕,按Ctrl+F11编译运行应用:
选择“Android Application”启动应用,在弹出的设备列表对话框中选择要运行的设备:
点击OK后启动应用:
编译运行后在bin目录下会生成apk,此apk不能提交到应用市场
如果要生成提交到应用市场的正式apk请搜索“android导出apk”
5+SDK广告配置
如果需要关闭广告可在应用的manifest.json文件中增加如下配置
"plus": {
"ads": {
"push":"false",
"splash":"false",
"rp":"false",
"spot":"false",
}
}
说明可参考文档 Manifest.json文档说明 manifest配置ads部分
编译过程中碰到问题可参考Android离线打包常见问题
iOS平台请参考iOS离线打包
AndroidStudio打包请参考Android平台使用AndroidStudio离线打包说明
-->
新版离线sdk文档已发布,离线打包请参考最新文档
<!--
eclipse集成方式已过期,请改用Android studio方式集成,具体请参考文档:
AndroidStudio打包请参考Android平台使用AndroidStudio离线打包说明
=========================以下为过期的eclipse集成文档=========================
预备环境
-
Android开发环境,推荐使用ADT开发工具;
并要求安装Android4.0(API 14)SDK。 -
下载HBuilder离线打包Android版SDK(5+ SDK下载)。
离线打包SDK目录说明
- HBuilder-Hello:eclipse环境离线打包演示应用;
- HBuilder-Integrate:eclipse环境离线打包带扩展插件演示应用;
- HBuilder-Integrate-AS:Android Studio环境离线打包带扩展插件演示应用;
- libs:SDK库文件目录;
- Feature列表.xls:Android平台各扩展Feature API对应的permission;
- Readme.txt:版本说明文件。
配置编译工程
- 导入演示应用HBuilder-Hello工程
启动带ADT的eclipse程序,菜单中选择“File”-> “Import”,打开Import对话框,选中Android下的“Existing Android Code Inot Workspace”:
点击“Browse...”选择模板应用的目录,并选中“Copy project into workspac”将应用导入到Workspace中:
演示工程中已经配置好HelloH5应用相关资源,完成导入后,可Ctrl+F11直接编译运行:
- 从SDK目录中拷贝要使用的feature库到工程libs目录
参考“Feature列表.xls”文档确定应用中使用到的扩展API,拷贝libs目录中对应的jar/so文件到应用工程的libs目录下。如使用分享功能(新浪微博分享、腾讯微博分享,微信分享),则需要拷贝以下文件:
拷贝完成后在工程中F5刷新可在工程的libs目录下显示:
注意:如果不需要使用到HTML5Plus API,则仅需要pdr.jar包即可。
- 配置应用的权限
参考“Feature列表.xls”文档确定应用中使用到的扩展API,在AndroidManifest.json文件中删除不用到API的权限。如不使用音频(plus.audio.*)相关5+ API,则可删除Audio相关的权限:
- 配置其它第三方库的数据
由于第三方库需要使用一些特定的数据,所以在使用时需要将相关参数配置到AndroidManifest.json文件中。如使用分享功能,则需要配置各分享平台的申请应用的相关参数:
如果不使用此类API,则可将此数据删除。
- 配置应用的包名及版本号
打开AndroidManifest.xml文件,在代码视图中修改根节点的package属性值,如下:
其中package为应用的包名,采用反向域名格式,为应用的标识;versionCode为应用的版本号(整数值),用于各应用市场的升级判断,建议与manifest.json中version -> code值一致;versionName为应用的版本名称(字符串),在系统应用管理程序中显示的版本号,建议与manifest.json中version -> name值一致。
注意:因为其它第三方的SDK也使用到包名相关资源配置,所以需要在AndroidManifest.xml将所有“io.dcloud.HBuilder.Hello”替换成要修改成的包名。
- 配置应用名称
打开res -> values -> strings.xml文件,修改“app_name”字段值,该值为安装到手机上桌面显示的应用名称:
- 配置应用图标和启动界面
将应用的图标(文件名为icon.png)和启动图片按照对应的尺寸拷贝到工程的res -> drawable-XXX目录下:
- 更新应用资源
打开assets -> apps 目录,将下面“HelloH5”目录名称修改为应用manifest.json中的id字段值,uni-app项目为manifest.json中的appid字段值(这步非常重要,否则会导致应用无法正常启动),并将所有应用资源拷贝到其下的www目录中:
- 配置应用信息
打开assets -> data下的dcloud_control.xml文件,修改appid值:
其中appid值为HBuilder应用的appid,必须与应用manifest.json中的id值完全一致;appver为应用的版本号,用于应用资源的升级,必须保持与manifest.json中的version -> name值完全一致;version值为应用基座版本号(plus.runtime.innerVersion返回的值),不要随意修改。
配置完成编译运行
应用配置完毕,按Ctrl+F11编译运行应用:
选择“Android Application”启动应用,在弹出的设备列表对话框中选择要运行的设备:
点击OK后启动应用:
编译运行后在bin目录下会生成apk,此apk不能提交到应用市场
如果要生成提交到应用市场的正式apk请搜索“android导出apk”
5+SDK广告配置
如果需要关闭广告可在应用的manifest.json文件中增加如下配置
"plus": {
"ads": {
"push":"false",
"splash":"false",
"rp":"false",
"spot":"false",
}
}
说明可参考文档 Manifest.json文档说明 manifest配置ads部分
编译过程中碰到问题可参考Android离线打包常见问题
iOS平台请参考iOS离线打包
AndroidStudio打包请参考Android平台使用AndroidStudio离线打包说明
-->

分享插件开发指南
此文档将不再维护,请参考新文档:https://uniapp.dcloud.io/tutorial/app-share
概述
5+引擎集成了分享功能,现在已经集成了“微信”、“QQ”、“新浪微博”分享SDK及OS自带的系统分享功能,用户可通过API调用接口分享消息到指定的分享平台。
用户在使用分享API时需要对应用进行配置,具体配置方法请参考“应用使用分享插件方法”。
注:调用系统分享无需向分享平台厂商申请appkey和配置SDK。
相关代码示例均在Hello H5+示例里的share.html里或hello uni-app的接口-分享里。
配置参数需要提交云端打包后才能生效,如果需要真机运行生效请使用自定义基座
申请开通支付
使用分享功能前,首先需要向各分享平台申请开通分享能力。
在申请分享平台的appid/appkey等配置参数时应当注意,在填写iOS和Android包名时,一定要和App云端打包使用的包名一致,否则会导致分享失败。
新浪微博appkey申请步骤
微信appkey申请方法
HBuilderX中配置使用分享功能
从微信/QQ/微博开放平台申请获取配置参数后,需在HBuilderX中配置并提交云端打包才能生效。
老版本HBuilder配置界面有差异,逻辑是一样的,建议更新使用HBuilderX
配置使用分享模块
打开项目的manifest.json文件,在“App模块配置”项中勾选“Share(分享)”:
勾选后会显示支持的分享模块,可根据应用需要进行选择配置
微信分享
在manifest.json文件“App模块配置”项的“Share(分享)”下,勾选“微信分享”项,并输入从微信开放平台申请的参数:
- appid:
微信开放平台申请应用的AppID值 - UniversalLinks:
iOS平台通用链接,必须与微信开放平台配置的一致,参考iOS平台微信SDK配置通用链接(Universal Links)
新浪微博分享
在manifest.json文件“App模块配置”项的“Share(分享)”下,勾选“新浪微博分享”项,并输入从微博开放平台申请的参数:
- appkey:
填写新浪微博开发网站申请的appkey - appsecret:
填写新浪微博开发网站申请的appscret - redirect_url:
填写申请新浪微博应用时填写的RUL
QQ分享
在manifest.json文件“App模块配置”项的“Share(分享)”下,勾选“QQ分享”项,并输入从QQ开放平台申请的参数:
- appid:
填写QQ开放平台申请的appid
应用中调用分享功能
用户可以调用API分享信息。用户调用分享API分享消息时,设备是否存在相应的应用,调用的效果不同。如用户没有安装“新浪微博”等应用,HBuilder应用则会在应用内调用SDK的分享页面。如安装了“新浪微博”等应用,则调用API会调用该应用进行分享。
5+App使用分享API的一般步骤如下,uni-app另见专属开发文档:
- 获取分享服务对象列表
首先要在plusready事件之后获取分享列表,获取分享服务列表可以调用
plus.share.getServices()接口。用户可以在回调中获取到分享服务对象的列表。用户需要保存返回的分享对象。在调用分享和授权接口时需要使用到该对象。plus.share.getServices(function(s) { shares = ss; for (var i in ss ) { var s = ss[i]; var item = document.createElement("li"); item.setAttribute("class", "ditem"); item.setAttribute("onclick", (s.id == "weixin") ? "shareWeiXin(this.plusShare)" : "shareAction(this.plusShare)"); item.innerText = s.description; item.plusShare = s; list.appendChild(item); } }, function(e) { alert("获取分享服务列表失败:" + e.message); });
- 用户分享信息前需要对分享平台是否授权过进行判断,如果已经授权则可直接分享消息,如没有授权则需要调用已保存的分享对象的“authorize”接口对客户端进行授权。授权成功后再调用分享接口分享消息。
function shareAction(s, ex) { outSet("分享操作:"); if (!s) { outLine("无效的分享服务!"); return; } if (s.authenticated) { outLine("---已授权---"); shareMessage(s, ex); } else { outLine("---未授权---"); s.authorize(function() { shareMessage(s, ex); }, function(e) { outLine("认证授权失败:" + e.code + " - " + e.message); }); } }
-
对客户端授权成功之后用户可以调用分享对象的“send”方法发送要分享的消息,用户创建JSON对象设置要分享的数据。
用户如需要在分享信息中插入图片,可以在消息中添加pictures节点,属性值为图片地址,图片地址可以为网络地址或者本地图片地址。function shareMessage(s,ex){ var msg={content:sharecontent.value,extra:{scene:ex}}; if(pic&&pic.realUrl){ msg.pictures=[pic.realUrl]; } s.send( msg, function(){ alert( "分享到\""+s.description+"\"成功! " ); }, function(e){ alert( "分享到\""+s.description+"\"失败: "+e.code+" - "+e.message ); } ); }
-
如用户需要取消授权可以调用分享对象方法“forbid”,取消分享服务。
function cancelAuth(){try{ for ( var i in shares ) { var s = shares[i]; if ( s.authenticated ) { outLine( "取消\""+s.description+"\""); } s.forbid(); } // 取消授权后需要更新服务列表 updateServices(); outLine( "操作成功!" );}catch(e){alert(e);} }
常见问题
1.真机运行时新浪微博为什么分享失败
答:因为HBuilder应用在新浪开发平台还在审核中,目前仅有部分测试账号可成功 分享消息。如用户需要测试新浪微博的分享功能需要使用App云端打包生成安装 包测试。
2.“新浪微博”应用审核未通过时分享消息会失败,如何测试分享?
答: 用户需要在开发者账号下添加测试要使用的账号,具体使用步骤如下:
- 登陆“新浪微博”开放平台
- 找到要测试的应用,点击“应用信息”下的“测试信息”
- 点击“编辑”添加测试用户的昵称。
- 保存。
3.真机运行时分享的消息应用名为“HBuilder”如何修改?
答: 真机调试时应用内置的分享平台配置使用的应用名为“HBuilder”,真机联调时不能修改。用户需要使用App云端打包修改应用名称。
- android平台打包后为什么微信分享失败?
答: 微信分享申请appkey时需要同时填写打包使用证书的MD5值,如果Android打包使用的证书和申请微信appkey时使用的证书不一致会导致微信分享失败,表现是微信登陆后点击“分享到朋友圈”,微信页面一闪就关闭
此文档将不再维护,请参考新文档:https://uniapp.dcloud.io/tutorial/app-share
概述
5+引擎集成了分享功能,现在已经集成了“微信”、“QQ”、“新浪微博”分享SDK及OS自带的系统分享功能,用户可通过API调用接口分享消息到指定的分享平台。
用户在使用分享API时需要对应用进行配置,具体配置方法请参考“应用使用分享插件方法”。
注:调用系统分享无需向分享平台厂商申请appkey和配置SDK。
相关代码示例均在Hello H5+示例里的share.html里或hello uni-app的接口-分享里。
配置参数需要提交云端打包后才能生效,如果需要真机运行生效请使用自定义基座
申请开通支付
使用分享功能前,首先需要向各分享平台申请开通分享能力。
在申请分享平台的appid/appkey等配置参数时应当注意,在填写iOS和Android包名时,一定要和App云端打包使用的包名一致,否则会导致分享失败。
新浪微博appkey申请步骤
微信appkey申请方法
HBuilderX中配置使用分享功能
从微信/QQ/微博开放平台申请获取配置参数后,需在HBuilderX中配置并提交云端打包才能生效。
老版本HBuilder配置界面有差异,逻辑是一样的,建议更新使用HBuilderX
配置使用分享模块
打开项目的manifest.json文件,在“App模块配置”项中勾选“Share(分享)”:
勾选后会显示支持的分享模块,可根据应用需要进行选择配置
微信分享
在manifest.json文件“App模块配置”项的“Share(分享)”下,勾选“微信分享”项,并输入从微信开放平台申请的参数:
- appid:
微信开放平台申请应用的AppID值 - UniversalLinks:
iOS平台通用链接,必须与微信开放平台配置的一致,参考iOS平台微信SDK配置通用链接(Universal Links)
新浪微博分享
在manifest.json文件“App模块配置”项的“Share(分享)”下,勾选“新浪微博分享”项,并输入从微博开放平台申请的参数:
- appkey:
填写新浪微博开发网站申请的appkey - appsecret:
填写新浪微博开发网站申请的appscret - redirect_url:
填写申请新浪微博应用时填写的RUL
QQ分享
在manifest.json文件“App模块配置”项的“Share(分享)”下,勾选“QQ分享”项,并输入从QQ开放平台申请的参数:
- appid:
填写QQ开放平台申请的appid
应用中调用分享功能
用户可以调用API分享信息。用户调用分享API分享消息时,设备是否存在相应的应用,调用的效果不同。如用户没有安装“新浪微博”等应用,HBuilder应用则会在应用内调用SDK的分享页面。如安装了“新浪微博”等应用,则调用API会调用该应用进行分享。
5+App使用分享API的一般步骤如下,uni-app另见专属开发文档:
- 获取分享服务对象列表
首先要在plusready事件之后获取分享列表,获取分享服务列表可以调用
plus.share.getServices()接口。用户可以在回调中获取到分享服务对象的列表。用户需要保存返回的分享对象。在调用分享和授权接口时需要使用到该对象。plus.share.getServices(function(s) { shares = ss; for (var i in ss ) { var s = ss[i]; var item = document.createElement("li"); item.setAttribute("class", "ditem"); item.setAttribute("onclick", (s.id == "weixin") ? "shareWeiXin(this.plusShare)" : "shareAction(this.plusShare)"); item.innerText = s.description; item.plusShare = s; list.appendChild(item); } }, function(e) { alert("获取分享服务列表失败:" + e.message); });
- 用户分享信息前需要对分享平台是否授权过进行判断,如果已经授权则可直接分享消息,如没有授权则需要调用已保存的分享对象的“authorize”接口对客户端进行授权。授权成功后再调用分享接口分享消息。
function shareAction(s, ex) { outSet("分享操作:"); if (!s) { outLine("无效的分享服务!"); return; } if (s.authenticated) { outLine("---已授权---"); shareMessage(s, ex); } else { outLine("---未授权---"); s.authorize(function() { shareMessage(s, ex); }, function(e) { outLine("认证授权失败:" + e.code + " - " + e.message); }); } }
-
对客户端授权成功之后用户可以调用分享对象的“send”方法发送要分享的消息,用户创建JSON对象设置要分享的数据。
用户如需要在分享信息中插入图片,可以在消息中添加pictures节点,属性值为图片地址,图片地址可以为网络地址或者本地图片地址。function shareMessage(s,ex){ var msg={content:sharecontent.value,extra:{scene:ex}}; if(pic&&pic.realUrl){ msg.pictures=[pic.realUrl]; } s.send( msg, function(){ alert( "分享到\""+s.description+"\"成功! " ); }, function(e){ alert( "分享到\""+s.description+"\"失败: "+e.code+" - "+e.message ); } ); }
-
如用户需要取消授权可以调用分享对象方法“forbid”,取消分享服务。
function cancelAuth(){try{ for ( var i in shares ) { var s = shares[i]; if ( s.authenticated ) { outLine( "取消\""+s.description+"\""); } s.forbid(); } // 取消授权后需要更新服务列表 updateServices(); outLine( "操作成功!" );}catch(e){alert(e);} }
常见问题
1.真机运行时新浪微博为什么分享失败
答:因为HBuilder应用在新浪开发平台还在审核中,目前仅有部分测试账号可成功 分享消息。如用户需要测试新浪微博的分享功能需要使用App云端打包生成安装 包测试。
2.“新浪微博”应用审核未通过时分享消息会失败,如何测试分享?
答: 用户需要在开发者账号下添加测试要使用的账号,具体使用步骤如下:
- 登陆“新浪微博”开放平台
- 找到要测试的应用,点击“应用信息”下的“测试信息”
- 点击“编辑”添加测试用户的昵称。
- 保存。
3.真机运行时分享的消息应用名为“HBuilder”如何修改?
答: 真机调试时应用内置的分享平台配置使用的应用名为“HBuilder”,真机联调时不能修改。用户需要使用App云端打包修改应用名称。
- android平台打包后为什么微信分享失败?
答: 微信分享申请appkey时需要同时填写打包使用证书的MD5值,如果Android打包使用的证书和申请微信appkey时使用的证书不一致会导致微信分享失败,表现是微信登陆后点击“分享到朋友圈”,微信页面一闪就关闭

Push推送开发指南
概述
HBuilder|HBuilderX集成了常用的推送平台,包括个推推送和小米推送。
从HBuilderX1.7.2版本开始支持UniPush推送服务(支持华为、小米、OPPO、魅族厂商推送通道),解决APP离线时因为三方推送进程被杀而导致无法推送的问题,参考UniPush使用指南。
Push推送功能需配置SDK参数后提交云端打包后才能生效,如需真机运行生效请使用自定义基座
使用须知
push是一个可用但不可依赖的功能。
- Android平台
Push推送通道不可依赖,Android rom厂商为了省电会禁止push进程开机自启、三方清理软件会杀掉push进程。不止是个推,所有非大厂的app,没有进入rom厂商和三方清理软件白名单的app,不管用哪个推送方案都可能会被杀。当然集成了小米推送后在小米手机上肯定不会被杀,但在其他平台被杀的概率可能更高。
本质上推送是一个有利于开发商但却很容易造成用户骚扰和费电的功能,所以大多数主流app里的push的实际用处都是拉激活的非实时活动推送。必要时要补充发短信通知的方式。
关于三方推送服务商,其实发展多年内后,技术、服务差距都不大,核心还在于用户量,因为集成的sdk越多,保活和看护机制越有效果。从个推、极光等公司在ipo时披露的数据来看,还是个推占据优势。 - iOS平台
手机用户有自主关闭APP推送的权利,如果被关闭自然无法收到push。
可以参考iOS平台检查是否关闭通知消息,并提醒用户开启通知消息
整体架构
推送消息类型
通常推送消息分以下两种类型:
-
通知栏消息(推送通知)
UniPush推送服务定义好的推送样式、后续动作的推送方式,客户端接收到后显示在系统通知栏,用户点击通知栏消息启动APP(激活到前台)。 -
透传消息
即自定义消息,UniPush推送服务只负责消息传递,不做任何处理,客户端在接收到透传消息后需要自己去处理消息的展示方式或后续动作。
使用5+ API处理推送消息
uni-app应用中使用推送服务参考:http://ask.dcloud.net.cn/article/35726。
获取APP终端标识
在应用安装后第一次运行时应该调用5+ API的plus.push.getClientInfo方法获取客户端标识,并将此标识提交到开发者的业务服务器进行注册设备,以便在用户登录时可绑定设备,实现向登录用户推送专属消息。
示例代码如下:
document.addEventListener('plusready', function(){
// 页面加载时触发
var pinf = plus.push.getClientInfo();
var cid = pinf.clientid;//客户端标识
}, false );
如果获取的cid为空,说明客户端向推送服务器注册还未完成,可以使用setTimeout延时重试。
监听推送消息事件
通常在应用入口页面(首页)中调用5+ API的plus.push.addEventListener方法监听消息事件,在回调函数中处理消息的响应业务逻辑,如下示例:
//监听系统通知栏消息点击事件
plus.push.addEventListener('click', function(msg){
//处理点击消息的业务逻辑代码
}, false);
//监听接收透传消息事件
plus.push.addEventListener('receive', function(msg){
//处理透传消息的业务逻辑代码
}, false);
启动回调函数的参数msg为PushMessage对象,保存消息的标题(title)、内容(content)、自定义数据(payload)等。
推送消息包括以下事件类型:
- click
用户点击系统通知栏中的消息,APP启动或者激活到前台运行,触发click事件。 - receive
客户端接收到透传消息时(在系统通知栏中不显示消息),触发receive事件。
注意:特殊情况
- Android平台
推送服务器下发的透传消息符合以下json格式:{title:"标题",content:"内容",payload:"自定义数据"}
时,会作为普通推送通知处理,在系统通知栏创建消息,点击消息激活APP触发"click"事件。
- iOS平台
如果应用在前台运行,并且监听了"receive"事件,此时接收到APNs通道下发的消息时,会触发"receive"事件。此时可在回调的参数PushMessage对象中获取aps属性值来判断是否是APNs下发的消息。// 监听在线消息事件 plus.push.addEventListener( "receive", function( msg ) { if ( msg.aps ) { // Apple APNS message //APNS下发的消息,应用在前台 } else { //其它情况接收消息 } //其它逻辑 }, false );
通知栏消息操作
5+ Push模块还提供一系列API操作系统通知栏,解决比较少见的业务场景需求。
-
清空消息
5+ API提供[plus.push.clear]()方法可用于清空系统通知栏中属于当前应用的所有消息,示例代码如下:plus.push.clear();
-
创建本地消息
开发者在业务逻辑中如需创建本地消息可以调用plus.push.createMessage接口,可以指定消息的标题,显示消息的时间或者使用延迟时间。
示例代码如下:var options = {cover:false}; var str = dateToStr(new Date()); str += ": 欢迎使用Html5 Plus创建本地消息!"; plus.push.createMessage(str, "LocalMSG", options);
<a id="receive" />
iOS平台创建本地消息也会触发监听的"receive"事件,此时需要添加特殊参数来标识本地创建的消息。// 监听在线消息事件 plus.push.addEventListener( "receive", function( msg ) { if ( msg.aps ) { // Apple APNS message //APNS下发的消息,应用在前台 } else if ( 'LocalMSG' == msg.payload ) { // 特殊payload标识本地创建的消息 //本地创建的消息,通常不需要处理 //注意:不要在这种情况下再此调用plus.push.createMessage,从而引起循环创建本地消息 } else { //接收到在线透传消息 } //其它逻辑 }, false );
-
获取所有消息
可以调用plus.push.getAllMessage获取系统通知栏中属于当前应用的所有消息,示例代码如下:var msgs = plus.push.getAllMessage(); for(var i in msgs){ var msg = msgs[i]; console.log( i+": "+msg.title+" - "+msg.content ); }
iOS平台不支持获取系统通知栏消息,返回空数组。
推送平台申请
使用推送前需要向推送平台申请应用,并获取推送参数(提交云端打包时需配置),如appid、appkey等。
个推推送
登录个推消息推送开放平台:
如果已经申请过个推的消息推送应用,打开“个推·消息推送”页面,在应用列表中找到申请的应用,点击“应用配置”打开应用信息页面,可获取个推的AppID、AppKey、AppSecret等信息。
如果没有申请过应用,打开“应用管理”页面选择“创建应用”申请新应用,申请成功后再通过上面的方法获取AppID、AppKey、AppSecret等参数。
个推推送平台相关问题可直接咨询个推客服,企业QQ:2880983159。也可以在ask中@getui_johny
小米推送
登录小米开放平台,进入“管理控制台”页面,在“应用服务”栏选择“消息推送”,打开推送运营平台:
如果已经在小米开放平台申请应用,则在应用列表中点击相应应用的“应用信息”按钮,打开应用信息页面可查看小米推送的AppID、AppKey、AppSecret等信息;若应用没有启用推送服务,则点击“启用推送”按钮申请开通。
如果没有申请过应用,则点击页面左上角的“创建应用”按钮创建新应用,创建成功后再他通过上面的方法“启用推送”功能并获取小米推送的AppID、AppKey、AppSecret等参数。
小米推送需要为Android和iOS平台分别创建两个应用
云端打包配置
HBuilder|HBuilderX中提交云端打包前,需在manifest.json文件中配置Push推送模块的参数。
1. 模块配置、
打开应用的manifest.json文件,选择“模块权限配置”项,勾选“Push(消息推送)”,如下图所示:
2. SDK参数配置
打开应用的manifest.json文件,选择“SDK配置”项,选择应用使用的推送平台,并输入从此推送平台申请获取的配置参数,如下图所示:
Android平台云端打包时需要确认填写的app包名和在推送平台创建应用时填写的包名一致
iOS平台云端打包时需要确人打包填写的Bundle ID(Apple AppID)和提交给推送平台的APS证书内包含的AppID一致
常见问题
1.为什么真机运行时不能收到推送的消息
答: 如果需要测试推送功能,需要使用HBuilder云打包生成安装包进行测试。
2.推送消息到安卓平台为什么没有在消息中心中显示
答: 如果推送到安卓平台的消息是透传消息,并且格式不符合规范则会触发监听页面的receive事件,消息不会进入消息中心。
3. IOS平台本地创建本地消息会触发“receive”事件,如何和服务器发送的消息进行区分。
答: 用户在创建IOS本地消息是可以在“payload”节点添加特殊标记对消息进行区分
4. Android平台如何配置推送消息图标
答:参考https://ask.dcloud.net.cn/article/35537
概述
HBuilder|HBuilderX集成了常用的推送平台,包括个推推送和小米推送。
从HBuilderX1.7.2版本开始支持UniPush推送服务(支持华为、小米、OPPO、魅族厂商推送通道),解决APP离线时因为三方推送进程被杀而导致无法推送的问题,参考UniPush使用指南。
Push推送功能需配置SDK参数后提交云端打包后才能生效,如需真机运行生效请使用自定义基座
使用须知
push是一个可用但不可依赖的功能。
- Android平台
Push推送通道不可依赖,Android rom厂商为了省电会禁止push进程开机自启、三方清理软件会杀掉push进程。不止是个推,所有非大厂的app,没有进入rom厂商和三方清理软件白名单的app,不管用哪个推送方案都可能会被杀。当然集成了小米推送后在小米手机上肯定不会被杀,但在其他平台被杀的概率可能更高。
本质上推送是一个有利于开发商但却很容易造成用户骚扰和费电的功能,所以大多数主流app里的push的实际用处都是拉激活的非实时活动推送。必要时要补充发短信通知的方式。
关于三方推送服务商,其实发展多年内后,技术、服务差距都不大,核心还在于用户量,因为集成的sdk越多,保活和看护机制越有效果。从个推、极光等公司在ipo时披露的数据来看,还是个推占据优势。 - iOS平台
手机用户有自主关闭APP推送的权利,如果被关闭自然无法收到push。
可以参考iOS平台检查是否关闭通知消息,并提醒用户开启通知消息
整体架构
推送消息类型
通常推送消息分以下两种类型:
-
通知栏消息(推送通知)
UniPush推送服务定义好的推送样式、后续动作的推送方式,客户端接收到后显示在系统通知栏,用户点击通知栏消息启动APP(激活到前台)。 -
透传消息
即自定义消息,UniPush推送服务只负责消息传递,不做任何处理,客户端在接收到透传消息后需要自己去处理消息的展示方式或后续动作。
使用5+ API处理推送消息
uni-app应用中使用推送服务参考:http://ask.dcloud.net.cn/article/35726。
获取APP终端标识
在应用安装后第一次运行时应该调用5+ API的plus.push.getClientInfo方法获取客户端标识,并将此标识提交到开发者的业务服务器进行注册设备,以便在用户登录时可绑定设备,实现向登录用户推送专属消息。
示例代码如下:
document.addEventListener('plusready', function(){
// 页面加载时触发
var pinf = plus.push.getClientInfo();
var cid = pinf.clientid;//客户端标识
}, false );
如果获取的cid为空,说明客户端向推送服务器注册还未完成,可以使用setTimeout延时重试。
监听推送消息事件
通常在应用入口页面(首页)中调用5+ API的plus.push.addEventListener方法监听消息事件,在回调函数中处理消息的响应业务逻辑,如下示例:
//监听系统通知栏消息点击事件
plus.push.addEventListener('click', function(msg){
//处理点击消息的业务逻辑代码
}, false);
//监听接收透传消息事件
plus.push.addEventListener('receive', function(msg){
//处理透传消息的业务逻辑代码
}, false);
启动回调函数的参数msg为PushMessage对象,保存消息的标题(title)、内容(content)、自定义数据(payload)等。
推送消息包括以下事件类型:
- click
用户点击系统通知栏中的消息,APP启动或者激活到前台运行,触发click事件。 - receive
客户端接收到透传消息时(在系统通知栏中不显示消息),触发receive事件。
注意:特殊情况
- Android平台
推送服务器下发的透传消息符合以下json格式:{title:"标题",content:"内容",payload:"自定义数据"}
时,会作为普通推送通知处理,在系统通知栏创建消息,点击消息激活APP触发"click"事件。
- iOS平台
如果应用在前台运行,并且监听了"receive"事件,此时接收到APNs通道下发的消息时,会触发"receive"事件。此时可在回调的参数PushMessage对象中获取aps属性值来判断是否是APNs下发的消息。// 监听在线消息事件 plus.push.addEventListener( "receive", function( msg ) { if ( msg.aps ) { // Apple APNS message //APNS下发的消息,应用在前台 } else { //其它情况接收消息 } //其它逻辑 }, false );
通知栏消息操作
5+ Push模块还提供一系列API操作系统通知栏,解决比较少见的业务场景需求。
-
清空消息
5+ API提供[plus.push.clear]()方法可用于清空系统通知栏中属于当前应用的所有消息,示例代码如下:plus.push.clear();
-
创建本地消息
开发者在业务逻辑中如需创建本地消息可以调用plus.push.createMessage接口,可以指定消息的标题,显示消息的时间或者使用延迟时间。
示例代码如下:var options = {cover:false}; var str = dateToStr(new Date()); str += ": 欢迎使用Html5 Plus创建本地消息!"; plus.push.createMessage(str, "LocalMSG", options);
<a id="receive" />
iOS平台创建本地消息也会触发监听的"receive"事件,此时需要添加特殊参数来标识本地创建的消息。// 监听在线消息事件 plus.push.addEventListener( "receive", function( msg ) { if ( msg.aps ) { // Apple APNS message //APNS下发的消息,应用在前台 } else if ( 'LocalMSG' == msg.payload ) { // 特殊payload标识本地创建的消息 //本地创建的消息,通常不需要处理 //注意:不要在这种情况下再此调用plus.push.createMessage,从而引起循环创建本地消息 } else { //接收到在线透传消息 } //其它逻辑 }, false );
-
获取所有消息
可以调用plus.push.getAllMessage获取系统通知栏中属于当前应用的所有消息,示例代码如下:var msgs = plus.push.getAllMessage(); for(var i in msgs){ var msg = msgs[i]; console.log( i+": "+msg.title+" - "+msg.content ); }
iOS平台不支持获取系统通知栏消息,返回空数组。
推送平台申请
使用推送前需要向推送平台申请应用,并获取推送参数(提交云端打包时需配置),如appid、appkey等。
个推推送
登录个推消息推送开放平台:
如果已经申请过个推的消息推送应用,打开“个推·消息推送”页面,在应用列表中找到申请的应用,点击“应用配置”打开应用信息页面,可获取个推的AppID、AppKey、AppSecret等信息。
如果没有申请过应用,打开“应用管理”页面选择“创建应用”申请新应用,申请成功后再通过上面的方法获取AppID、AppKey、AppSecret等参数。
个推推送平台相关问题可直接咨询个推客服,企业QQ:2880983159。也可以在ask中@getui_johny
小米推送
登录小米开放平台,进入“管理控制台”页面,在“应用服务”栏选择“消息推送”,打开推送运营平台:
如果已经在小米开放平台申请应用,则在应用列表中点击相应应用的“应用信息”按钮,打开应用信息页面可查看小米推送的AppID、AppKey、AppSecret等信息;若应用没有启用推送服务,则点击“启用推送”按钮申请开通。
如果没有申请过应用,则点击页面左上角的“创建应用”按钮创建新应用,创建成功后再他通过上面的方法“启用推送”功能并获取小米推送的AppID、AppKey、AppSecret等参数。
小米推送需要为Android和iOS平台分别创建两个应用
云端打包配置
HBuilder|HBuilderX中提交云端打包前,需在manifest.json文件中配置Push推送模块的参数。
1. 模块配置、
打开应用的manifest.json文件,选择“模块权限配置”项,勾选“Push(消息推送)”,如下图所示:
2. SDK参数配置
打开应用的manifest.json文件,选择“SDK配置”项,选择应用使用的推送平台,并输入从此推送平台申请获取的配置参数,如下图所示:
Android平台云端打包时需要确认填写的app包名和在推送平台创建应用时填写的包名一致
iOS平台云端打包时需要确人打包填写的Bundle ID(Apple AppID)和提交给推送平台的APS证书内包含的AppID一致
常见问题
1.为什么真机运行时不能收到推送的消息
答: 如果需要测试推送功能,需要使用HBuilder云打包生成安装包进行测试。
2.推送消息到安卓平台为什么没有在消息中心中显示
答: 如果推送到安卓平台的消息是透传消息,并且格式不符合规范则会触发监听页面的receive事件,消息不会进入消息中心。
3. IOS平台本地创建本地消息会触发“receive”事件,如何和服务器发送的消息进行区分。
答: 用户在创建IOS本地消息是可以在“payload”节点添加特殊标记对消息进行区分
4. Android平台如何配置推送消息图标
答:参考https://ask.dcloud.net.cn/article/35537

iOS平台设置系统状态栏(通知栏、顶部状态栏)样式背景颜色或透明
配置系统状态栏样式
iOS平台可支持对系统状态栏样式的配置,在应用manifest.json文件的plus->distribute->apple下添加UIStatusBarStyle进行控制,默认值为"UIStatusBarStyleDefault"。
值 | 样式 |
---|---|
UIStatusBarStyleDefault | 默认样式,iOS6及以下系统状态栏为黑底白字,iOS7及以上系统用于定义系统状态栏上文字颜色为黑字(适用于浅色背景) |
UIStatusBarStyleBlackOpaque | 深色背景色样式,iOS6及以下系统状态栏为黑底白字,iOS7及以上系统用于定义系统状态栏上文字颜色为白色(适用于深色背景) |
UIStatusBarStyleBlackTranslucent | iOS6及以下系统在启动界面为灰底白字,iOS7及以上系统与UIStatusBarStyleBlackOpaque效果一样 |
App云端打包设置系统状态栏样式操作方式:
双击应用的manifest.json文件,切换到“代码视图”,在plus->statusbar下添加style节点:
Ctrl+S保存,并提交App云端打包
设置系统状态栏背景颜色(iOS7及以上生效)
iOS平台可支持对系统状态栏背景颜色的配置,在应用manifest.json文件的plus->statusbar下添加background进行控制:
值为字符串类型,格式为"#RRGGBB"格式,如红色为"#FF0000";默认值为白色。
App云端打包设置系统状态栏背景颜色操作方式
双击应用的manifest.json文件,切换到“代码视图”,在statusbar节点下添加background节点:
Ctrl+S保存,并提交App云端打包
运行期动态设置系统状态栏背景颜色
调用plus.navigator.setStatusBarBackground(rgb)动态修改系统状态栏背景颜色:
rgb为颜色字符串值,格式为#RRGGBB。
function setStatusbarRed(){
// 设置系统状态栏背景色为红色
plus.navigator.setStatusBarBackground("#FF0000");
}
注:仅在iOS7.0及以上版本才支持设置系统状态栏背景色
设置状态栏透明并且页面内容通顶,参考http://ask.dcloud.net.cn/article/118
Android平台
Android平台自定义系统状态栏样式,参考状态栏大全-状态栏透明(沉浸式)、变色及全屏的区别。
Android离线打包在AndroidManifest.xml中配置主Activity的皮肤(android:theme)来设置:
<activity
android:name="io.dcloud.PandoraEntry"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name"
android:launchMode="singleTask"
android:screenOrientation="sensor"
android:windowSoftInputMode="adjustResize"
android:theme="主Activity的皮肤"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
后续云端打包会封装常用的皮肤样式。参考:http://ask.dcloud.net.cn/docs/#http://ask.dcloud.net.cn/article/238
配置系统状态栏样式
iOS平台可支持对系统状态栏样式的配置,在应用manifest.json文件的plus->distribute->apple下添加UIStatusBarStyle进行控制,默认值为"UIStatusBarStyleDefault"。
值 | 样式 |
---|---|
UIStatusBarStyleDefault | 默认样式,iOS6及以下系统状态栏为黑底白字,iOS7及以上系统用于定义系统状态栏上文字颜色为黑字(适用于浅色背景) |
UIStatusBarStyleBlackOpaque | 深色背景色样式,iOS6及以下系统状态栏为黑底白字,iOS7及以上系统用于定义系统状态栏上文字颜色为白色(适用于深色背景) |
UIStatusBarStyleBlackTranslucent | iOS6及以下系统在启动界面为灰底白字,iOS7及以上系统与UIStatusBarStyleBlackOpaque效果一样 |
App云端打包设置系统状态栏样式操作方式:
双击应用的manifest.json文件,切换到“代码视图”,在plus->statusbar下添加style节点:
Ctrl+S保存,并提交App云端打包
设置系统状态栏背景颜色(iOS7及以上生效)
iOS平台可支持对系统状态栏背景颜色的配置,在应用manifest.json文件的plus->statusbar下添加background进行控制:
值为字符串类型,格式为"#RRGGBB"格式,如红色为"#FF0000";默认值为白色。
App云端打包设置系统状态栏背景颜色操作方式
双击应用的manifest.json文件,切换到“代码视图”,在statusbar节点下添加background节点:
Ctrl+S保存,并提交App云端打包
运行期动态设置系统状态栏背景颜色
调用plus.navigator.setStatusBarBackground(rgb)动态修改系统状态栏背景颜色:
rgb为颜色字符串值,格式为#RRGGBB。
function setStatusbarRed(){
// 设置系统状态栏背景色为红色
plus.navigator.setStatusBarBackground("#FF0000");
}
注:仅在iOS7.0及以上版本才支持设置系统状态栏背景色
设置状态栏透明并且页面内容通顶,参考http://ask.dcloud.net.cn/article/118
Android平台
Android平台自定义系统状态栏样式,参考状态栏大全-状态栏透明(沉浸式)、变色及全屏的区别。
Android离线打包在AndroidManifest.xml中配置主Activity的皮肤(android:theme)来设置:
<activity
android:name="io.dcloud.PandoraEntry"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name"
android:launchMode="singleTask"
android:screenOrientation="sensor"
android:windowSoftInputMode="adjustResize"
android:theme="主Activity的皮肤"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
后续云端打包会封装常用的皮肤样式。参考:http://ask.dcloud.net.cn/docs/#http://ask.dcloud.net.cn/article/238
收起阅读 »
设置应用全屏显示
首先全屏并非状态栏透明或变色,而是没有状态栏,也就是看不见电量、信号那条了。
全屏常见于横屏游戏,一般场景应该使用状态栏变色或状态栏透明。
状态栏透明、变色及消失的区别,参考文章http://ask.dcloud.net.cn/article/1150
如果想要全屏模式,在应用的manifest.json文件中添加“fullscreen”节点:
Boolea值类型,true表示全屏,false表示非全屏,默认值为false。
App云端打包支持全屏操作方式:
双击应用的manifest.json文件,切换到“代码视图”,在根节点下添加fullscreen节点:**
Ctrl+S保存,并提交App云端打包
在应用中可调用5+ API动态改变应用是否全屏显示的状态
function fullscreen(){
// 设置应用全屏显示!
plus.navigator.setFullscreen(true);
}
function unfullscreen(){
// 设置应用非全屏显示!
plus.navigator.setFullscreen(false);
}
function isfullscreen(){
// 查询应用当前是否全屏显示!
console.log( "是否全屏:"+(plus.navigator.isFullscreen()?"是":"否") );
}
首先全屏并非状态栏透明或变色,而是没有状态栏,也就是看不见电量、信号那条了。
全屏常见于横屏游戏,一般场景应该使用状态栏变色或状态栏透明。
状态栏透明、变色及消失的区别,参考文章http://ask.dcloud.net.cn/article/1150
如果想要全屏模式,在应用的manifest.json文件中添加“fullscreen”节点:
Boolea值类型,true表示全屏,false表示非全屏,默认值为false。
App云端打包支持全屏操作方式:
双击应用的manifest.json文件,切换到“代码视图”,在根节点下添加fullscreen节点:**
Ctrl+S保存,并提交App云端打包
在应用中可调用5+ API动态改变应用是否全屏显示的状态
function fullscreen(){
// 设置应用全屏显示!
plus.navigator.setFullscreen(true);
}
function unfullscreen(){
// 设置应用非全屏显示!
plus.navigator.setFullscreen(false);
}
function isfullscreen(){
// 查询应用当前是否全屏显示!
console.log( "是否全屏:"+(plus.navigator.isFullscreen()?"是":"否") );
}
收起阅读 »

如何判断Runtime是否支持5+ API
在Web开发过程中,我们经常需要兼容各种平台,实现同一HTML页面能在各种Web运行环境中正常运行。
根据5+ API规范定义,要求在UserAgent中必须添加支持5+ API描述信息,其格式如下:
Html5Plus/1.0
斜线前部分为固定字符“Html5Plus”,斜线后面为5+ API的版本号,目前版本为“1.0”。
为了与其它UserAgent信息进行区分,其前面添加空格进行分隔。
因此,我们可以通过以下方法判断当前运行环境是否支持5+ API:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Hello World</title>
<script type="text/javascript" charset="utf-8">
// 判断runtime是否支持5+ API
if(navigator.userAgent.indexOf("Html5Plus")<0){//不支持5+ API
checked("不支持5+ API");
}else{//支持5+ API
checked("支持5+ API");
}
// 输出检测结果
function checked(ret){
if(document.body){
document.getElementById("checked").innerText=ret;
}else{
document.addEventListener("DOMContentLoaded",function(){
document.getElementById("checked").innerText=ret;
},false);
}
}
</script>
</head>
<body>
<h1>Runtime supports 5+ Plus?</h1>
<p id="checked">checking...</p>
</body>
</html>
在Web开发过程中,我们经常需要兼容各种平台,实现同一HTML页面能在各种Web运行环境中正常运行。
根据5+ API规范定义,要求在UserAgent中必须添加支持5+ API描述信息,其格式如下:
Html5Plus/1.0
斜线前部分为固定字符“Html5Plus”,斜线后面为5+ API的版本号,目前版本为“1.0”。
为了与其它UserAgent信息进行区分,其前面添加空格进行分隔。
因此,我们可以通过以下方法判断当前运行环境是否支持5+ API:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Hello World</title>
<script type="text/javascript" charset="utf-8">
// 判断runtime是否支持5+ API
if(navigator.userAgent.indexOf("Html5Plus")<0){//不支持5+ API
checked("不支持5+ API");
}else{//支持5+ API
checked("支持5+ API");
}
// 输出检测结果
function checked(ret){
if(document.body){
document.getElementById("checked").innerText=ret;
}else{
document.addEventListener("DOMContentLoaded",function(){
document.getElementById("checked").innerText=ret;
},false);
}
}
</script>
</head>
<body>
<h1>Runtime supports 5+ Plus?</h1>
<p id="checked">checking...</p>
</body>
</html>
收起阅读 »

HTML中如何安全调用5+ API (plus is not defined)
HBuilder App Runtime是基于Webview进行扩展,在HTML页面加载时需要需自动引用5+ API扩展代码库进行一些必要的初始化操作,当5+ API扩展代码库加载完成时会触发“pluseready”事件通知5+ API可以安全调用。
因此,为了保证扩展5+ API的有效调用,所有HTML页面都需要正确处理“plusready”事件,可以通过document.addEventListener来监听事件:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Hello World</title>
<script type="text/javascript" charset="utf-8">
// H5 plus事件处理
function plusReady(){
// 5+ API code
var ws = plus.webview.currentWebview();
// ......
}
//监听“plusready”事件
document.addEventListener("plusready",plusReady,false);
</script>
</head>
<body>
<h1>Example</h1>
<p>Hello World</p>
</body>
</html>
HBuilder App Runtime是基于Webview进行扩展,在HTML页面加载时需要需自动引用5+ API扩展代码库进行一些必要的初始化操作,当5+ API扩展代码库加载完成时会触发“pluseready”事件通知5+ API可以安全调用。
因此,为了保证扩展5+ API的有效调用,所有HTML页面都需要正确处理“plusready”事件,可以通过document.addEventListener来监听事件:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Hello World</title>
<script type="text/javascript" charset="utf-8">
// H5 plus事件处理
function plusReady(){
// 5+ API code
var ws = plus.webview.currentWebview();
// ......
}
//监听“plusready”事件
document.addEventListener("plusready",plusReady,false);
</script>
</head>
<body>
<h1>Example</h1>
<p>Hello World</p>
</body>
</html>
收起阅读 »

地图插件配置
此文档将不再维护,请参考新文档:https://uniapp.dcloud.io/tutorial/app-maps
概述
HBuilderX集成了常用的原生地图控件,相对于Web地图(H5地图),使用原生地图控件有更流畅的操作速度,可以提升APP的用户体验。
目前支持百度地图、高德地图和谷歌地图,
如需使用其它地图控件可参考Uni原生插件开发扩展支持。
使用须知
最新版本HBuilderX中自带的真机运行基座默认内置高德地图,使用的是DCloud向高德LBS开放平台申请的配置参数。
如果使用开发者自己申请的配置参数生成请使用自定义基座真机运行。
注意:根据高德、百度最新的服务协议,需要获取高德商用授权
从年初开始,高德、百度、腾讯等地图服务商更新了服务协议、开始实施商业授权机制,要求除公益App外所有使用地图功能(包括原生地图SDK、定位SDK、H5地图等)都需要获取地图服务商的商用授权。重点强调一下,免费应用同样需要商用授权,除非你的应用是公益类App,其它类型App都需要商用授权。
高德地图参考:https://lbs.amap.com/upgrade
百度地图参考:https://lbsyun.baidu.com/cashier/auth
没有获取地图服务商的App可以会碰到地图或定位功能被停用或上架应用市场提示可能存在侵权的问题,因此建议向高德、百度等地图开放平台申请商用授权。
云端打包地图功能需要到第三方地图平台申请应用后获取相关配置参数:
高德LBS开放平台申请应用
登录 高德LBS开放平台,点击有上角的“控制台”按钮,在控制台界面左侧导航列表选择“应用管理”下的“我的应用”。
创建应用
如果已经创建应用可忽略此步骤
在“我的应用”页面,点击右侧“创建新应用”按钮,输入应用名称、选择应用类型,点击“创建”按钮创建应用。
添加Android平台应用的KEY
需要打包为Android平台原生应用时操作,否则跳过此步骤
在创建应用项的右侧点击“+”按钮,添加Key:
- Key名称
根据规则而填入Key名称,如“uniapp-android” - 服务平台
选择“Android平台” - 发布版安全码SHA1
应用打包时使用证书的指纹字符串(SHA1)
HBuilderX云端打包选择“使用自有证书”或本地离线打包时,填写应用使用证书的SHA1,查看证书的信息获取指纹中SHA1值,参考:https://ask.dcloud.net.cn/article/35777#keyinfo
HBuilderX云端打包选择“公共测试证书”时,SHA1值为:BB:AC:E2:2F:97:3B:18:02:E7:D6:69:A3:7A:28:EF:D2:3F:A3:68:E7,详情参考:https://ask.dcloud.net.cn/article/36522
HBuilderX云端打包选择“老版本DCloud公用证书”时,SHA1值为:BA:AD:09:3A:82:82:9F:B4:32:A7:B2:8C:B4:CC:F0:E9:F3:7D:AE:58,详情参考:https://ask.dcloud.net.cn/article/68
注意:必须添写实际打包使用证书的SHA1值,否则可能无法显示地图或无法定位 - PackageName
应用包名,在提交App云端打包时设置的Android包名,如“uni.UNI4D6B11E”
注意:必须填写实际打包使用的包名,否则可能无法显示地图或无法定位
点击“提交”后生产新Key,在应用下可获取:
在HBuilderX中将此Key填入到manifest.json文件“(App)SDK配置”页面的“高德定位或地图”项下的“appkey_android”编辑框中
添加iOS平台应用的KEY
需要打包为iOS平台原生应用时操作,否则跳过此步骤
在创建应用项的右侧点击“+”按钮,添加Key:
- Key名称
根据规则而填入Key名称,如“uniapp-ios”; - 服务平台
选择“iOS平台” - 安全码Bundle ID
iOS平台应用包名Bundle ID(AppID),在提交App云端打包时设置的Bundle ID,如“uni.UNI4D6B11E”
注意:必须填写实际打包使用的Bundle ID,否则可能无法显示图片或无法定位
点击“提交”后生成新Key,在应用下可获取:
在HBuilderX中将此Key填入到manifest.json文件“(App)SDK配置”页面的“高德定位或地图”项下的“appkey_ios”编辑框中
百度LBS开放平台申请应用
登录 百度LBS开放平台,点击有上角的“控制台”按钮,在控制台看板界面左侧导航列表选择“我的应用”下的“创建应用”。
创建Android平台应用
需要打包为Android平台原生应用时操作,否则跳过此步骤
在创建应用界面选择“Android SDK”:
- 应用名称
根据规则而填入应用名称,如“uniapp-android” - 应用类型
选择“Android SDK” - 启用服务
至少勾选“Android地图SDK(含境内外底图)”、“Android定位SDK”,建议全部勾选 - 发布版SHA1
应用打包时使用证书的指纹字符串(SHA1)
HBuilderX云端打包选择“使用自有证书”或本地离线打包时,填写应用使用证书的SHA1,查看证书的信息获取指纹中SHA1值,参考:https://ask.dcloud.net.cn/article/35777#keyinfo
HBuilderX云端打包选择“公共测试证书”时,SHA1值为:97:C8:41:01:B9:14:1C:13:0D:D7:5D:74:28:A2:92:25:18:C3:6D:CD,详情参考:https://ask.dcloud.net.cn/article/36522
HBuilderX云端打包选择“老版本DCloud公用证书”时(HBuilderX 2.3.8之前的版本叫DCloud公共证书),SHA1值为:BA:AD:09:3A:82:82:9F:B4:32:A7:B2:8C:B4:CC:F0:E9:F3:7D:AE:58,详情参考:https://ask.dcloud.net.cn/article/68
注意:必须添写实际打包使用证书的SHA1值,否则可能无法显示地图或无法定位 - PackageName
应用包名,在提交App云端打包时设置的Android包名,如“uni.UNI4D6B11E”
注意:必须填写实际打包使用的包名,否则可能无法显示地图或无法定位
点击“提交”后生成新应用,在应用列表界面会添加新创建的应用项,在“访问应用(AK)”列中点击复制按钮获取AppKey:
在HBuilderX中将此Key填入到manifest.json文件“(App)SDK配置”页面的“百度定位或地图”项下的“appkey_android”编辑框中
创建iOS平台应用
需要打包为iOS平台原生应用时操作,否则跳过此步骤
在创建应用界面选择“iOS SDK”:
- 应用名称
根据规则而填入应用名称,如“uniapp-ios” - 应用类型
选择“iOS SDK” - 启用服务
至少勾选“IOS地图SDK(含境内外底图)”,建议全部勾选 - 安全码
iOS平台应用包名Bundle ID(AppID),在提交App云端打包时设置的Bundle ID,如“uni.UNI4D6B11E”
注意:必须填写实际打包使用的Bundle ID,否则可能无法显示图片或无法定位
点击“提交”后生成新应用,在应用列表界面会添加新创建的应用项,在“访问应用(AK)”列中点击复制按钮获取AppKey:
在HBuilderX中将此Key填入到manifest.json文件“(App)SDK配置”页面的“百度定位或地图”项下的“appkey_ios”编辑框中
谷歌开发者平台申请
登录Google Maps Platform | Google Developers , 点击 开始使用
。
此时如果没有结算账号,会提示创建GoogleCloud结算账号,后续的账单由此账号进行结算,填写对应的信息。
创建自己的项目。
创建完成后选择使用的选择项目使用的api并启用。
在侧边栏找到 凭据
,填写应用信息,创建凭据。
复制api key 保存起来,留以后用。
打开HBuilderX,在模块配置中,勾选地图模块,填入api key。
HBuilderX中配置使用地图
从百度/高德/谷歌平台申请获取配置参数后,需在HBuilderX中配置并提交云端打包才能生效。
老版本HBuilder配置界面有差异,逻辑是一样的,建议更新使用HBuilderX
配置使用地图模块
打开应用的manifest.json文件,在“App模块配置”项中勾选“Maps(地图,只能选一个)”:
配置地图参数AppKey
高德地图
在manifest.json文件“App模块配置”项的“Maps(地图,只能选一个)”下,勾选“高德地图”项,并输入从高德开放平台申请的参数:
配置参数
- appkey_ios: 高德地图iOS平台应用的AppKey';
- appkey_android: 高德地图Android平台应用的AppKey。
百度地图
在manifest.json文件“App模块配置”项的“Maps(地图,只能选一个)”下,勾选“百度地图”项,并输入从百度开放平台申请的参数:
配置参数
- appkey_ios: 百度地图iOS平台应用的AppKey;
- appkey_android: 百度地图Android平台应用的AppKey。
谷歌地图
在manifest.json文件“App模块配置”项的“Maps(地图,只能选一个)”下,勾选“Google地图”项,并输入从谷歌开发者平台申请的参数:
注意
uni-app项目中nvue页面仅支持高德、谷歌地图,暂时还不支持百度地图。
配置完成后Ctrl+S保存提交App云端打包生效。
此文档将不再维护,请参考新文档:https://uniapp.dcloud.io/tutorial/app-maps
概述
HBuilderX集成了常用的原生地图控件,相对于Web地图(H5地图),使用原生地图控件有更流畅的操作速度,可以提升APP的用户体验。
目前支持百度地图、高德地图和谷歌地图,
如需使用其它地图控件可参考Uni原生插件开发扩展支持。
使用须知
最新版本HBuilderX中自带的真机运行基座默认内置高德地图,使用的是DCloud向高德LBS开放平台申请的配置参数。
如果使用开发者自己申请的配置参数生成请使用自定义基座真机运行。
注意:根据高德、百度最新的服务协议,需要获取高德商用授权
从年初开始,高德、百度、腾讯等地图服务商更新了服务协议、开始实施商业授权机制,要求除公益App外所有使用地图功能(包括原生地图SDK、定位SDK、H5地图等)都需要获取地图服务商的商用授权。重点强调一下,免费应用同样需要商用授权,除非你的应用是公益类App,其它类型App都需要商用授权。
高德地图参考:https://lbs.amap.com/upgrade
百度地图参考:https://lbsyun.baidu.com/cashier/auth
没有获取地图服务商的App可以会碰到地图或定位功能被停用或上架应用市场提示可能存在侵权的问题,因此建议向高德、百度等地图开放平台申请商用授权。
云端打包地图功能需要到第三方地图平台申请应用后获取相关配置参数:
高德LBS开放平台申请应用
登录 高德LBS开放平台,点击有上角的“控制台”按钮,在控制台界面左侧导航列表选择“应用管理”下的“我的应用”。
创建应用
如果已经创建应用可忽略此步骤
在“我的应用”页面,点击右侧“创建新应用”按钮,输入应用名称、选择应用类型,点击“创建”按钮创建应用。
添加Android平台应用的KEY
需要打包为Android平台原生应用时操作,否则跳过此步骤
在创建应用项的右侧点击“+”按钮,添加Key:
- Key名称
根据规则而填入Key名称,如“uniapp-android” - 服务平台
选择“Android平台” - 发布版安全码SHA1
应用打包时使用证书的指纹字符串(SHA1)
HBuilderX云端打包选择“使用自有证书”或本地离线打包时,填写应用使用证书的SHA1,查看证书的信息获取指纹中SHA1值,参考:https://ask.dcloud.net.cn/article/35777#keyinfo
HBuilderX云端打包选择“公共测试证书”时,SHA1值为:BB:AC:E2:2F:97:3B:18:02:E7:D6:69:A3:7A:28:EF:D2:3F:A3:68:E7,详情参考:https://ask.dcloud.net.cn/article/36522
HBuilderX云端打包选择“老版本DCloud公用证书”时,SHA1值为:BA:AD:09:3A:82:82:9F:B4:32:A7:B2:8C:B4:CC:F0:E9:F3:7D:AE:58,详情参考:https://ask.dcloud.net.cn/article/68
注意:必须添写实际打包使用证书的SHA1值,否则可能无法显示地图或无法定位 - PackageName
应用包名,在提交App云端打包时设置的Android包名,如“uni.UNI4D6B11E”
注意:必须填写实际打包使用的包名,否则可能无法显示地图或无法定位
点击“提交”后生产新Key,在应用下可获取:
在HBuilderX中将此Key填入到manifest.json文件“(App)SDK配置”页面的“高德定位或地图”项下的“appkey_android”编辑框中
添加iOS平台应用的KEY
需要打包为iOS平台原生应用时操作,否则跳过此步骤
在创建应用项的右侧点击“+”按钮,添加Key:
- Key名称
根据规则而填入Key名称,如“uniapp-ios”; - 服务平台
选择“iOS平台” - 安全码Bundle ID
iOS平台应用包名Bundle ID(AppID),在提交App云端打包时设置的Bundle ID,如“uni.UNI4D6B11E”
注意:必须填写实际打包使用的Bundle ID,否则可能无法显示图片或无法定位
点击“提交”后生成新Key,在应用下可获取:
在HBuilderX中将此Key填入到manifest.json文件“(App)SDK配置”页面的“高德定位或地图”项下的“appkey_ios”编辑框中
百度LBS开放平台申请应用
登录 百度LBS开放平台,点击有上角的“控制台”按钮,在控制台看板界面左侧导航列表选择“我的应用”下的“创建应用”。
创建Android平台应用
需要打包为Android平台原生应用时操作,否则跳过此步骤
在创建应用界面选择“Android SDK”:
- 应用名称
根据规则而填入应用名称,如“uniapp-android” - 应用类型
选择“Android SDK” - 启用服务
至少勾选“Android地图SDK(含境内外底图)”、“Android定位SDK”,建议全部勾选 - 发布版SHA1
应用打包时使用证书的指纹字符串(SHA1)
HBuilderX云端打包选择“使用自有证书”或本地离线打包时,填写应用使用证书的SHA1,查看证书的信息获取指纹中SHA1值,参考:https://ask.dcloud.net.cn/article/35777#keyinfo
HBuilderX云端打包选择“公共测试证书”时,SHA1值为:97:C8:41:01:B9:14:1C:13:0D:D7:5D:74:28:A2:92:25:18:C3:6D:CD,详情参考:https://ask.dcloud.net.cn/article/36522
HBuilderX云端打包选择“老版本DCloud公用证书”时(HBuilderX 2.3.8之前的版本叫DCloud公共证书),SHA1值为:BA:AD:09:3A:82:82:9F:B4:32:A7:B2:8C:B4:CC:F0:E9:F3:7D:AE:58,详情参考:https://ask.dcloud.net.cn/article/68
注意:必须添写实际打包使用证书的SHA1值,否则可能无法显示地图或无法定位 - PackageName
应用包名,在提交App云端打包时设置的Android包名,如“uni.UNI4D6B11E”
注意:必须填写实际打包使用的包名,否则可能无法显示地图或无法定位
点击“提交”后生成新应用,在应用列表界面会添加新创建的应用项,在“访问应用(AK)”列中点击复制按钮获取AppKey:
在HBuilderX中将此Key填入到manifest.json文件“(App)SDK配置”页面的“百度定位或地图”项下的“appkey_android”编辑框中
创建iOS平台应用
需要打包为iOS平台原生应用时操作,否则跳过此步骤
在创建应用界面选择“iOS SDK”:
- 应用名称
根据规则而填入应用名称,如“uniapp-ios” - 应用类型
选择“iOS SDK” - 启用服务
至少勾选“IOS地图SDK(含境内外底图)”,建议全部勾选 - 安全码
iOS平台应用包名Bundle ID(AppID),在提交App云端打包时设置的Bundle ID,如“uni.UNI4D6B11E”
注意:必须填写实际打包使用的Bundle ID,否则可能无法显示图片或无法定位
点击“提交”后生成新应用,在应用列表界面会添加新创建的应用项,在“访问应用(AK)”列中点击复制按钮获取AppKey:
在HBuilderX中将此Key填入到manifest.json文件“(App)SDK配置”页面的“百度定位或地图”项下的“appkey_ios”编辑框中
谷歌开发者平台申请
登录Google Maps Platform | Google Developers , 点击 开始使用
。
此时如果没有结算账号,会提示创建GoogleCloud结算账号,后续的账单由此账号进行结算,填写对应的信息。
创建自己的项目。
创建完成后选择使用的选择项目使用的api并启用。
在侧边栏找到 凭据
,填写应用信息,创建凭据。
复制api key 保存起来,留以后用。
打开HBuilderX,在模块配置中,勾选地图模块,填入api key。
HBuilderX中配置使用地图
从百度/高德/谷歌平台申请获取配置参数后,需在HBuilderX中配置并提交云端打包才能生效。
老版本HBuilder配置界面有差异,逻辑是一样的,建议更新使用HBuilderX
配置使用地图模块
打开应用的manifest.json文件,在“App模块配置”项中勾选“Maps(地图,只能选一个)”:
配置地图参数AppKey
高德地图
在manifest.json文件“App模块配置”项的“Maps(地图,只能选一个)”下,勾选“高德地图”项,并输入从高德开放平台申请的参数:
配置参数
- appkey_ios: 高德地图iOS平台应用的AppKey';
- appkey_android: 高德地图Android平台应用的AppKey。
百度地图
在manifest.json文件“App模块配置”项的“Maps(地图,只能选一个)”下,勾选“百度地图”项,并输入从百度开放平台申请的参数:
配置参数
- appkey_ios: 百度地图iOS平台应用的AppKey;
- appkey_android: 百度地图Android平台应用的AppKey。
谷歌地图
在manifest.json文件“App模块配置”项的“Maps(地图,只能选一个)”下,勾选“Google地图”项,并输入从谷歌开发者平台申请的参数:
注意
uni-app项目中nvue页面仅支持高德、谷歌地图,暂时还不支持百度地图。
配置完成后Ctrl+S保存提交App云端打包生效。
收起阅读 »
分享插件配置
云端打包分享功能需要到第三方开发平台申请应用后获取相关配置参数,目前支持的分享平台包括:
在各分享平台申请应用获取配置参数后,HBuilder进行如下操作进行配置:
添加Permissions的Featrue项
点击manifest.json文件的“代码视图”,在permissions节点下添加Share节点:
Ctrl+S保存。
配置各分享通道的参数
- 手动编辑manifest.json配置参数
点击manifest.json文件的“代码视图”,在plus -> distribute -> plugins 节点下添加share节点,并配置各分享平台申请应用的参数:
- 可视化界面配置参数
点击manifest.json文件的“可视化视图”,在“插件设置”下的“分享插件”栏中选择要使用的分享平台并配置参数:
- 新浪微博分享
appkey:新浪微博平台应用appkey
appsecret:新浪微博平台应用appsecret
redirect_uri:新浪微博平台应用分享回调地址 - 微信消息或朋友圈
appid:微信开放平台申请应用的AppID值
appsecret:微信开放平台申请应用的AppSecret值 - QQ分享
appid:腾讯QQ开放平台申请应用的AppID值
配置完成后Ctrl+S保存,并提交云端打包即可使用分享功能。
详细教程请参考分享插件开发指南
云端打包分享功能需要到第三方开发平台申请应用后获取相关配置参数,目前支持的分享平台包括:
在各分享平台申请应用获取配置参数后,HBuilder进行如下操作进行配置:
添加Permissions的Featrue项
点击manifest.json文件的“代码视图”,在permissions节点下添加Share节点:
Ctrl+S保存。
配置各分享通道的参数
- 手动编辑manifest.json配置参数
点击manifest.json文件的“代码视图”,在plus -> distribute -> plugins 节点下添加share节点,并配置各分享平台申请应用的参数:
- 可视化界面配置参数
点击manifest.json文件的“可视化视图”,在“插件设置”下的“分享插件”栏中选择要使用的分享平台并配置参数:
- 新浪微博分享
appkey:新浪微博平台应用appkey
appsecret:新浪微博平台应用appsecret
redirect_uri:新浪微博平台应用分享回调地址 - 微信消息或朋友圈
appid:微信开放平台申请应用的AppID值
appsecret:微信开放平台申请应用的AppSecret值 - QQ分享
appid:腾讯QQ开放平台申请应用的AppID值
配置完成后Ctrl+S保存,并提交云端打包即可使用分享功能。
详细教程请参考分享插件开发指南
收起阅读 »