【译】FuseJS简介(下)

官网原文:https://www.fusetools.com/learn/fusejs#geolocation

Geolocation

获取用户的地理位置信息。

var geoLocation = require('FuseJS/GeoLocation');

GeolocationAPI有三种取得设备地理位置的方法,下面的部分会具体说明。所有的结果会生成一个位置对象,格式如下所示:

{
    latitude: 59.91149,
    longitude: 10.740902,
    accuracy: 11
}

location 位置属性

如果本App或其他App最近更新过位置信息,那应用该属性会立刻获取上一次的已知位置。如果没有可用的位置信息,该属性会返回null

if(geoLocation.location != null)
    console.log(JSON.stringify(geoLocation.location));

单次更新: getLocation(timeout)

在给定的时间内获取尽可能准确的位置信息。

var timeout = 2000;
geoLocation.getLocation(timeout).then(function(location) {
    console.log(JSON.stringify(location));
});

连续更新: onChanged, startListening, stopListening

用指定的设置开始监听位置信息的持续变化。需要当心的是,短间隔的不停获取大量位置信息,还是高精度的,会很快让设备的电池耗尽。

geoLocation.onChanged = function(location) {
    console.log(JSON.stringify(location));
};

var minimumReportInterval = 1000, desiredAccuracyInMeters = 10;
geoLocation.startListening(minimumReportInterval, desiredAccuracyInMeters);

function stop() {
   geoLocation.stopListening();
}

推送通知 Push Notifications

Fuse支持谷歌GCM(Google's Cloud Messaging)和苹果APNS(Apple's Push Notification Service)的推送通知服务。

设置客户端

第一步

在项目的.unoproj文件中加入Fuse推送通知库代码,如下所示:

"Packages": [
    ...
    "Fuse.PushNotifications",
    ...
],
第二步(只有安卓需要)

谷歌的通知需要一点额外的信息,具体见下面的服务器端一节。另外,还需要谷歌play库,具体见官网这里

.unoproj文件中加入如下代码:

"Android": {
    ...
    "GooglePlay": {
        "SenderID": "111781901112"
    }
    ...
},

这里的SenderID是从Google Developers Console获取的项目ID。

不同的平台,不同的情况

在不同平台上,App启动时情况会有稍许的不同,但是参考Fuse package,会发生下列情况:

安卓
  • 谷歌play库会包含在编译后的版本里。具体见官网这里
  • 在项目的Manifest.xml文件里加上你的SenderID, 还有其它一些“管道”(plumbing)。
  • 当App启动时会注册GCM服务
iOS
  • 当App启动时会注册APNS服务。所有访问均需通过苹果的认证系统,所以无需提供额外信息(下面的服务器端一节还会提到)。
安卓&iOS
  • 都会有一个回调函数告知你注册成功与否。
  • 如注册成功,回调函数还有包含一个独一无二的注册码Registration ID(苹果文档里称之为token)。
  • 之后,所有收到的推送通知都会调用一个包含JSON格式通知信息的回调函数。

JavaScript和Uno都有以上三种回调函数。

JavaScript code

在JavaScript里使用通知超级简单。下例展示了几种回调函数,并log出返回的信息:

<FuseJS.Push ux:Global="Push" />
<JavaScript>
    var push = require("Push");

    push.onRegistrationSucceeded = function(regID) {
        console.log("Reg Succeeded: " + regID);
    };

    push.onRegistrationFailed = function(reason) {
        console.log("Reg Failed: " + reason);
    };

    push.onReceivedMessage = function(payload) {
        console.log("Recieved Push Notification: " + payload);
    };
</JavaScript>

以上代码其实很全面了,除了一点,就是在实际的App里,当调用onRegistrationSucceeded后,需要将你的注册码Registration ID发到服务器端。

服务器端

客户端的设置讲完后,再来看看后端。我们非常想简化后端设置,但是也不得不跨越地通过苹果和谷歌的限制。

值得庆幸的是,这里有一些设置指南可供测试:

通知信息

通知信息为JSON格式。当收到一个通知,下面两种情况的一种会发生:

  • 如果你的App就是当前应用,包含全部JSON数据的回调函数会立马被调用。
  • 如果不是,而且JSON包含正确的数据,系统通知栏会添加一条通知,用户只有在下拉菜单里点击该通知,App才会启动并显示通知信息。

苹果和谷歌的API负责定义负载数据如何置入系统通知栏,然而,我们稍做了些规范。

在iOS中,通知信息的JSON数据里只要加上一条aps记录即可:

'aps': {
    alert: {
        'title': 'Well would ya look at that!',
        'body': 'Hello from the server'
    }
},

title是通知信息的名称,body为通知内容。

在安卓里,可以用上面的aps记录,或者用下面的也行:

'notification': {
    alert: {
        'title': 'Well would ya look at that!',
        'body': 'Hello from the server'
    }
},

notification是谷歌的标准,但我们觉得在安卓里添加对苹果标准的支持也未尝不可。

目前的版本中,我们只能保证titlebody的正常使用,还有就是你的App图标也会被用做通知图标。这方面我们会随着Fuse的成熟而加以扩展,有什么特别需求,请到论坛发帖。

注意:谷歌和苹果对推送通知的大小有不同的限制。

  • 谷歌限制在4096字节内
  • 苹果iOS8上以及之后的版本限制在2048字节,之前的系统限制在256字节内。

调试 Debugging

目前在Fuse内调试JavaScript代码只支持Safari和iOS。

  • 设置
    * 在设备上将Safari的Web Inspector打开:Safari/Advanced/Web Inspector
    * 在主机电脑上将Safari的Develop menu打开:先打开Preferences,然后选择Advanced/Show Develop menu in menu bar
  • 启动调试器
    * 编译后在设备上运行。
    * 打开主机上的Safari, 点击菜单栏的Develop menu,然后应该看到以你的设备为名的子菜单,点击JSContext。这样就打开了一个Web Inspector实例,你就可以察看和调试App的JavaScript代码了。

第三方代码库

为了复用已有的第三方JavaScript库,Fuse正努力工作,我们不断的增长并修正我们的Polyfills以改进兼容性。

已知可用的库

下列第三方JavaScript库已被测试通过。

与Parse集成

首先下载最新版的Parse JS SDK

然后导入Parse作为全局资源:

<JavaScript File="latest-parse.js" ux:Global="Parse"/>

将该语句置于UX标记文件的顶部,其它JavaScript模块加上一句require('Parse')就可以使用Parse了。

在Parse的官网创建一个Parse App,首先找到你dashboard, 点击Create a new app, 然后在设置“settings”下面的keys的标签页里找到你的Application IDJavaScript Key。这些键值用来识别你的App:`Parse.initialize(appID, jsKey)。

<JavaScript>
    var Parse = require('Parse').Parse;
    Parse.initialize(appID, jsKey);
</JavaScript>

这样就可以开始使用Parse的服务了。如果你是Parse新手,可以去他们的网站上看看文档

使用Parse作为Fuse的后端的一个示例,看这里

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容