HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

Android平台离线打包支付插件配置

离线打包 插件 支付

此文档已不再维护,请参考新文档地址:https://nativesupport.dcloud.net.cn/AppDocs/usemodule/androidModuleConfig/pay

支付宝配置

需要拷贝的文件

需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下

路径 文件
SDK\libs(1.9.9.52372之前) payment.jar, payment-alipay.jar , alipaySingle-20161222.jar, alipayutdid.jar
SDK\libs(1.9.9.52372之后) payment-alipay-release.aar, alipayutdid.jar

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限

<uses-permission android:name="android.permission.INTERNET" />  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
<uses-permission android:name="android.permission.READ_PHONE_STATE" />  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

application节点下配置如下代码

<activity android:name="com.alipay.sdk.app.H5PayActivity"   
    android:configChanges="orientation|keyboardHidden|navigation"   
    android:exported="false"   
    android:screenOrientation="behind"   
    android:windowSoftInputMode="adjustResize|stateHidden" >   
</activity>   
<activity android:name="com.alipay.sdk.auth.AuthActivity"   
    android:configChanges="orientation|keyboardHidden|navigation"   
    android:exported="false"   
    android:screenOrientation="behind" >  
</activity>

properties.xml需要添加如下代码
properties.xml文件在assets/data目录下

<feature name="Payment" value="io.dcloud.feature.payment.PaymentFeatureImpl"><module name="AliPay" value="io.dcloud.feature.payment.alipay.AliPay"/></feature>

微信支付配置

微信appkey申请方法

需要拷贝的文件

需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下

路径 文件
SDK\libs(1.9.9.52372之前) payment.jar, payment-weixin.jar, tx_wx.jar
SDK\libs(1.9.9.52372之后) payment-weixin-release.aar, wechat-sdk-android-with-mta-5.1.4.jar

需要将以下代码文件引入到工程,包名为”$你的包名.wxapi”

路径 文件
$你的包名\wxapi WXPayEntryActivity.java

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

application节点下配置如下代码

<meta-data  android:name="WX_APPID"  android:value="$微信APPID" />  
 <meta-data android:name="WX_SECRET" android:value="$微信SECRET"/>  
  <activity  
            android:name="$你的包名.wxapi.WXPayEntryActivity"  
            android:exported="true"  
            android:theme="@android:style/Theme.Translucent.NoTitleBar"  
            android:launchMode="singleTop" />

properties.xml需要添加如下代码
properties.xml文件在assets/data目录下

<feature name="Payment" value="io.dcloud.feature.payment.PaymentFeatureImpl"><module name="Payment-Weixin" value="io.dcloud.feature.payment.weixin.WeiXinPay"/></feature>
继续阅读 »

此文档已不再维护,请参考新文档地址:https://nativesupport.dcloud.net.cn/AppDocs/usemodule/androidModuleConfig/pay

支付宝配置

需要拷贝的文件

需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下

路径 文件
SDK\libs(1.9.9.52372之前) payment.jar, payment-alipay.jar , alipaySingle-20161222.jar, alipayutdid.jar
SDK\libs(1.9.9.52372之后) payment-alipay-release.aar, alipayutdid.jar

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限

<uses-permission android:name="android.permission.INTERNET" />  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
<uses-permission android:name="android.permission.READ_PHONE_STATE" />  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

application节点下配置如下代码

<activity android:name="com.alipay.sdk.app.H5PayActivity"   
    android:configChanges="orientation|keyboardHidden|navigation"   
    android:exported="false"   
    android:screenOrientation="behind"   
    android:windowSoftInputMode="adjustResize|stateHidden" >   
</activity>   
<activity android:name="com.alipay.sdk.auth.AuthActivity"   
    android:configChanges="orientation|keyboardHidden|navigation"   
    android:exported="false"   
    android:screenOrientation="behind" >  
</activity>

properties.xml需要添加如下代码
properties.xml文件在assets/data目录下

<feature name="Payment" value="io.dcloud.feature.payment.PaymentFeatureImpl"><module name="AliPay" value="io.dcloud.feature.payment.alipay.AliPay"/></feature>

微信支付配置

微信appkey申请方法

需要拷贝的文件

需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下

路径 文件
SDK\libs(1.9.9.52372之前) payment.jar, payment-weixin.jar, tx_wx.jar
SDK\libs(1.9.9.52372之后) payment-weixin-release.aar, wechat-sdk-android-with-mta-5.1.4.jar

需要将以下代码文件引入到工程,包名为”$你的包名.wxapi”

路径 文件
$你的包名\wxapi WXPayEntryActivity.java

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

application节点下配置如下代码

<meta-data  android:name="WX_APPID"  android:value="$微信APPID" />  
 <meta-data android:name="WX_SECRET" android:value="$微信SECRET"/>  
  <activity  
            android:name="$你的包名.wxapi.WXPayEntryActivity"  
            android:exported="true"  
            android:theme="@android:style/Theme.Translucent.NoTitleBar"  
            android:launchMode="singleTop" />

properties.xml需要添加如下代码
properties.xml文件在assets/data目录下

<feature name="Payment" value="io.dcloud.feature.payment.PaymentFeatureImpl"><module name="Payment-Weixin" value="io.dcloud.feature.payment.weixin.WeiXinPay"/></feature>
收起阅读 »

Android平台离线打包定位插件配置

插件 离线打包 定位

百度地图定位

需要拷贝的文件

需要引入工程的jar/aar文件
需要将以下jar/aar文件放到工程的libs目录下

路径 文件
SDK\libs(1.9.9.52372之前) geolocation.jar, geolocation-baidu.jar,BaiduLBS_Android_base.jar, BaiduLBS_Android_geolocation_v7.1.jar
SDK\libs(1.9.9.52372之后) baidu-libs-release.aar, geolocation-baidu-release.aar

需要将以下so文件放到工程的libs\armeabi目录下(1.9.9.52372版本之后不需要设置此项)

路径 文件名
SDK\libs \armeabi liblocSDK7a.so
SDK\libs\armeabi-v7a liblocSDK7a.so
SDK\libs\x86 liblocSDK7a.so

application节点下配置如下代码

<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="%appkey_android%"></meta-data>  
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"></service>

高德定位

需要拷贝的文件

需要引入工程的jar/aar文件
需要将以下jar/aar文件放到工程的libs目录下

路径 文件
SDK\libs(1.9.9.52372之前) geolocation.jar,AMap_Location_V3.3.0_20170118.jar,geolocation-amap.jar
SDK\libs(1.9.9.52372之后) amap-libs-release.aar, geolocation-amap-release.aar

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>  
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>  
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>  
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  
<uses-permission android:name="android.permission.INTERNET"/>  
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  
<uses-permission android:name="android.permission.READ_LOGS"/>  
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>

application节点下配置如下代码

<meta-data android:name="com.amap.api.v2.apikey" android:value=\"%用户申请的APPkey%\"></meta-data>  
<service android:name="com.amap.api.location.APSService"></service>

系统定位

需要拷贝的文件

需要引入工程的jar/aar文件
最新SDK使用系统定位已不需要引入任何文件

需要将以下jar文件放到工程的libs目录下(仅限旧版)

路径 文件
SDK\lisb geolocation.jar, geolocation-system.jar

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>  
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>  
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>  
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  
<uses-permission android:name="android.permission.INTERNET"/>  
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  
<uses-permission android:name="android.permission.READ_LOGS"/>  
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
继续阅读 »

百度地图定位

需要拷贝的文件

需要引入工程的jar/aar文件
需要将以下jar/aar文件放到工程的libs目录下

路径 文件
SDK\libs(1.9.9.52372之前) geolocation.jar, geolocation-baidu.jar,BaiduLBS_Android_base.jar, BaiduLBS_Android_geolocation_v7.1.jar
SDK\libs(1.9.9.52372之后) baidu-libs-release.aar, geolocation-baidu-release.aar

需要将以下so文件放到工程的libs\armeabi目录下(1.9.9.52372版本之后不需要设置此项)

路径 文件名
SDK\libs \armeabi liblocSDK7a.so
SDK\libs\armeabi-v7a liblocSDK7a.so
SDK\libs\x86 liblocSDK7a.so

application节点下配置如下代码

<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="%appkey_android%"></meta-data>  
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"></service>

高德定位

需要拷贝的文件

需要引入工程的jar/aar文件
需要将以下jar/aar文件放到工程的libs目录下

路径 文件
SDK\libs(1.9.9.52372之前) geolocation.jar,AMap_Location_V3.3.0_20170118.jar,geolocation-amap.jar
SDK\libs(1.9.9.52372之后) amap-libs-release.aar, geolocation-amap-release.aar

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>  
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>  
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>  
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  
<uses-permission android:name="android.permission.INTERNET"/>  
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  
<uses-permission android:name="android.permission.READ_LOGS"/>  
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>

application节点下配置如下代码

<meta-data android:name="com.amap.api.v2.apikey" android:value=\"%用户申请的APPkey%\"></meta-data>  
<service android:name="com.amap.api.location.APSService"></service>

系统定位

需要拷贝的文件

需要引入工程的jar/aar文件
最新SDK使用系统定位已不需要引入任何文件

需要将以下jar文件放到工程的libs目录下(仅限旧版)

路径 文件
SDK\lisb geolocation.jar, geolocation-system.jar

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>  
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>  
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>  
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  
<uses-permission android:name="android.permission.INTERNET"/>  
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  
<uses-permission android:name="android.permission.READ_LOGS"/>  
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
收起阅读 »

Android平台离线打包地图插件配置

离线打包 地图插件 地图

此文档已不再维护,请移步:https://nativesupport.dcloud.net.cn

开发者需要修改使用的地图插件时,需要修改properties.xml文件的features节点下Maps节点value属性的配置,高德地图和百度地图的配置只能保留一个

百度地图

需要拷贝的文件

需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下

路径 文件
SDK\libs(1.9.9.52372之前) BaiduLBS_Android_base.jar,BaiduLBS_Android_geolocation_v7.1.jar, BaiduLBS_Android_v4.3.1.jar,map-baidu.jar
SDK\libs(1.9.9.52372之后) baidu-libs-release.aar,map-baidu-release.aar

需要将以下so文件放到工程的libs\armeabi目录下
(1.9.9.52372之后不需要配置此项)

路径 文件名
SDK\libs \armeabi libBaiduMapSDK_base_v4_3_1.so,libBaiduMapSDK_map_v4_3_1.so, liblocSDK7a.so
SDK\libs \armeabi-v7a libBaiduMapSDK_base_v4_3_1.so,libBaiduMapSDK_map_v4_3_1.so, liblocSDK7a.so
SDK\libs \x86 libBaiduMapSDK_base_v4_3_1.so,libBaiduMapSDK_map_v4_3_1.so, liblocSDK7a.so

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限

        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>  
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>  
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>  
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>  
        <uses-permission android:name="android.permission.READ_PHONE_STATE"/>  
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  
        <uses-permission android:name="android.permission.INTERNET"/>  
        <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  
        <uses-permission android:name="android.permission.READ_LOGS"/>  
        <uses-permission android:name="android.permission.WRITE_SETTINGS"/>

application节点下配置如下代码

<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="%appkey_android%"></meta-data>  
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"></service>

properties.xml文件需要修改的项

properties.xml文件在assets/data目录下
features节点下添加:

<feature name="Maps" value="io.dcloud.js.map.JsMapPluginImpl"></feature>

services节点下添加:

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

高德地图

需要拷贝的文件

需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下

路径 文件
SDK\libs(1.9.9.52372之前) map-amap.jar, AMap_3DMap_V2.4.1.jar, AMap_Services_V2.4.0.jar,AMap_Location_V3.3.0_20170118.jar
SDK\libs(1.9.9.52372之后) amap-libs-release.aar,map-amap-release.aar

需要将以下so文件放到工程的libs\armeabi目录下
(1.9.9.52372之后不需要配置此项)

路径 文件名
SDK\libs \armeabi libamapv304.so, libamapv304ex.so

需要将以下so文件放到工程的libs\armeabi-v7a目录下
(1.9.9.52372之后不需要配置此项)

路径 文件名
SDK\libs \armeabi-v7a libamapv304.so, libamapv304ex.so

需要将以下so文件放到工程的libs\x86目录下
(1.9.9.52372之后不需要配置此项)

路径 文件名
SDK\libs \x86 libamapv304.so, libamapv304ex.so

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>  
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>  
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>  
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>  
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>  
<uses-permission android:name="android.permission.INTERNET"/>  
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>  
<uses-permission android:name="android.permission.READ_LOGS"></uses-permission>  
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>

application节点下配置如下代码:

<meta-data android:name="com.amap.api.v2.apikey\" android:value="%appkey_android%\">  
<service android:name="com.amap.api.location.APSService"></service>

注意事项
高德地图使用的appkey和打包使用的包名及签名文件存在对应关系,填写时请注意。填写错误会导致地图无法正常使用。

properties.xml文件需要修改的项

features节点下添加
properties.xml文件在assets/data目录下

<feature name="Maps" value="io.dcloud.js.map.amap.JsMapPluginImpl"></feature>
继续阅读 »

此文档已不再维护,请移步:https://nativesupport.dcloud.net.cn

开发者需要修改使用的地图插件时,需要修改properties.xml文件的features节点下Maps节点value属性的配置,高德地图和百度地图的配置只能保留一个

百度地图

需要拷贝的文件

需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下

路径 文件
SDK\libs(1.9.9.52372之前) BaiduLBS_Android_base.jar,BaiduLBS_Android_geolocation_v7.1.jar, BaiduLBS_Android_v4.3.1.jar,map-baidu.jar
SDK\libs(1.9.9.52372之后) baidu-libs-release.aar,map-baidu-release.aar

需要将以下so文件放到工程的libs\armeabi目录下
(1.9.9.52372之后不需要配置此项)

路径 文件名
SDK\libs \armeabi libBaiduMapSDK_base_v4_3_1.so,libBaiduMapSDK_map_v4_3_1.so, liblocSDK7a.so
SDK\libs \armeabi-v7a libBaiduMapSDK_base_v4_3_1.so,libBaiduMapSDK_map_v4_3_1.so, liblocSDK7a.so
SDK\libs \x86 libBaiduMapSDK_base_v4_3_1.so,libBaiduMapSDK_map_v4_3_1.so, liblocSDK7a.so

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限

        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>  
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>  
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>  
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>  
        <uses-permission android:name="android.permission.READ_PHONE_STATE"/>  
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  
        <uses-permission android:name="android.permission.INTERNET"/>  
        <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  
        <uses-permission android:name="android.permission.READ_LOGS"/>  
        <uses-permission android:name="android.permission.WRITE_SETTINGS"/>

application节点下配置如下代码

<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="%appkey_android%"></meta-data>  
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"></service>

properties.xml文件需要修改的项

properties.xml文件在assets/data目录下
features节点下添加:

<feature name="Maps" value="io.dcloud.js.map.JsMapPluginImpl"></feature>

services节点下添加:

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

高德地图

需要拷贝的文件

需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下

路径 文件
SDK\libs(1.9.9.52372之前) map-amap.jar, AMap_3DMap_V2.4.1.jar, AMap_Services_V2.4.0.jar,AMap_Location_V3.3.0_20170118.jar
SDK\libs(1.9.9.52372之后) amap-libs-release.aar,map-amap-release.aar

需要将以下so文件放到工程的libs\armeabi目录下
(1.9.9.52372之后不需要配置此项)

路径 文件名
SDK\libs \armeabi libamapv304.so, libamapv304ex.so

需要将以下so文件放到工程的libs\armeabi-v7a目录下
(1.9.9.52372之后不需要配置此项)

路径 文件名
SDK\libs \armeabi-v7a libamapv304.so, libamapv304ex.so

需要将以下so文件放到工程的libs\x86目录下
(1.9.9.52372之后不需要配置此项)

路径 文件名
SDK\libs \x86 libamapv304.so, libamapv304ex.so

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>  
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>  
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>  
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>  
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>  
<uses-permission android:name="android.permission.INTERNET"/>  
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>  
<uses-permission android:name="android.permission.READ_LOGS"></uses-permission>  
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>

application节点下配置如下代码:

<meta-data android:name="com.amap.api.v2.apikey\" android:value="%appkey_android%\">  
<service android:name="com.amap.api.location.APSService"></service>

注意事项
高德地图使用的appkey和打包使用的包名及签名文件存在对应关系,填写时请注意。填写错误会导致地图无法正常使用。

properties.xml文件需要修改的项

features节点下添加
properties.xml文件在assets/data目录下

<feature name="Maps" value="io.dcloud.js.map.amap.JsMapPluginImpl"></feature>
收起阅读 »

Android平台离线打包授权登陆插件配置

离线打包 授权登陆

微信登陆

需要拷贝的文件

需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下

路径 文件
SDK\libs(1.9.9.52372之前) oauth.jar, oauth-weixin.jar,tx_wx.jar
SDK\libs(1.9.9.52372之后) oauth-weixin-release.aar,wechat-sdk-android-with-mta-5.1.4.jar

需要将以下代码文件引入到工程,包名为”%用户包名%.wxapi”

路径 文件
%用户包名%\wxapi WXEntryActivity.java

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>  
<application>节点下配置如下代码  
<meta-data android:value="%用户申请的微信Appcert%" android:name="WX_SECRET"/>   
<meta-data android:value="%用户申请的微信Appid%" android:name="WX_APPID"/>    
<activity android:name="%用户包名%.wxapi.WXEntryActivity"   
    android:label="@string/app_name"    
    android:exported="true"   
    android:launchMode="singleTop">   
    <intent-filter><action android:name="android.intent.action.VIEW"/>  
        <category android:name="android.intent.category.DEFAULT"/>   
        <data android:scheme="%用户申请的微信Appid%"/>  
    </intent-filter>  
</activity>

properties.xml需要添加如下代码
properties.xml文件在assets/data目录下

<feature name="OAuth" value="io.dcloud.feature.oauth.OAuthFeatureImpl"><module name="OAuth-Weixin" value="io.dcloud.feature.oauth.weixin.WeiXinOAuthService"/></feature>

QQ登陆

需要拷贝的文件

需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下

路径 文件
SDK\libs(1.9.9.52372之前) oauth.jar, oauth-qq.jar,qq_sdk_v3.1.0.jar,qq_mta-sdk-1.6.2.jar
SDK\libs(1.9.9.52372之后) oauth-qq-release.aar,qq_mta-sdk-1.6.2.jar,qq_sdk_v3.1.0.jar

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<application>节点下配置如下代码

<!-- Oauth QQ start -->  
        <meta-data android:value="%appid%" android:name="QQ_APPID"/>   
        <activity android:name="com.tencent.tauth.AuthActivity" android:launchMode="singleTask" android:noHistory="true">   
        <intent-filter>  
        <action android:name="android.intent.action.VIEW"/>   
        <category android:name="android.intent.category.DEFAULT"/>   
        <category android:name="android.intent.category.BROWSABLE"/>  
        <data android:scheme="%appid%"/>   
        </intent-filter>   
        </activity>   
        <activity android:name="com.tencent.connect.common.AssistActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:screenOrientation="portrait"/>  
        <!-- Oauth QQ end -->

properties.xml需要添加如下代码
properties.xml文件在assets/data目录下

<feature name="OAuth" value="io.dcloud.feature.oauth.OAuthFeatureImpl"><module name="OAuth-QQ" value="io.dcloud.feature.oauth.qq.QQOAuthService"/></feature>

新浪微博登陆

需要拷贝的文件

需要引入工程的jar文件
需要将以下jar文件,so文件和cer文件放到工程的libs目录及assets下
版本号1.9.9.52372之后配置方法

路径 文件
SDK\libs sina-libs-release.aar,oauth-sina-release.aar

版本号1.9.9.52372之前配置方法

路径 文件
SDK\libs oauth.jar, oauth-sina.jar ,sinaweibo4.1.jar
SDK\libs\armeabi libweibosdkcore.so
SDK\libs\armeabi-v7a libweibosdkcore.so
SDK\libs\x86 libweibosdkcore.so
SDK\assets geo_global_ca.cer

Androidmainfest.xml文件需要修改的项

<application>节点下配置如下代码

<!-- Oauth Sina start -->  
        <meta-data android:value="%redirect_uri%" android:name="SINA_REDIRECT_URI"/>   
        <meta-data android:value="_%appkey%" android:name="SINA_APPKEY"/>   
       <activity android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"  
            android:configChanges="keyboardHidden|orientation"  
            android:exported="false"  
            android:windowSoftInputMode="adjustResize">  
        </activity>  
        <!-- Oauth Sina end -->

properties.xml需要添加如下代码
properties.xml文件在assets/data目录下

<feature name="OAuth" value="io.dcloud.feature.oauth.OAuthFeatureImpl"><module name="OAuth-Sina" value="io.dcloud.feature.oauth.sina.SinaOAuthService"/></feature>

小米登陆

需要拷贝的文件

需要将以下jar文件拷贝到工程中

路径 文件
SDK\libs(1.9.9.52372之前) oauth.jar, oauth-miui.jar, oauth.1.5.1.jar
SDK\libs(1.9.9.52372之后) oauth-miui-release.aar

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限

<uses-permission android:name="com.xiaomi.permission.AUTH_SERVICE"/>

application节点下配置如下代码

<meta-data android:value="_%小米登陆的APPID%" android:name="MIUI_APPID"/>  
<meta-data android:value="%小米登陆的APPSecret%" android:name="MIUI_APPSECRET"/>  
<meta-data android:value="%小米登陆的RegURL%" android:name="MIUI_REDIRECT_URI"/>  
<activity android:name="com.xiaomi.account.openauth.AuthorizeActivity"/>

properties.xml需要添加如下代码

properties.xml文件在ADT工程assets/data目录下
Features节点下添加

<feature name="OAuth" value="io.dcloud.feature.oauth.OAuthFeatureImpl">  
<module name="OAuth-MiUi" value="io.dcloud.feature.oauth.miui.MiUiOAuthService"/>  
</feature>
继续阅读 »

微信登陆

需要拷贝的文件

需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下

路径 文件
SDK\libs(1.9.9.52372之前) oauth.jar, oauth-weixin.jar,tx_wx.jar
SDK\libs(1.9.9.52372之后) oauth-weixin-release.aar,wechat-sdk-android-with-mta-5.1.4.jar

需要将以下代码文件引入到工程,包名为”%用户包名%.wxapi”

路径 文件
%用户包名%\wxapi WXEntryActivity.java

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>  
<application>节点下配置如下代码  
<meta-data android:value="%用户申请的微信Appcert%" android:name="WX_SECRET"/>   
<meta-data android:value="%用户申请的微信Appid%" android:name="WX_APPID"/>    
<activity android:name="%用户包名%.wxapi.WXEntryActivity"   
    android:label="@string/app_name"    
    android:exported="true"   
    android:launchMode="singleTop">   
    <intent-filter><action android:name="android.intent.action.VIEW"/>  
        <category android:name="android.intent.category.DEFAULT"/>   
        <data android:scheme="%用户申请的微信Appid%"/>  
    </intent-filter>  
</activity>

properties.xml需要添加如下代码
properties.xml文件在assets/data目录下

<feature name="OAuth" value="io.dcloud.feature.oauth.OAuthFeatureImpl"><module name="OAuth-Weixin" value="io.dcloud.feature.oauth.weixin.WeiXinOAuthService"/></feature>

QQ登陆

需要拷贝的文件

需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下

路径 文件
SDK\libs(1.9.9.52372之前) oauth.jar, oauth-qq.jar,qq_sdk_v3.1.0.jar,qq_mta-sdk-1.6.2.jar
SDK\libs(1.9.9.52372之后) oauth-qq-release.aar,qq_mta-sdk-1.6.2.jar,qq_sdk_v3.1.0.jar

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<application>节点下配置如下代码

<!-- Oauth QQ start -->  
        <meta-data android:value="%appid%" android:name="QQ_APPID"/>   
        <activity android:name="com.tencent.tauth.AuthActivity" android:launchMode="singleTask" android:noHistory="true">   
        <intent-filter>  
        <action android:name="android.intent.action.VIEW"/>   
        <category android:name="android.intent.category.DEFAULT"/>   
        <category android:name="android.intent.category.BROWSABLE"/>  
        <data android:scheme="%appid%"/>   
        </intent-filter>   
        </activity>   
        <activity android:name="com.tencent.connect.common.AssistActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:screenOrientation="portrait"/>  
        <!-- Oauth QQ end -->

properties.xml需要添加如下代码
properties.xml文件在assets/data目录下

<feature name="OAuth" value="io.dcloud.feature.oauth.OAuthFeatureImpl"><module name="OAuth-QQ" value="io.dcloud.feature.oauth.qq.QQOAuthService"/></feature>

新浪微博登陆

需要拷贝的文件

需要引入工程的jar文件
需要将以下jar文件,so文件和cer文件放到工程的libs目录及assets下
版本号1.9.9.52372之后配置方法

路径 文件
SDK\libs sina-libs-release.aar,oauth-sina-release.aar

版本号1.9.9.52372之前配置方法

路径 文件
SDK\libs oauth.jar, oauth-sina.jar ,sinaweibo4.1.jar
SDK\libs\armeabi libweibosdkcore.so
SDK\libs\armeabi-v7a libweibosdkcore.so
SDK\libs\x86 libweibosdkcore.so
SDK\assets geo_global_ca.cer

Androidmainfest.xml文件需要修改的项

<application>节点下配置如下代码

<!-- Oauth Sina start -->  
        <meta-data android:value="%redirect_uri%" android:name="SINA_REDIRECT_URI"/>   
        <meta-data android:value="_%appkey%" android:name="SINA_APPKEY"/>   
       <activity android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"  
            android:configChanges="keyboardHidden|orientation"  
            android:exported="false"  
            android:windowSoftInputMode="adjustResize">  
        </activity>  
        <!-- Oauth Sina end -->

properties.xml需要添加如下代码
properties.xml文件在assets/data目录下

<feature name="OAuth" value="io.dcloud.feature.oauth.OAuthFeatureImpl"><module name="OAuth-Sina" value="io.dcloud.feature.oauth.sina.SinaOAuthService"/></feature>

小米登陆

需要拷贝的文件

需要将以下jar文件拷贝到工程中

路径 文件
SDK\libs(1.9.9.52372之前) oauth.jar, oauth-miui.jar, oauth.1.5.1.jar
SDK\libs(1.9.9.52372之后) oauth-miui-release.aar

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限

<uses-permission android:name="com.xiaomi.permission.AUTH_SERVICE"/>

application节点下配置如下代码

<meta-data android:value="_%小米登陆的APPID%" android:name="MIUI_APPID"/>  
<meta-data android:value="%小米登陆的APPSecret%" android:name="MIUI_APPSECRET"/>  
<meta-data android:value="%小米登陆的RegURL%" android:name="MIUI_REDIRECT_URI"/>  
<activity android:name="com.xiaomi.account.openauth.AuthorizeActivity"/>

properties.xml需要添加如下代码

properties.xml文件在ADT工程assets/data目录下
Features节点下添加

<feature name="OAuth" value="io.dcloud.feature.oauth.OAuthFeatureImpl">  
<module name="OAuth-MiUi" value="io.dcloud.feature.oauth.miui.MiUiOAuthService"/>  
</feature>
收起阅读 »

Android平台离线打包分享插件配置

分享插件 离线打包

微信分享

微信appkey申请方法

需要拷贝的文件

需要引入工程的jar/aar文件
需要将以下jar/aar文件放到工程的libs目录下

路径 文件
SDK\libs(旧版) share.jar, share-weixin.jar,tx_wx.jar
SDK\libs(新版) share-weixin-release.aar,wechat-sdk-android-with-mta-5.1.4.jar

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

<application>节点下配置如下代码

<!-- 微信分享 配置begin -->  
<meta-data android:name="WX_APPID" android:value="%微信开放平台申请应用的AppID%">  
</meta-data>  
<meta-data android:name="WX_SECRET" android:value="%微信开放平台申请应用的Secret%">  
        </meta-data>  
        <activity  
            android:name="【包名】.wxapi.WXEntryActivity"  
            android:label="@string/app_name"  
            android:exported="true"  
            android:launchMode="singleTop">  
            <intent-filter>  
                <action android:name="android.intent.action.VIEW"/>  
                <category android:name="android.intent.category.DEFAULT"/>  
                <data android:scheme="%微信开放平台申请应用的AppID%""/>  
            </intent-filter>  
        </activity>  
        <!-- 微信分享 配置 end -->

properties.xml需要添加如下代码
properties.xml文件在assets/data目录下

<feature name="Share" value="io.dcloud.share.ShareFeatureImpl"><module name="Weixin" value="io.dcloud.share.mm.WeiXinApiManager"/></feature>

提示:
1) androidmanifest.xml文件中声明的包名必须与申请微信appkey使用的包名一致,否则分享插件会调用失败
2) 微信分享测试需要使用在微信开放平台申请应用时使用的应用签名文件进行签名打包,否则无法获取好友列表。

QQ分享

需要拷贝的文件

需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下

路径 文件
SDK\libs(旧版) share.jar, share-qq.jar,qq_mta-sdk-1.6.2.jar,qq_sdk_v3.1.0.jar
SDK\libs(新版) share-qq-release.aar,qq_mta-sdk-1.6.2.jar,qq_sdk_v3.1.0.jar

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

<application>节点下配置如下代码

<!-- Share QQ start -->  
        <meta-data android:value="%appid%" android:name="QQ_APPID"/>   
        <activity android:name="com.tencent.tauth.AuthActivity" android:launchMode="singleTask" android:noHistory="true">   
        <intent-filter>  
        <action android:name="android.intent.action.VIEW"/>   
        <category android:name="android.intent.category.DEFAULT"/>   
        <category android:name="android.intent.category.BROWSABLE"/>  
        <data android:scheme="%appid%"/>   
        </intent-filter>   
        </activity>   
        <activity android:name="com.tencent.connect.common.AssistActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:screenOrientation="portrait"/>  
        <!-- Share QQ end -->

properties.xml需要添加如下代码
properties.xml文件在assets/data目录下

<feature name="Share" value="io.dcloud.share.ShareFeatureImpl"><module name="QQ" value="io.dcloud.share.qq.QQApiManager"/></feature>

腾讯微博

[腾讯微博appkey申请方法] (http://ask.dcloud.net.cn/article/207)

需要拷贝的文件

需要引入工程的jar/aar文件
需要将以下jar/aar文件放到工程的libs目录下

路径 文件
SDK\libs(旧版) share.jar share-tencent.jar tx_wx.jar tx_weibo_sdk.jar tx_weibo_sdk_component.jar tx_weibo_sdk-httpclient-3.0.1.jar
SDK\libs(新版) share-tencent-release.aar

需要引入工程的资源文件
需要将SDK/assets目录下全部png图片放到工程的assets目录下(新版不需要设置此项)

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限

  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>     
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>        
  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>        
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>   
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>     
  <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>   

<application>节点下配置如下代码

<!-- Share - 腾讯微博分享 -->  
        <!-- 官方网站:http://dev.t.qq.com/ -->  
        <meta-data  
            android:name="TENCENT_APPKEY"  
            android:value="_%腾讯微博开放平台申请应用的Appkey,注意前面要添加下划线%" />  
        <meta-data  
            android:name="TENCENT_SECRET"  
            android:value="%腾讯微博开放平台申请应用的Secret%" />  
        <meta-data  
            android:name="TENCENT_REDIRECT_URI"  
            android:value="%腾讯微博开放平台申请应用配置的回调地址%" />  

        <activity  
            android:name="io.dcloud.share.tencent.WebAuthorize"  
            android:theme="@android:style/Theme.NoTitleBar" >  
        </activity>

properties.xml需要添加如下代码
properties.xml文件在ADT工程assets/data目录下

<feature name="Share" value="io.dcloud.share.ShareFeatureImpl"><module name="Tencent" value="io.dcloud.share.tencent.TencentWeiboApiManager"/></feature>

提示:androidmanifest.xml文件中声明的包名必须与申请腾讯微博appkey使用的包名一致,否则分享插件会调用失败

新浪微博

新浪微博appkey申请步骤

需要拷贝的文件

需要引入工程的jar文件
需要将以下jar文件,so文件和cer文件放到工程的libs目录和assets目录下(新版不需要添加so和cer文件)

路径 文件
SDK\libs(新版) sina-libs-release.aar,share-sina-release.aar
SDK\libs(旧版) share.jar share-sina.jar sinaweibo4.1.jar
SDK\libs\armeabi libweibosdkcore.so
SDK\libs\armeabi-v7a libweibosdkcore.so
SDK\libs\x86 libweibosdkcore.so
SDK\assets geo_global_ca.cer

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限

 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>     
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>       
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>   

application节点下配置如下代码

<!-- Share - 新浪微博分享 -->  
        <!-- 官方网站:http://open.weibo.com/ -->  
        <meta-data android:name="SINA_APPKEY" android:value="_%新浪微博开放平台申请应用的Appkey,注意前面要添加下划线%" />  
        <meta-data android:name="SINA_SECRET" android:value="%新浪微博开放平台申请应用的Secret%" />  
        <meta-data android:name="SINA_REDIRECT_URI" android:value="%新浪微博开放平台申请应用配置的回调地址%" />  
        <activity android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"  
            android:configChanges="keyboardHidden|orientation"  
            android:exported="false"  
            android:windowSoftInputMode="adjustResize">  
        </activity>  

        <activity android:name="com.sina.weibo.sdk.share.WbShareTransActivity"  
            android:launchMode="singleTask"  
            android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">  
                <intent-filter>  
                    <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />  

                    <category android:name="android.intent.category.DEFAULT" />  
                </intent-filter>  
        </activity>

properties.xml需要添加如下代码
properties.xml文件在ADT工程assets/data目录下

<feature name="Share" value="io.dcloud.share.ShareFeatureImpl"><module name="Sina" value="io.dcloud.share.sina.SinaWeiboApiManager"/></feature>

提示:androidmanifest.xml文件中声明的包名必须与申请新浪微博appkey使用的包名一致,否则分享插件会调用失败

继续阅读 »

微信分享

微信appkey申请方法

需要拷贝的文件

需要引入工程的jar/aar文件
需要将以下jar/aar文件放到工程的libs目录下

路径 文件
SDK\libs(旧版) share.jar, share-weixin.jar,tx_wx.jar
SDK\libs(新版) share-weixin-release.aar,wechat-sdk-android-with-mta-5.1.4.jar

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

<application>节点下配置如下代码

<!-- 微信分享 配置begin -->  
<meta-data android:name="WX_APPID" android:value="%微信开放平台申请应用的AppID%">  
</meta-data>  
<meta-data android:name="WX_SECRET" android:value="%微信开放平台申请应用的Secret%">  
        </meta-data>  
        <activity  
            android:name="【包名】.wxapi.WXEntryActivity"  
            android:label="@string/app_name"  
            android:exported="true"  
            android:launchMode="singleTop">  
            <intent-filter>  
                <action android:name="android.intent.action.VIEW"/>  
                <category android:name="android.intent.category.DEFAULT"/>  
                <data android:scheme="%微信开放平台申请应用的AppID%""/>  
            </intent-filter>  
        </activity>  
        <!-- 微信分享 配置 end -->

properties.xml需要添加如下代码
properties.xml文件在assets/data目录下

<feature name="Share" value="io.dcloud.share.ShareFeatureImpl"><module name="Weixin" value="io.dcloud.share.mm.WeiXinApiManager"/></feature>

提示:
1) androidmanifest.xml文件中声明的包名必须与申请微信appkey使用的包名一致,否则分享插件会调用失败
2) 微信分享测试需要使用在微信开放平台申请应用时使用的应用签名文件进行签名打包,否则无法获取好友列表。

QQ分享

需要拷贝的文件

需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下

路径 文件
SDK\libs(旧版) share.jar, share-qq.jar,qq_mta-sdk-1.6.2.jar,qq_sdk_v3.1.0.jar
SDK\libs(新版) share-qq-release.aar,qq_mta-sdk-1.6.2.jar,qq_sdk_v3.1.0.jar

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

<application>节点下配置如下代码

<!-- Share QQ start -->  
        <meta-data android:value="%appid%" android:name="QQ_APPID"/>   
        <activity android:name="com.tencent.tauth.AuthActivity" android:launchMode="singleTask" android:noHistory="true">   
        <intent-filter>  
        <action android:name="android.intent.action.VIEW"/>   
        <category android:name="android.intent.category.DEFAULT"/>   
        <category android:name="android.intent.category.BROWSABLE"/>  
        <data android:scheme="%appid%"/>   
        </intent-filter>   
        </activity>   
        <activity android:name="com.tencent.connect.common.AssistActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:screenOrientation="portrait"/>  
        <!-- Share QQ end -->

properties.xml需要添加如下代码
properties.xml文件在assets/data目录下

<feature name="Share" value="io.dcloud.share.ShareFeatureImpl"><module name="QQ" value="io.dcloud.share.qq.QQApiManager"/></feature>

腾讯微博

[腾讯微博appkey申请方法] (http://ask.dcloud.net.cn/article/207)

需要拷贝的文件

需要引入工程的jar/aar文件
需要将以下jar/aar文件放到工程的libs目录下

路径 文件
SDK\libs(旧版) share.jar share-tencent.jar tx_wx.jar tx_weibo_sdk.jar tx_weibo_sdk_component.jar tx_weibo_sdk-httpclient-3.0.1.jar
SDK\libs(新版) share-tencent-release.aar

需要引入工程的资源文件
需要将SDK/assets目录下全部png图片放到工程的assets目录下(新版不需要设置此项)

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限

  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>     
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>        
  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>        
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>   
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>     
  <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>   

<application>节点下配置如下代码

<!-- Share - 腾讯微博分享 -->  
        <!-- 官方网站:http://dev.t.qq.com/ -->  
        <meta-data  
            android:name="TENCENT_APPKEY"  
            android:value="_%腾讯微博开放平台申请应用的Appkey,注意前面要添加下划线%" />  
        <meta-data  
            android:name="TENCENT_SECRET"  
            android:value="%腾讯微博开放平台申请应用的Secret%" />  
        <meta-data  
            android:name="TENCENT_REDIRECT_URI"  
            android:value="%腾讯微博开放平台申请应用配置的回调地址%" />  

        <activity  
            android:name="io.dcloud.share.tencent.WebAuthorize"  
            android:theme="@android:style/Theme.NoTitleBar" >  
        </activity>

properties.xml需要添加如下代码
properties.xml文件在ADT工程assets/data目录下

<feature name="Share" value="io.dcloud.share.ShareFeatureImpl"><module name="Tencent" value="io.dcloud.share.tencent.TencentWeiboApiManager"/></feature>

提示:androidmanifest.xml文件中声明的包名必须与申请腾讯微博appkey使用的包名一致,否则分享插件会调用失败

新浪微博

新浪微博appkey申请步骤

需要拷贝的文件

需要引入工程的jar文件
需要将以下jar文件,so文件和cer文件放到工程的libs目录和assets目录下(新版不需要添加so和cer文件)

路径 文件
SDK\libs(新版) sina-libs-release.aar,share-sina-release.aar
SDK\libs(旧版) share.jar share-sina.jar sinaweibo4.1.jar
SDK\libs\armeabi libweibosdkcore.so
SDK\libs\armeabi-v7a libweibosdkcore.so
SDK\libs\x86 libweibosdkcore.so
SDK\assets geo_global_ca.cer

Androidmainfest.xml文件需要修改的项

需要在application节点前添加权限

 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>     
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>       
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>   

application节点下配置如下代码

<!-- Share - 新浪微博分享 -->  
        <!-- 官方网站:http://open.weibo.com/ -->  
        <meta-data android:name="SINA_APPKEY" android:value="_%新浪微博开放平台申请应用的Appkey,注意前面要添加下划线%" />  
        <meta-data android:name="SINA_SECRET" android:value="%新浪微博开放平台申请应用的Secret%" />  
        <meta-data android:name="SINA_REDIRECT_URI" android:value="%新浪微博开放平台申请应用配置的回调地址%" />  
        <activity android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"  
            android:configChanges="keyboardHidden|orientation"  
            android:exported="false"  
            android:windowSoftInputMode="adjustResize">  
        </activity>  

        <activity android:name="com.sina.weibo.sdk.share.WbShareTransActivity"  
            android:launchMode="singleTask"  
            android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">  
                <intent-filter>  
                    <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />  

                    <category android:name="android.intent.category.DEFAULT" />  
                </intent-filter>  
        </activity>

properties.xml需要添加如下代码
properties.xml文件在ADT工程assets/data目录下

<feature name="Share" value="io.dcloud.share.ShareFeatureImpl"><module name="Sina" value="io.dcloud.share.sina.SinaWeiboApiManager"/></feature>

提示:androidmanifest.xml文件中声明的包名必须与申请新浪微博appkey使用的包名一致,否则分享插件会调用失败

收起阅读 »

新浪微博appkey申请步骤

分享插件
  1. 登陆新浪微博开放平台
  2. 点击“微连接”
  3. 点击“立即创建微连接”
  4. 点击“移动应用”
  5. 填写应用名称和应用地址,填写完成后点击创建生成新的应用,用户填写应用地址需要注意。
  6. 填写应用的应用平台信息

    IOS : Bundle ID 必须和使用App云端打包使用的APPID一致。

appleID 获取方法
首先需要在 Itunes Connect创建一个相同Bundle ID的app,创建成功后进入信息配置页面, 可在页面中找到apple id

Android:应用的包名必须和使用App云端打包填写的包名一致。
使用Dcloud公用证书时打包时,可填写公用的应用签名,应用签名MD5值为(59201CF6589202CB2CDAB26752472112)。

  1. 打开新页面后可在页面中找到分配的appkey和App Secret ,用户需要按照提示填写应用的其他信息。
  2. 填写基本信息后设置应用的授权回调页地址,在应用的“高级信息”页面点击编辑,填写授权回调页面地址。授权回调页地址需要和在manifest文件填写的“redirect_url”字段一致。授权回调页地址需要和应用地址处于同一根域。
继续阅读 »
  1. 登陆新浪微博开放平台
  2. 点击“微连接”
  3. 点击“立即创建微连接”
  4. 点击“移动应用”
  5. 填写应用名称和应用地址,填写完成后点击创建生成新的应用,用户填写应用地址需要注意。
  6. 填写应用的应用平台信息

    IOS : Bundle ID 必须和使用App云端打包使用的APPID一致。

appleID 获取方法
首先需要在 Itunes Connect创建一个相同Bundle ID的app,创建成功后进入信息配置页面, 可在页面中找到apple id

Android:应用的包名必须和使用App云端打包填写的包名一致。
使用Dcloud公用证书时打包时,可填写公用的应用签名,应用签名MD5值为(59201CF6589202CB2CDAB26752472112)。

  1. 打开新页面后可在页面中找到分配的appkey和App Secret ,用户需要按照提示填写应用的其他信息。
  2. 填写基本信息后设置应用的授权回调页地址,在应用的“高级信息”页面点击编辑,填写授权回调页面地址。授权回调页地址需要和在manifest文件填写的“redirect_url”字段一致。授权回调页地址需要和应用地址处于同一根域。
收起阅读 »

微信开放平台申请应用获取appkey

分享插件 appsecret
  1. 首先登陆微信开放平台
  2. 点击“创建移动应用”
  3. 填写“应用名称”“应用简介”并上传应用的图标文件,填写完成后点击“下一步”
  4. 选择支持的应用平台,并填写相应的平台信息
    IOS平台
    appstore下载地址在应用上传到appstroe上后填写。
    Android平台
    应用签名:安卓应用的唯一签名,签名方法可参考(给Android应用签名),使用Dcloud公用证书时打包时,可填写公用的应用签名,应用签名MD5值为(59201CF6589202CB2CDAB26752472112)。
    应用包名:用户使用HBuilder打安卓应用包时设置的包名,应当与打包时使用的包名一致。

提示: 设置提交后需要等待微信人工审核完成才能获取应用的Appkey和appsecret

继续阅读 »
  1. 首先登陆微信开放平台
  2. 点击“创建移动应用”
  3. 填写“应用名称”“应用简介”并上传应用的图标文件,填写完成后点击“下一步”
  4. 选择支持的应用平台,并填写相应的平台信息
    IOS平台
    appstore下载地址在应用上传到appstroe上后填写。
    Android平台
    应用签名:安卓应用的唯一签名,签名方法可参考(给Android应用签名),使用Dcloud公用证书时打包时,可填写公用的应用签名,应用签名MD5值为(59201CF6589202CB2CDAB26752472112)。
    应用包名:用户使用HBuilder打安卓应用包时设置的包名,应当与打包时使用的包名一致。

提示: 设置提交后需要等待微信人工审核完成才能获取应用的Appkey和appsecret

收起阅读 »

腾讯微博appkey申请方法

分享插件
  1. 首先登陆腾讯微博开放平台
  2. 点击页面上的“管理中心”
  3. 点击页面上的“创建应用”
  4. 在弹出框中选择“无线应用”然后点击确定
  5. 在创建应用页面填写应用信息,如应用名,应用的网址分类和支持的平台等信息然后点击提交,用户在填写应用网址时应当注意,应用网址需要和在manifest文件填写的“redirect_url”字段一致。
  6. 应用创建成功后和可获得这个应用的appkey和 AppSecret信息,将他们分别填入plus->distribute->plugins->share->tencent的appkey和appsecret属性下即可
继续阅读 »
  1. 首先登陆腾讯微博开放平台
  2. 点击页面上的“管理中心”
  3. 点击页面上的“创建应用”
  4. 在弹出框中选择“无线应用”然后点击确定
  5. 在创建应用页面填写应用信息,如应用名,应用的网址分类和支持的平台等信息然后点击提交,用户在填写应用网址时应当注意,应用网址需要和在manifest文件填写的“redirect_url”字段一致。
  6. 应用创建成功后和可获得这个应用的appkey和 AppSecret信息,将他们分别填入plus->distribute->plugins->share->tencent的appkey和appsecret属性下即可
收起阅读 »

web API图片上传

最近研究了下webapi服务器下图片的上传功能,屁话不多说,直接看代码吧

 public Task<HttpResponseMessage> PostFormData()  
        {  
            // Check if the request contains multipart/form-data.  
            // 检查该请求是否含有multipart/form-data  
            if (!Request.Content.IsMimeMultipartContent())  
            {  
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);  
            }  

            string root = HttpContext.Current.Server.MapPath("~/userImage");  
            var provider = new MultipartFormDataStreamProvider(root);  

            // Read the form data and return an async task.  
            // 读取表单数据,并返回一个async任务  
            var task = Request.Content.ReadAsMultipartAsync(provider).  
                ContinueWith<HttpResponseMessage>(t =>  
                {  
                    if (t.IsFaulted || t.IsCanceled)  
                    {  
                        Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception);  
                    }  

                    // This illustrates how to get the file names.  
                    // 以下描述了如何获取文件名  
                    foreach (MultipartFileData file in provider.FileData)  
                    {  
                        //新文件夹路径  
                        string newRoot = root + "\\" + provider.FormData.GetValues(1)[0].ToString();  
                        if (!Directory.Exists(newRoot))  
                        {  
                            Directory.CreateDirectory(newRoot);  
                        }  
                        Trace.WriteLine(file.Headers.ContentDisposition.FileName);  
                        Trace.WriteLine("Server file path: " + file.LocalFileName);  
                        if (File.Exists(file.LocalFileName))   
                        {  
                            //原文件名称  
                            string fileName = file.Headers.ContentDisposition.FileName.Substring(1, file.Headers.ContentDisposition.FileName.Length - 2);  
                            //新文件名称   随机数  
                            string newFileName = provider.FormData.GetValues(0)[0] + "." + fileName.Split(new char[] { '.' })[1];  
                            File.Move(file.LocalFileName, newRoot + "\\" + newFileName);  
                        }  
                    }  
                    return Request.CreateResponse(HttpStatusCode.OK);  
                });  

            return task;  
        }

这个也是在网上找的资料,在此基础上添加了修改文件名功能,图片会保存在userimage文件夹下的子目录(如没有userimage就手动创建个),子目录的名称为客户端task.addData("","")添加的内容,文件名为客户端生成的随机数.

继续阅读 »

最近研究了下webapi服务器下图片的上传功能,屁话不多说,直接看代码吧

 public Task<HttpResponseMessage> PostFormData()  
        {  
            // Check if the request contains multipart/form-data.  
            // 检查该请求是否含有multipart/form-data  
            if (!Request.Content.IsMimeMultipartContent())  
            {  
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);  
            }  

            string root = HttpContext.Current.Server.MapPath("~/userImage");  
            var provider = new MultipartFormDataStreamProvider(root);  

            // Read the form data and return an async task.  
            // 读取表单数据,并返回一个async任务  
            var task = Request.Content.ReadAsMultipartAsync(provider).  
                ContinueWith<HttpResponseMessage>(t =>  
                {  
                    if (t.IsFaulted || t.IsCanceled)  
                    {  
                        Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception);  
                    }  

                    // This illustrates how to get the file names.  
                    // 以下描述了如何获取文件名  
                    foreach (MultipartFileData file in provider.FileData)  
                    {  
                        //新文件夹路径  
                        string newRoot = root + "\\" + provider.FormData.GetValues(1)[0].ToString();  
                        if (!Directory.Exists(newRoot))  
                        {  
                            Directory.CreateDirectory(newRoot);  
                        }  
                        Trace.WriteLine(file.Headers.ContentDisposition.FileName);  
                        Trace.WriteLine("Server file path: " + file.LocalFileName);  
                        if (File.Exists(file.LocalFileName))   
                        {  
                            //原文件名称  
                            string fileName = file.Headers.ContentDisposition.FileName.Substring(1, file.Headers.ContentDisposition.FileName.Length - 2);  
                            //新文件名称   随机数  
                            string newFileName = provider.FormData.GetValues(0)[0] + "." + fileName.Split(new char[] { '.' })[1];  
                            File.Move(file.LocalFileName, newRoot + "\\" + newFileName);  
                        }  
                    }  
                    return Request.CreateResponse(HttpStatusCode.OK);  
                });  

            return task;  
        }

这个也是在网上找的资料,在此基础上添加了修改文件名功能,图片会保存在userimage文件夹下的子目录(如没有userimage就手动创建个),子目录的名称为客户端task.addData("","")添加的内容,文件名为客户端生成的随机数.

收起阅读 »

深入理解高度。获取屏幕、webview、软键盘高度

Native.JS Webview 软键盘 输入法 高度

如果没有手动调整过webview的高度的话,默认情况下,屏幕的高度=顶部状态栏的高度+webview的高度。
如果软键盘打开,则屏幕的高度=顶部状态栏的高度+webview的高度+软键盘的高度。
HTML5 规范目前没有提供状态栏高度和软键盘高度的直接的查询方法,不过有了Native.js,我们还是能查询到所有这些高度的数值。

背景知识介绍:

手机屏幕有真实的物理分辨率,比如小米note的高度是1920px。  
但在网页里,一个10px的字体,并不会小的看不清,因为webview提供了逻辑分辨率的概念。  
如果不在meta里设置,默认下小米note的放大系数scale是3,就是会放大3倍显示。  
也就是对于HTML而言,小米note的高度是1920/3=640px。  
如果网页是全屏的,没有顶部状态栏,那么一个640px高的div将撑满屏幕高度。  

获取屏幕、顶部状态栏和软键盘的高度

1. 屏幕的高度

获取屏幕的高度很简单,HTML自带了screen.height,直接就可以得到屏幕的整体高度,单位是px,物理分辨率值(不是HTML的逻辑分辨率)。  
HTML5Plus里提供了plus.screen.resolutionHeight方法,也是屏幕高度,但这个值是逻辑分辨率的高度。参考[http://html5plus.org/doc/zh_cn/device.html#plus.screen](http://html5plus.org/doc/zh_cn/device.html#plus.screen)  
screen.height = plus.screen.resolutionHeight*plus.screen.scale  

2. 获取webview高度

虽然webview的getStyle可以得到webview的高度,但开发者如果不手动设置的话,默认值是100%,这个值对本文探讨的问题没有意义。我们需要px的物理高度。  
在Android里通过如下js代码可以得到webview的高度:plus.android.invoke(plus.android.currentWebview(),"getHeight")   
这是一段Native.js代码,由于Android的webview原生对象就有getHeight()方法,所以就可以直接这样调用。  
当然webview原生对象还有很多方法属性都可以调,具体参阅[Native.js入门](http://ask.dcloud.net.cn/docs/#http://ask.dcloud.net.cn/article/88)  
图1(此图中,物理分辨率是蓝色字体,逻辑分辨率是黑色字体) 对于iOS,就没必要使用Native.js这么复杂的技术了,iOS的屏幕高度是固定的几个,直接判断屏幕高度和设备型号就可以了。

3. 获取状态栏高度

顶部状态栏比较复杂,如果webview设了全屏,那么状态栏高度就为0。  
如果设置了沉浸式状态栏,状态栏透明了,虽然状态栏存在理论高度,但webview高度是全屏的。  
plus.navigator.getStatusbarHeight(),这个api专门获取状态栏高度。  

4. 获取输入法高度

当弹出输入法时,在Android上,webview的高度会自动减少,留出空间给软键盘。  
那么输入法高度=屏幕高度-状态栏高度-webview高度  
在小米note上,默认输入法高度是 863px。  
图2(此图中,物理分辨率是蓝色字体,逻辑分辨率是黑色字体)

5. 流应用任务栏高度

在流应用环境中,比如iOS流应用,会有一个流应用任务栏,这个任务栏的出现会挤压webview的高度。  
如果开发者要设置一个元素居底,请使用bottom方法,而不是通过屏幕高度-webview高度设top,以避免出现流应用任务栏时高度错位。  

说说HTML里的几个高度

其实HTML自己也提供了很多高度相关的api,除了screen.height还有document.body.clientHeight,document.body.scrollHeight,感觉也很容易混淆。  
document.body.clientHeight是网页内容区的有效高度,符合盒模型。document.body.scrollHeight是网页可滚动区域的高度。  
如图2所示:  
- 此时document.body.clientHeight小于webview高度,而document.body.scrollHeight等于webview高度,即document.body.scrollHeight=plus.android.invoke(plus.android.currentWebview(),"getHeight") 。  
- 如果数字不是1-5,而是1-10,那么document.body.clientHeight会继续增加,但内容不够多,不会滚动,document.body.scrollHeight不变,仍是webview高度。  
- 如果网页内容非常多,数字到了40,那document.body.clientHeight会继续增加,并且只要发生了滚动,则document.body.clientHeight=document.body.scrollHeight  

其他相关知识。

  • 监控软键盘是否弹出,Android上可以使用HTML自带的resize事件。
    但是要判断横竖屏,因为横竖屏切换也会造成resize,所以高度变而宽度不变,就是软键盘弹出或消失了。
  • 强制弹出键盘,也有Native.js示例,http://ask.dcloud.net.cn/question/2324
  • hello uni-app和hello mui都有聊天示例模板,有底部输入框跟随键盘顶起的示例,可以参考下。
继续阅读 »

如果没有手动调整过webview的高度的话,默认情况下,屏幕的高度=顶部状态栏的高度+webview的高度。
如果软键盘打开,则屏幕的高度=顶部状态栏的高度+webview的高度+软键盘的高度。
HTML5 规范目前没有提供状态栏高度和软键盘高度的直接的查询方法,不过有了Native.js,我们还是能查询到所有这些高度的数值。

背景知识介绍:

手机屏幕有真实的物理分辨率,比如小米note的高度是1920px。  
但在网页里,一个10px的字体,并不会小的看不清,因为webview提供了逻辑分辨率的概念。  
如果不在meta里设置,默认下小米note的放大系数scale是3,就是会放大3倍显示。  
也就是对于HTML而言,小米note的高度是1920/3=640px。  
如果网页是全屏的,没有顶部状态栏,那么一个640px高的div将撑满屏幕高度。  

获取屏幕、顶部状态栏和软键盘的高度

1. 屏幕的高度

获取屏幕的高度很简单,HTML自带了screen.height,直接就可以得到屏幕的整体高度,单位是px,物理分辨率值(不是HTML的逻辑分辨率)。  
HTML5Plus里提供了plus.screen.resolutionHeight方法,也是屏幕高度,但这个值是逻辑分辨率的高度。参考[http://html5plus.org/doc/zh_cn/device.html#plus.screen](http://html5plus.org/doc/zh_cn/device.html#plus.screen)  
screen.height = plus.screen.resolutionHeight*plus.screen.scale  

2. 获取webview高度

虽然webview的getStyle可以得到webview的高度,但开发者如果不手动设置的话,默认值是100%,这个值对本文探讨的问题没有意义。我们需要px的物理高度。  
在Android里通过如下js代码可以得到webview的高度:plus.android.invoke(plus.android.currentWebview(),"getHeight")   
这是一段Native.js代码,由于Android的webview原生对象就有getHeight()方法,所以就可以直接这样调用。  
当然webview原生对象还有很多方法属性都可以调,具体参阅[Native.js入门](http://ask.dcloud.net.cn/docs/#http://ask.dcloud.net.cn/article/88)  
图1(此图中,物理分辨率是蓝色字体,逻辑分辨率是黑色字体) 对于iOS,就没必要使用Native.js这么复杂的技术了,iOS的屏幕高度是固定的几个,直接判断屏幕高度和设备型号就可以了。

3. 获取状态栏高度

顶部状态栏比较复杂,如果webview设了全屏,那么状态栏高度就为0。  
如果设置了沉浸式状态栏,状态栏透明了,虽然状态栏存在理论高度,但webview高度是全屏的。  
plus.navigator.getStatusbarHeight(),这个api专门获取状态栏高度。  

4. 获取输入法高度

当弹出输入法时,在Android上,webview的高度会自动减少,留出空间给软键盘。  
那么输入法高度=屏幕高度-状态栏高度-webview高度  
在小米note上,默认输入法高度是 863px。  
图2(此图中,物理分辨率是蓝色字体,逻辑分辨率是黑色字体)

5. 流应用任务栏高度

在流应用环境中,比如iOS流应用,会有一个流应用任务栏,这个任务栏的出现会挤压webview的高度。  
如果开发者要设置一个元素居底,请使用bottom方法,而不是通过屏幕高度-webview高度设top,以避免出现流应用任务栏时高度错位。  

说说HTML里的几个高度

其实HTML自己也提供了很多高度相关的api,除了screen.height还有document.body.clientHeight,document.body.scrollHeight,感觉也很容易混淆。  
document.body.clientHeight是网页内容区的有效高度,符合盒模型。document.body.scrollHeight是网页可滚动区域的高度。  
如图2所示:  
- 此时document.body.clientHeight小于webview高度,而document.body.scrollHeight等于webview高度,即document.body.scrollHeight=plus.android.invoke(plus.android.currentWebview(),"getHeight") 。  
- 如果数字不是1-5,而是1-10,那么document.body.clientHeight会继续增加,但内容不够多,不会滚动,document.body.scrollHeight不变,仍是webview高度。  
- 如果网页内容非常多,数字到了40,那document.body.clientHeight会继续增加,并且只要发生了滚动,则document.body.clientHeight=document.body.scrollHeight  

其他相关知识。

  • 监控软键盘是否弹出,Android上可以使用HTML自带的resize事件。
    但是要判断横竖屏,因为横竖屏切换也会造成resize,所以高度变而宽度不变,就是软键盘弹出或消失了。
  • 强制弹出键盘,也有Native.js示例,http://ask.dcloud.net.cn/question/2324
  • hello uni-app和hello mui都有聊天示例模板,有底部输入框跟随键盘顶起的示例,可以参考下。
收起阅读 »

自动+手动在线升级

升级 更新

文章在这
贴错了
http://ask.dcloud.net.cn/question/5022

文章在这
贴错了
http://ask.dcloud.net.cn/question/5022

手动检测版本更新的代码

更新 升级

官方提供了自动检测更新的代码,我这里稍微更改了一下,可以手动检测更新。

不过建议使用App资源在线升级更新
我这里也提供了自动+手动的App资源在线升级

<ul class="mui-table-view" style="margin-top: 25px;">  
                <li class="mui-table-view-cell">  
                    <a id="onlineupgrade">  
                    在线升级 <span class="mui-pull-right" id="supgrade" style="color: red;display: none;">  
                        New  
                    </span>  
                    </a>  
                </li>  
            </ul>
    mui.plusReady(function() {  

            var supgrade = document.getElementById("supgrade");  

                //有新版本显示提示  
            mui.initUpdate(function() {  
                supgrade.style.display = "inline-block";  
            });  
            document.getElementById("onlineupgrade").addEventListener('tap', function() {  
                if (supgrade.style.display != "none") {  
                    mui.initUpdate();  
                }  
            });  
        });
(function($) {  
    //正式上线了请更改app更新地址  
    var server = "http://www.dcloud.io/helloh5/update.json", //获取升级描述文件服务器地址  
        localDir = "update",  
        localFile = "update.json", //本地保存升级描述目录和文件名  
        keyUpdate = "updateCheck", //取消升级键名  
        keyAbort = "updateAbort", //忽略版本键名  
        checkInterval = 3600000, //升级检查间隔,单位为ms,1小时为60*60*1000=3600000, 如果每次启动需要检查设置值为0  
        dir = null;  

    /**  
     * 准备升级操作  
     * 创建升级文件保存目录  
     * @param{Function} 有回调函数是手动检查折升级  
     */  
    $.initUpdate = function(callback) {  

        // 打开doc根目录  
        plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fs) {  
            fs.root.getDirectory(localDir, {  
                create: true  
            }, function(entry) {  
                dir = entry;  
                checkUpdate(callback);  
            }, function(e) {  
                console.log("准备升级操作,打开update目录失败:" + e.message);  
            });  
        }, function(e) {  
            console.log("准备升级操作,打开doc目录失败:" + e.message);  
        });  
    }  

    /**  
     * 检测程序升级  
     * @author liuyf  2015-04-27  
     * @description 手动检测是否升级  是否已过期等标记在手动下无效  
     *  
     * @param{Function} 有回调函数是手动检查折升级  
     * */  
    function checkUpdate(callback) {  
        // 判断升级检测是否过期  
        var lastcheck = plus.storage.getItem(keyUpdate);  
        if (lastcheck) {  
            // 取消已过期,删除取消标记  
            plus.storage.removeItem(keyUpdate);  
        }  
        // 读取本地升级文件]  
        dir.getFile(localFile, {  
            create: false  
        }, function(fentry) {  
            fentry.file(function(file) {  
                var reader = new plus.io.FileReader();  
                reader.onloadend = function(e) {  
                    //检测升级的时候不删除本地升级文件  
                    if (!callback) {  
                        fentry.remove();  
                    }  
                    var data = null;  
                    try {  
                        data = JSON.parse(e.target.result);  
                    } catch (e) {  
                        console.log("读取本地升级文件,数据格式错误!");  
                    }  
                    checkUpdateData(data, callback);  
                }  
                reader.readAsText(file);  
            }, function(e) {  
                console.log("读取本地升级文件,获取文件对象失败:" + e.message);  
                fentry.remove();  
            });  
        }, function(e) {  
            // 失败表示文件不存在,从服务器获取升级数据  
            getUpdateData();  
        });  
    }  

    /**  
     * 检查升级数据  
     * @author liuyf 2015-04-27  
     * @description 手动升级 是否存在版本号等逻辑应舍弃  
     * @param{Function} 有回调函数是手动检查升级  
     */  
    function checkUpdateData(j, callback) {  
        //当前客户端版本号  
        var curVer = plus.runtime.version,  
            inf = j[plus.os.name];  

        if (inf) {  
            var srvVer = inf.version;  
            // 判断是否需要升级  
            if (compareVersion(curVer, srvVer)) {  
                if (!callback) {  
                    // 提示用户是否升级  
                    plus.ui.confirm(inf.note, function(i) {  
                        if (0 == i)  
                            plus.runtime.openURL(inf.url);  
                        else {  
                            plus.storage.setItem(keyUpdate, (new Date()).getTime().toString());  
                        }  
                    }, inf.title, ["立即更新", "取  消"]);  
                } else {  
                    callback();  
                }  
            }  
        }  
    }  

    /**  
     * 从服务器获取升级数据,并存储到本地;  
     */  
    function getUpdateData() {  
        mui.getJSON(server, {}, function(data) {  
            //appid一致,才将服务器上的版本数据保存到本地  
            if (data.appid == plus.runtime.appid) {  
                // 保存到本地文件中  
                dir.getFile(localFile, {  
                    create: true  
                }, function(fentry) {;  
                    fentry.createWriter(function(writer) {  
                        writer.onerror = function() {  
                            console.log("获取升级数据,保存文件失败!");  
                        }  
                        writer.write(data);  
                    }, function(e) {  
                        console.log("获取升级数据,创建写文件对象失败:" + e.message);  
                    });  
                }, function(e) {  
                    console.log("获取升级数据,打开保存文件失败:" + e.message);  
                });  
            }  
        });  
    }  

    /**  
     * 比较版本大小,如果新版本nv大于旧版本ov则返回true,否则返回false  
     * @param {String} ov  
     * @param {String} nv  
     * @return {Boolean}  
     */  
    function compareVersion(ov, nv) {  
        if (!ov || !nv || ov == "" || nv == "") {  
            return false;  
        }  
        var b = false,  
            ova = ov.split(".", 4),  
            nva = nv.split(".", 4);  
        for (var i = 0; i < ova.length && i < nva.length; i++) {  
            var so = ova[i],  
                no = parseInt(so),  
                sn = nva[i],  
                nn = parseInt(sn);  
            if (nn > no || sn.length > so.length) {  
                return true;  
            } else if (nn < no) {  
                return false;  
            }  
        }  
        if (nva.length > ova.length && 0 == nv.indexOf(ov)) {  
            return true;  
        }  
    }  
})(mui);
继续阅读 »

官方提供了自动检测更新的代码,我这里稍微更改了一下,可以手动检测更新。

不过建议使用App资源在线升级更新
我这里也提供了自动+手动的App资源在线升级

<ul class="mui-table-view" style="margin-top: 25px;">  
                <li class="mui-table-view-cell">  
                    <a id="onlineupgrade">  
                    在线升级 <span class="mui-pull-right" id="supgrade" style="color: red;display: none;">  
                        New  
                    </span>  
                    </a>  
                </li>  
            </ul>
    mui.plusReady(function() {  

            var supgrade = document.getElementById("supgrade");  

                //有新版本显示提示  
            mui.initUpdate(function() {  
                supgrade.style.display = "inline-block";  
            });  
            document.getElementById("onlineupgrade").addEventListener('tap', function() {  
                if (supgrade.style.display != "none") {  
                    mui.initUpdate();  
                }  
            });  
        });
(function($) {  
    //正式上线了请更改app更新地址  
    var server = "http://www.dcloud.io/helloh5/update.json", //获取升级描述文件服务器地址  
        localDir = "update",  
        localFile = "update.json", //本地保存升级描述目录和文件名  
        keyUpdate = "updateCheck", //取消升级键名  
        keyAbort = "updateAbort", //忽略版本键名  
        checkInterval = 3600000, //升级检查间隔,单位为ms,1小时为60*60*1000=3600000, 如果每次启动需要检查设置值为0  
        dir = null;  

    /**  
     * 准备升级操作  
     * 创建升级文件保存目录  
     * @param{Function} 有回调函数是手动检查折升级  
     */  
    $.initUpdate = function(callback) {  

        // 打开doc根目录  
        plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fs) {  
            fs.root.getDirectory(localDir, {  
                create: true  
            }, function(entry) {  
                dir = entry;  
                checkUpdate(callback);  
            }, function(e) {  
                console.log("准备升级操作,打开update目录失败:" + e.message);  
            });  
        }, function(e) {  
            console.log("准备升级操作,打开doc目录失败:" + e.message);  
        });  
    }  

    /**  
     * 检测程序升级  
     * @author liuyf  2015-04-27  
     * @description 手动检测是否升级  是否已过期等标记在手动下无效  
     *  
     * @param{Function} 有回调函数是手动检查折升级  
     * */  
    function checkUpdate(callback) {  
        // 判断升级检测是否过期  
        var lastcheck = plus.storage.getItem(keyUpdate);  
        if (lastcheck) {  
            // 取消已过期,删除取消标记  
            plus.storage.removeItem(keyUpdate);  
        }  
        // 读取本地升级文件]  
        dir.getFile(localFile, {  
            create: false  
        }, function(fentry) {  
            fentry.file(function(file) {  
                var reader = new plus.io.FileReader();  
                reader.onloadend = function(e) {  
                    //检测升级的时候不删除本地升级文件  
                    if (!callback) {  
                        fentry.remove();  
                    }  
                    var data = null;  
                    try {  
                        data = JSON.parse(e.target.result);  
                    } catch (e) {  
                        console.log("读取本地升级文件,数据格式错误!");  
                    }  
                    checkUpdateData(data, callback);  
                }  
                reader.readAsText(file);  
            }, function(e) {  
                console.log("读取本地升级文件,获取文件对象失败:" + e.message);  
                fentry.remove();  
            });  
        }, function(e) {  
            // 失败表示文件不存在,从服务器获取升级数据  
            getUpdateData();  
        });  
    }  

    /**  
     * 检查升级数据  
     * @author liuyf 2015-04-27  
     * @description 手动升级 是否存在版本号等逻辑应舍弃  
     * @param{Function} 有回调函数是手动检查升级  
     */  
    function checkUpdateData(j, callback) {  
        //当前客户端版本号  
        var curVer = plus.runtime.version,  
            inf = j[plus.os.name];  

        if (inf) {  
            var srvVer = inf.version;  
            // 判断是否需要升级  
            if (compareVersion(curVer, srvVer)) {  
                if (!callback) {  
                    // 提示用户是否升级  
                    plus.ui.confirm(inf.note, function(i) {  
                        if (0 == i)  
                            plus.runtime.openURL(inf.url);  
                        else {  
                            plus.storage.setItem(keyUpdate, (new Date()).getTime().toString());  
                        }  
                    }, inf.title, ["立即更新", "取  消"]);  
                } else {  
                    callback();  
                }  
            }  
        }  
    }  

    /**  
     * 从服务器获取升级数据,并存储到本地;  
     */  
    function getUpdateData() {  
        mui.getJSON(server, {}, function(data) {  
            //appid一致,才将服务器上的版本数据保存到本地  
            if (data.appid == plus.runtime.appid) {  
                // 保存到本地文件中  
                dir.getFile(localFile, {  
                    create: true  
                }, function(fentry) {;  
                    fentry.createWriter(function(writer) {  
                        writer.onerror = function() {  
                            console.log("获取升级数据,保存文件失败!");  
                        }  
                        writer.write(data);  
                    }, function(e) {  
                        console.log("获取升级数据,创建写文件对象失败:" + e.message);  
                    });  
                }, function(e) {  
                    console.log("获取升级数据,打开保存文件失败:" + e.message);  
                });  
            }  
        });  
    }  

    /**  
     * 比较版本大小,如果新版本nv大于旧版本ov则返回true,否则返回false  
     * @param {String} ov  
     * @param {String} nv  
     * @return {Boolean}  
     */  
    function compareVersion(ov, nv) {  
        if (!ov || !nv || ov == "" || nv == "") {  
            return false;  
        }  
        var b = false,  
            ova = ov.split(".", 4),  
            nva = nv.split(".", 4);  
        for (var i = 0; i < ova.length && i < nva.length; i++) {  
            var so = ova[i],  
                no = parseInt(so),  
                sn = nva[i],  
                nn = parseInt(sn);  
            if (nn > no || sn.length > so.length) {  
                return true;  
            } else if (nn < no) {  
                return false;  
            }  
        }  
        if (nva.length > ova.length && 0 == nv.indexOf(ov)) {  
            return true;  
        }  
    }  
})(mui);
收起阅读 »