资讯专栏INFORMATION COLUMN

iOS开发中Cordova的使用

X1nFLY / 3144人阅读

摘要:在的开发中,经常会把作为增强版的使用。添加即是主要的配置文件,在中其需要放置到这种样式。相反,應使用插件為其啟動邏輯方法。在方法行時定位到新的一頁或刷新,重新載入。請注意以下複雜的傳回值為預計並將轉換為在回檔。

Cordova

iOS Plugin Development Guide

在iOS的WebView开发中,经常会把Cordova作为增强版的WebView使用。关于本部分的实例可以参考笔者的iOSBoilerplate,可以在REAME.md中查看使用说明,也可以git clone 之后直接运行,按照指导进入相关页面。

Installation

引入Cordova主要包含三个步骤(怎么感觉有点像把大象塞到冰箱):

(1)在Podfile中加入依赖项

可以使用pod search Cordova命令来搜索可用的Cordova版本,笔者是使用的4.0.1版本:

pod "Cordova", "~> 4.0.1" # 支持Cordova WebView容器

添加完毕然后使用pod install命令下载即可。

(2)添加config.xml

config.xml即是主要的配置文件,在iOS中其需要放置到/AppName/config.xml这种样式。笔者的config.xml文件的示范为:



    iOSBoilerplate
    
        Cordova Demo in iOS Boilerplate
    
    
        Chevalier
    
    
    
    
    
    
    
    
    
    
    
    
    
        
    
    
        
        
    
    
    
    
        
        
    

(3)添加www文件夹

一般来说会把静态资源文件放置到www目录下,这边有一个小点需要注意下(不知道是不是笔者搞错了),就是将www文件夹引入到XCode中的时候,注意不要选择Copy而是File Reference,即最终的文件夹应该是如下图所示的蓝色而不是黄色。

Network Configuration

cordova-5-ios-9-security-policy-changes

有时候在iOS中进行配置的时候会发现部分网络请求被Ban,可以根据以下几个步骤进行排查。

(1)判断config.xml中是否设置了网络请求的白名单,老实说现在cordova-plugin-whitelist这个插件都没有了iOS端,不确定这个是不是需要的。

          

(2)在iOS 9之后默认是不允许非HTTPs的请求发出,所以要修改下配置允许发起HTTP请求。

NSAppTransportSecurity     NSAllowsArbitraryLoads     

(3)检查下 Content Security Policy

Content Security Policy一般用于对于网页内容的控制,不过这东西如果禁止了你访问网络,那么在浏览器内也是看得出来的。

         
Plugins Config

任何一个插件首先需要在config.xml中进行注册:

                       

有沒有指定插件的初始值設定項。相反,應使用插件 pluginInitialize 為其啟動邏輯方法。插件需要長時間運行的請求,如媒體重播、 聽眾,保持內部狀態應執行的背景活動 onReset 方法來清理這些活動。 在方法運行時UIWebView 定位到新的一頁或刷新,重新載入 JavaScript。

JS Modules

关于JS部分的详细配置可以参考官方的JS Modules部分,这里不做赘述,仅展示下基本的用法:

window.echo = function(str, callback) {
        cordova.exec(callback, function(err) {
            callback("Nothing to echo.");
        }, "CordovaPluginsBridge", "echo", [str]);
    };

调用:

window.echo("echome", function(echoValue) {
        alert(echoValue == "echome"); // should alert true.
    });

要注意,一般对于Cordova的调用要放到jQuery的$(document).ready()中。

iOS本地方法

JavaScript 調用觸發插件請求到本機的一邊,和相應的 iOS 目標 C 插件映射正確地在 config.xml 檔中,但最後 iOS 目標 C 插件類看起來像什麼? 無論派往與 JavaScript 的插件 exec 函數傳遞到相應的插件類的 action 方法。 插件的方法有此簽名:

   - (void)myMethod:(CDVInvokedUrlCommand*)command    {        CDVPluginResult* pluginResult = nil;        NSString* myarg = [command.arguments objectAtIndex:0];        if (myarg != nil) {            pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];        } else {            pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Arg was null"];        }        [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];    }
iOS CDVPluginResult 訊息類型

您可以使用 CDVPluginResult 來返回結果的多種類型回 JavaScript 回呼函數,使用類的方法,它們遵循這種模式:

    + (CDVPluginResult*)resultWithStatus:(CDVCommandStatus)statusOrdinal messageAs...


您可以創建 StringIntDoubleBoolArrayDictionaryArrayBuffer ,和 Multipart 類型。 你可以也離開了任何參數來發送狀態,或返回錯誤,或甚至選擇不發送任何外掛程式的結果,在這種情況下既不回撥火。

請注意以下複雜的傳回值為:

messageAsArrayBuffer預計 NSData* 並將轉換為 ArrayBuffer 在 JavaScript 回檔。 同樣,任何 ArrayBuffer JavaScript 發送到一個外掛程式都將轉換為NSData*.

messageAsMultipart預計, NSArray* 包含任何其他支援類型,並將發送整個陣列作為 arguments 給您的 JavaScript 回檔。 這種方式,所有參數在序列化或反序列化作為必要的所以它是能夠安全返回 NSData* 作為多部分,但不是 Array /Dictionary.

异步执行

如果对于部分执行时间较长的代码,可以放在后台进程中执行。

    - (void)myPluginMethod:(CDVInvokedUrlCommand*)command
    {
        // Check command.arguments here.
        [self.commandDelegate runInBackground:^{
            NSString* payload = nil;
            // Some blocking logic...
            CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:payload];
            // The sendPluginResult method is thread-safe.
            [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
        }];
    }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/16210.html

相关文章

  • Capacitor 新一代混合应用“神器” 会代替Cordova吗??

    摘要:介绍畅想是由团队最新开发维护的一个跨平台的应用程序容器,可以轻松构建在,,和上本机运行的应用程序。后者旨在替代或者说是进化。希望看到在未来发展,以及正式发布。我认为它有可能大大改善混合应用开发体验。 1.介绍or畅想 Capacitor是由ionic团队最新开发维护的一个跨平台的应用程序容器,可以轻松构建在iOS,Android,Electron和Web上本机运行的Web应用程序。我们...

    番茄西红柿 评论0 收藏0
  • ionic4+vue+cordova开发混合应用

    摘要:摘要是可以让我们使用开发即使来移动应用的框架。如果你熟悉可以直接使用开发,但如果你熟悉使用或并且也想使用,可以使用版本,本文就以来说明这两者如何结合使用。除此之外还引入和来对把我们代码打包成安卓或应用。。 摘要 ionic是可以让我们使用web开发即使来移动应用的框架。ionic4之前,ionic只能和angular搭配使用,ionic4后把ionic抽离成四个版本,@ionic/co...

    Yujiaao 评论0 收藏0
  • Cordova 是什么

    摘要:水一篇,在之染是什么问题中长答案的整理简单讲就是可以让你用丰富的前端经验写移动应用的东西。第二个是上用于使一个对象可以在中被访问,并调用其方法。但网页界面的性能就没什么好办法了至少我没有。。。 水一篇,在 黒之染:Cordova是什么? 问题中长答案的整理: 简单讲就是可以让你用丰富的前端经验写移动应用的东西。 它不会把你的前端页面变成 ios 原生的 objective-c 或者...

    muddyway 评论0 收藏0
  • ionic环境搭建

    摘要:下载完配置环境变量打开安卓的安卓目录如图,我画圈的两个目录,需要加入到里面安装官网下载官方只需注册即可免费使用,使用下面链接注册即可。检查是否安装成功,正确显示出版本号则说明安装成功。 1. 环境依赖关系叙述 移动端混合开发的一个明显优势就是,一套代码两套部署,开发一套项目代码,可分别打成Android的包和ios的包。无论是混合开发还是原生开发,都是会需要原生的平台。我们先以Andr...

    Kaede 评论0 收藏0
  • cordova研习笔记(一) —— 初试牛刀之cordova.js概要

    摘要:任何初始化任务应该在文件中的事件的事件处理函数中。这个配置文件有几个地方很关键,一开始没有认真看,将插件导进工程跑的时候各种问题,十分头痛,不得不重新认真看看文档。 前言 来新公司的第一个任务,研究hybrid App中间层实现原理,做中间层插件开发。这个任务挺有意思,也很有挑战性,之前在DCloud虽然做过5+ App开发,但是中间层的东西确实涉及不多。本系列文章属于系列开篇cord...

    buildupchao 评论0 收藏0

发表评论

0条评论

X1nFLY

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<