PushPlugin-为iOS的Hybird App提供APNS服务

APNS是什么?

APNS是iOS生态下面的推送机制。其原理是APP启动的时候,向苹果注册,并获得一个唯一token,然后不论app是否继续在运行,都可以通过调用苹果的APNS服务,来向持有token的设备推送消息,例如顶部的通知。

之前有SSE了,为什么还要APNS?

一开始我也分不清,后来发现,APNS可以在应用关闭的时候,通过iOS系统的通知栏,推送消息给用户,让用户重新进入app中执行某些事情。而这些,是SSE做不到的,SSE仅仅是一套消息机制,必须有app运行的时候才有效。

说了这么久,怎么用?

参考这篇文章:https://github.com/phonegap-build/PushPlugin#automatic_installation

使用方法:

1、安装PushPlugin插件

cordova plugin add https://github.com/phonegap-build/PushPlugin.git

2、配置插件

这个是我把官方的例子,做了一下AMD的封装,使用的方法如下。

然后,就没有然后了。留意tokenHandler里面的结果,收集下来,然后就可以给服务端。app启动后,就可以随时接收服务端的信息了。

看上去很简单,为什么用了这么多时间?

嗯,APP端很简单,但是服务端涉及到各种证书,有点弄不清,然后官方的文档又都是全英,半桶水英语看得够呛。

PushPlugin为我们准备了Example目录,里面的server端有ruby的脚本供我们测试。

测试前的准备:

  1. Ruby的环境
  2. 上面已经装好PushPlugin的APP
  3. 安装pushmeup  sudo gem install pushmeup

接下来就是看得我头晕的生成pem的过程。

  1. 我也懒得翻译了,直接参考这篇文章,获得ck.pem文件。
  2. 编辑Example/server/pushAPNS.rb,配置里面的pem、pem密码和接收消息设备的token。
  3. 执行脚本,向设备推送消息。 ruby pushAPNS.rb

PushPlugin使用小结

客户端安装PushPlugin,并配置好register的时机,同时,在获取到token之后,将token上报给服务端。

服务端按照苹果的要求,配置好各种证书后,向持有token的设备下达消息。

不论app是否仍在运行,设备都将会受到这条消息。

给iOS的WebView添加远程调试

2015-01-16更新:

最新版Cordova默认已经开启了远程调试,只要是通过Xcode来安装到设备上面的应用,都可以在Safari设置里面打开远程调试。而release出来ipa之后,则无法再使用远程调试,这个可能也是为了安全因素吧。


在Xcode中找到AppDelegate.m文件

定位到 didFinishLaunchingWithOptions 代码块中。

添加如下代码:

此时Xcode会报错,提示

no known class method for selector ‘_enableRemoteInspector

错误原因是该方法是iOS的一个私有API,从iOS5开始,Xcode项目新增了Automatic Reference Counting检查项,我们只需要关闭它,就可以正常编译了。

在工程属性中 -》 Build Settings -》 Object-C Automatic Reference Counting,将其设置为No即可。

套壳

phonegap已经不再是phonegap,而是phonegap build,用来打包的。

以前phonegap中,用来JS与native通信的模块,现在叫做cordova,也就是现在要套壳的话,是套cordova。

安装

坑一:公司内网,公司内网npm镜像会遇到部位外链依赖下载不了。

坑二:部分npm包在安装的时候需要编译,Mac默认没有安装编译器(如Linux的GCC),需要手动安装Xcode Command Line Tools。

坑三:用外网吧,内网无形中增加各种bug。

初始化项目

此时,helloWorld目录下面,会有www目录,将我们的页面放到该目录中,并在页面中引入cordova.js

编译cordova,生成Xcode的项目

两个命令的区别在于:

prepare,在Xcode里面需要再build,才能运行。

build,在Xcode中不需要再build,可直接运行。

此时在helloWorld/platforms/ios里面,就有了我们iOS的项目代码,此时可以直接Xcode打开,并编译运行,有证书的还可以真机运行测试。

调用二维码插件

https://github.com/wildabeast/BarcodeScanner

安装插件的方式,在终端里面,输入

然后重新执行一次cordova的编译

这个时候,在页面中,就可以通过如下方式调用扫描二维码功能了。

使用插件注意事项

1、cordova.js文件必须置于cordova生成的www目录下面。

2、 cordova plugin add 方式安装完插件后,cordova_plugin.js的内容会变成我们插件的相关依赖(例如这里会变成AMD的方式声明依赖barcodeScanner.js文件)。

3、我们不需要在页面写明引入cordova_plugin.js和barcodeScanner.js。只需要再执行 cordova prepare 一次,cordova.js会自动引入cordova_plugin.js到页面中,并将相关插件(barcodeScanner.js)引入到页面中。