美文网首页
【译】FuseJS简介(下)

【译】FuseJS简介(下)

作者: 赵赵811 | 来源:发表于2015-12-30 19:34 被阅读0次

官网原文: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的后端的一个示例,看这里

相关文章

网友评论

      本文标题:【译】FuseJS简介(下)

      本文链接:https://www.haomeiwen.com/subject/oyvihttx.html