官网原文:https://www.fusetools.com/learn/fusejs#geolocation
Geolocation
获取用户的地理位置信息。
var geoLocation = require('FuseJS/GeoLocation');
Geolocation
API有三种取得设备地理位置的方法,下面的部分会具体说明。所有的结果会生成一个位置对象,格式如下所示:
{
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
发到服务器端。
服务器端
客户端的设置讲完后,再来看看后端。我们非常想简化后端设置,但是也不得不跨越地通过苹果和谷歌的限制。
值得庆幸的是,这里有一些设置指南可供测试:
- iOS:https://www.fusetools.com/learn/guides/push-notifications-ios
- 安卓:https://www.fusetools.com/learn/guides/push-notifications-android
通知信息
通知信息为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
是谷歌的标准,但我们觉得在安卓里添加对苹果标准的支持也未尝不可。
目前的版本中,我们只能保证title
和body
的正常使用,还有就是你的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 ID
和JavaScript Key
。这些键值用来识别你的App:`Parse.initialize(appID, jsKey)。
<JavaScript>
var Parse = require('Parse').Parse;
Parse.initialize(appID, jsKey);
</JavaScript>
这样就可以开始使用Parse的服务了。如果你是Parse新手,可以去他们的网站上看看文档。
使用Parse作为Fuse的后端的一个示例,看这里。