小编Dav*_*den的帖子

Cordova应用程序无法在iPhone X(模拟器)上正确显示

我昨天在Xcode 9.0(9A235)的iPhone X模拟器上测试了我的基于Cordova的应用程序,它看起来不太好.首先,不是填满整个屏幕区域,而是在app内容的上方和下方有一个黑色区域.更糟糕的是,应用内容和黑色之间是两个白条.

cordova-plugin-wkwebview-engine使用WKWebView(不是UIWebView)添加所以Cordova渲染可以修复白条.我的应用程序没有从UIWebView迁移到WKWebView,因为在使用cordova-plugin-wkwebview-engine从Inapp购买托管内容下载的图像到HTML5画布时出现性能和内存泄漏问题(file://由于WKWebView中的安全限制,Webview无法直接访问)必须通过加载图像数据cordova-plugin-file.

这些屏幕截图显示了一个在<body> 上设置了蓝色背景的测试应用.在UIWebView的上方和下方,您可以看到白条,但不能看到WKWebView:

与充满整个屏幕区域的原生应用相比,Cordova Webviews都展示了黑色区域:

ios cordova phonegap iphone-x

113
推荐指数
4
解决办法
8万
查看次数

Cordova应用程序在iOS 10启动时挂起

我刚刚安装了Xcode 8 beta,以便在iOS 10 beta中测试我现有的Cordova应用程序(通过模拟器).当应用程序启动时,它只是挂在加载页面上 - 似乎deviceready事件没有被触发.

所以我也安装iOS版10测试我的产品iPad Air(以防万一它是一个模拟器的问题),但我得到了相同的结果.

该应用程序在iOS 9.3(设备和模拟器)上运行良好.

有人遇到/解决了这个问题吗?

UPDATE

此问题的其他症状包括:

  • 如果你背景应用程序(切换回主屏幕)然后前景应用程序(切换回应用程序),应用程序将正确启动
  • 在进行上述切换之前,某些插件将无法正常工作

xcode ios cordova ios10 xcode8-beta2

29
推荐指数
1
解决办法
2万
查看次数

针对不同的Android屏幕尺寸/密度扩展Phonegap应用?

我有一个Phonegap应用程序,旨在在Android手机和平板电脑上运行.文字和图像的比例在手机上看起来很好,但在7英寸平板电脑上却太小了.

有没有办法设置适用于基于Phonegap的应用程序的不同屏幕尺寸/密度的比例?对于原生的Android应用程序,多个屏幕布局(如Android文档中所述)将是一个解决方案,但这可以用于基于Phonegap的应用程序吗?

我可以使用CSS媒体查询根据屏幕大小设置字体大小,但我想按比例缩放整个界面(包括图像).

我尝试使用CSS zoom属性和媒体查询来定位特定的屏幕大小,但这会破坏绝对定位并干扰UI元素的功能,例如iScroll:

@media only screen and (min-device-width : 768px) {
    body{
        zoom: 125%;
    }   
}
@media only screen and (min-device-width : 1024px){ 
    body{
        zoom: 150%;
    }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试使用targetdensity-dpimeta视口属性 - 将其调整为120dpi使得7"平板电脑上的刻度更好,但手机上的尺寸太大了.由于这是在HTML而不是CSS中进行硬编码,因此不能使用媒体查询根据屏幕大小来改变它:

<meta name="viewport" 
   content="width=device-width, initial-scale=1, targetdensity-dpi=120dpi">
Run Code Online (Sandbox Code Playgroud)

以下是来自测试用Phonegap应用程序的一些截图:

css android dpi scale cordova

17
推荐指数
2
解决办法
4万
查看次数

在Android上使用Phonegap通过蓝牙进行设备间通信?

我想知道一台Android设备上的基于Phonegap的应用程序是否可以通过蓝牙与另一台设备上的另一个基于Phonegap的应用程序进行通信?

如果可以用Android的一些原生Java代码来做这种事情,那么应该可以通过Phonegap把这些代码包装成一个Phonegap插件,对吧......?

从蓝牙的Android文档中,我了解一个设备需要充当服务器并监听传入连接,而另一个"客户端"需要通过连接到服务器来启动.这可以在我设想的两个略有不同的应用程序的场景中工作,例如,在平板电脑上运行的"主"应用程序控制在手机上运行的"奴隶"应用程序.

这个BluetoothSerial插件似乎很有用,因为它提供了监听和启动连接的功能.有没有人使用这个插件在Android设备之间进行通信?

android bluetooth phonegap-plugins cordova

13
推荐指数
1
解决办法
4201
查看次数

iTunes Connect警告:"您的二进制文件不支持iPad"

我刚刚将一个新二进制文件上传到iTunes Connect并将其添加到新版本的iOS应用程序中.

添加二进制文件并保存更改后,iTunes Connect将显示警告消息:

"你的二进制文件不支持iPad.iPad的屏幕截图或应用视频预览将不会显示在App Store上."

在此输入图像描述

Xcode项目是使用Cordova 3 CLI生成的; 自从应用程序从Cordova 2迁移以来,上传的二进制文件是第一个Cordova 3版本.

该应用程序已在iPad上测试,它工作正常.

设备的Xcode项目设置为"Universal"(project.pbxproj中的TARGETED_DEVICE_FAMILY ="1,2"):

在此输入图像描述

Xcode体系结构设置是默认设置,因此它们未在project.pbxproj中明确指定:

在此输入图像描述

我用谷歌搜索了这条警告信息,发现没有有用的信息,所以希望有人在这里遇到过这个问题并提供一些建议.

xcode itunesconnect ipad ios cordova

12
推荐指数
1
解决办法
6481
查看次数

PhoneGap中Android Marshmallow的应用权限

在Android Marshmallow中,我们需要在Apps中分别授予对Location,File等的访问权限.在PhoneGap应用程序中是否有任何我可以检查权限是否可用并提示用户提供权限.

permissions android location file cordova

9
推荐指数
1
解决办法
6608
查看次数

我可以为cordova中的IPad和IPhone(通用)应用设置不同的方向吗?

我正在为Ipad和Iphone开发一个cordova应用程序,我需要iphone应用程序仅支持肖像和ipad应用程序,仅支持横向.现在我已经<preference name="Orientation" value="portrait" />在config.xml文件中设置了.这只会设置iphone的方向.无论如何,我可以在构建之后在ios项目中执行任何操作时从配置文件中设置ipad方向.

ios cordova

8
推荐指数
1
解决办法
3226
查看次数

使用Phonegap离线显示和导航大型自定义地图

我的问题是如何在离线Phonegap应用程序中有效地显示大型自定义地图,允许它们平滑地平移和缩放,同时仍然支持旧的移动设备?

我正在开发一个移动应用程序,该应用程序涉及使用地理位置来导航偏远地区的步行路线,在那里用户可能没有信号,因此也没有互联网连接.重要的是该应用程序适用于Android 2.2+(因此SVG不是一个选项)以及iOS4 +.

我使用Adobe Illustrator以适合每条路线的分辨率绘制自定义矢量地图,平均值约为2000x2000像素,其中最大的一个到目前为止导致图像为4000x2400像素.

我选择使用Phonegap/JQM而不是本机只是因为我来自网络编程背景,它似乎是最快的方式来启动和运行用户界面而不需要过多地钻研本机代码,尽管我已经为了电源和屏幕管理的目的,使用本机代码编写了几个Phonegap插件.

应用程序需要允许用户在地图上平移(通过拖动)和放大/缩小(通过捏合)原始图像大小的大约25%到200%.

我所做的大部分测试都是运行Android 2.3.3的HTC Desire和运行Android 2.2的HTC Wildfire,因为这些可能是应用程序必须运行的最低规格设备.

我已经尝试了各种方法来显示地图(详见下文),但到目前为止,每个都被证明不适合用途,因为应用程序的内存使用量太大,所需的存储空间使得应用程序太大而无法下载或CPU使用过于密集,导致平移/缩放时出现延迟.

任何建议非常感谢.提前致谢.


我试过的方法:

1.使用标记将地图显示为栅格PNG

这是我尝试的第一种方法.将Illustrator中的4000x2400像素图像导出为128色PNG-8,得到746Kb文件.我通过相对于视口绝对定位图像来平移图像,并通过缩放标记的宽度/高度属性来缩放图像.这种方法的问题是,即使在1:1缩放级别,Android应用程序使用60Mb的RAM用于图像,并且放大到200%导致这增加120Mb,导致应用程序在HTC Wildfire上崩溃.

2.使用HTML5画布显示光栅PNG的部分

为了避免放大导致内存使用量成比例增加的问题,我尝试通过JS加载图像,然后将要显示的图像部分复制到视口大小的画布,如:

var canvas = $(‘canvas#mycanvas’);
canvas.width = $(window).width;
canvas.height = $(window).height;
...
var img = new Image();
img.src = “map.png”;
...
var context = canvas[0].getContext("2d");
context.drawImage(img, x, y, w, h, 0, 0, canvas.width, canvas.height);
Run Code Online (Sandbox Code Playgroud)

其中x,y是由平移和w定义的源图像中的左上角,h是源图像中由缩放级别确定的区域大小

这里的问题是大型地图图像在内存中以某种方式失去了质量(我只能假设存在一些内存上限导致抖动),导致地图在应用程序中看起来扭曲:请参阅此处查看示例屏幕截图

3.使用HTML5画布将地图显示为矢量

一些谷歌搜索让我发现了ai2canvas,这是一个Illustrator插件,可以将作品导出为HTML5画布中显示的矢量.导出的结果是一个包含一大块JS的html文件,它将illustrator中的所有路径表示为贝塞尔曲线.导出我的4000x2400地图导致包含矢量路径的550Kb html文件.在我的测试应用程序中,我将整个地图渲染到4000x2400像素的内存中画布(未附加到DOM),然后使用context.drawImage()将其相关部分复制到视口大小的画布中.内存画布作为源.在HTC Wildfire上,虽然内存画布的所有贝塞尔曲线的初始渲染时间约为2000毫秒,但画布之间的复制速度足够快,可以进行平滑的平移和缩放.问题是当我查看应用程序的内存使用情况时,一旦所有向量都呈现,它就会使用120Mb作为内存中的画布.

我尝试了使用矢量图的第二种方法; 而不是将所有向量渲染到大型内存中画布,我让应用程序计算在每个拖动/捏合事件期间当前平移位置/缩放级别的视口中哪些矢量路径可见,并且仅将可见矢量绘制到视口大小的帆布.虽然这将所需的内存使用量减少到10Mb,但是在每个拖动/捏合周期执行这些计算所需的CPU周期使得应用程序在旧的Android手机上落后很多,因此无法使用.

4.使用离线平铺显示地图

使用地图修整器,我为我的地图创建了PNG图块,缩放级别从25%到100%.在我的测试应用程序中,我可以根据需要延迟加载磁贴,从而减少内存使用并在HTC Wildfire上产生平滑的平移/缩放体验.我以为我找到了解决方案,直到我看到APK生成的大小:对于我的4000x2400地图,地图砖工生成了4Mb的平铺图像.我的大多数地图大约是2000x2000像素,因此产生了大约2Mb的图块.我的正确应用程序的代码加上Phonegap开销是另一个2Mb.

我的目的是在Android/Apple市场上发布一系列应用程序,每个应用程序都有一组大约10个地图,但是每个地图的平铺重量在1-4Mb之间,因此生成的应用程序变得非常大.

maps android offline cordova

7
推荐指数
1
解决办法
3146
查看次数

检测Node.js中的硬链接

如何判断文件系统路径是否是与Node.js的硬链接?该功能fs.lstat提供了一个stats对象,给予时硬链接将为返回true stats.isDirectory()stats.isFile()分别.fs.lstat不提供任何注意正常filedirectory链接之间差异的内容.

If my understanding of how linking (ln) works is correct, then a linked file points to the same place on the disk as the original file. This would mean that both the original and linked version are identical, and there is no way to tell the difference between the original file and the linked.

The functionality I'm looking for is as follows:

This …

javascript filesystems hardlink node.js

6
推荐指数
1
解决办法
600
查看次数

检测iOS 10.3应用程序评级对话框显示的机制?

TL; DR:iOS上是否有某种方法可以检测iOS 10.3中添加的Storekit App Rating对话框的存在/显示?

我最近使用以下方法为我的应用添加了对新应用评级对话框的支持:

[SKStoreReviewController requestReview];
Run Code Online (Sandbox Code Playgroud)

但是,我知道有一些使用注意事项(如此处所述),即在调用上述功能时可能会或可能不会显示对话框,不是包括客户是否已对应用程序进行评级或客户已经暗淡的情况对话3次.

我也知道Apple不希望用户操作直接调用对话框的呈现,因此要报告对话框的存在:

虽然在应用程序的用户体验流程中有意义时应调用此方法,但评级/审阅请求视图的实际显示由App Store策略控制.由于此方法可能会或可能不会显示警报,因此响应按钮点击或其他用户操作来调用它是不合适的.

但这并不能阻止UX团队将这些按钮放在图形设计中并询问"我们能否知道对话框是否显示"?

所以,我的问题是,是否有其他间接方式可以确定此对话框的表示?

我最近使用Appium对Android和iOS应用程序进行了一些自动测试,并使用Xpaths查找原生UI元素,所以只是想知道是否可以在iOS应用程序的上下文中实现相同的功能.

storekit ios skstorereviewcontroller

4
推荐指数
1
解决办法
1994
查看次数

通过AngularAMD将AngularJS与RequireJS一起使用:无法读取未定义的属性"指令"

创建了一个非常基本的原型AngularJS项目后,我想将其迁移到使用RequireJS来加载模块.我根据AngularAMDAngularAMD示例项目修改了我的应用程序.

现在,当我访问我的默认路线时,我得到:

Uncaught TypeError: Cannot read property 'directive' of undefined
Run Code Online (Sandbox Code Playgroud)

我一直在摸索为什么对'app'的依赖不满足.如果有人能够发现我明显做错了什么,那就非常感激了.

我把我项目的源代码放在GitHub上,但这里是关键部分:

main.js

require.config({

    baseUrl: "js/",

  // alias libraries paths
    paths: {
        'angular': '../bower_components/angular/angular',
        'angular-route': '../bower_components/angular-route/angular-route',
        'angular-resource': '../bower_components/angular-resource/angular-resource',
        'angularAMD': '../bower_components/angularAMD/angularAMD',
        'ngload': '../bower_components/angularAMD/ngload',
        'jquery': '../bower_components/jquery/jquery'

    },

    // Add angular modules that does not support AMD out of the box, put it in a shim
    shim: {
        'angularAMD': ['angular'],
        'ngload': [ 'angularAMD' ],
        'angular-route': ['angular'],
        'angular-resource': ['angular']
    },

    // kick start application
    deps: ['app']
});
Run Code Online (Sandbox Code Playgroud)

app.js …

requirejs angularjs angular-amd

2
推荐指数
1
解决办法
6493
查看次数

如何测试在"现实世界"中是否访问过地理位置?

好的,所以我已经有了这个问题的答案,但我花了很长时间才达到它,所以我想我会分享它,特别是因为有人问我但是在一个不相关的问题

我创建了一个基于Phonegap的导航应用程序,用于引导步行,使用GPS跟踪用户在预定义路线周围的位置.我的路线在路线周围的特定地理位置设置了触发器,根据用户的当前位置向用户发出指令.问题是GPS不是超级准确或可靠,所以即使我允许在大约20米的位置附近"访问半径",实际测试导致这些触发有时会被错过,因为GPS位置更新会稍微发生之前用户稍后输入访问半径.我尝试增加半径,但这意味着触发器过早触发与用户的当前位置相关.

那么如何以一种使用"真实世界"GPS数据的方式解决这个问题呢?

geolocation geospatial geo cordova

1
推荐指数
1
解决办法
959
查看次数