我正在构建聊天应用程序,其中移动应用用户将数据保存在他的设备上。我们尝试仅将用户相关数据从服务器同步到客户端(couchbase服务器到couchbase mobile)。但是从使用swift的移动设备中,所有Bucket都是从服务器存储到移动内部数据库。我的同步json是
{
"interface": "192.168.0.68:4984",
"adminInterface": "192.168.0.68:4985",
"pretty": true,
"log": ["*"],
"databases": {
"db": {
"server": "http://192.168.0.68:8091",
"bucket": "travel-sample",
"username":"himanshu",
"password":"123456",
"users": {
"himanshu": {
"password": "123456",
"admin_channels": [
"*"
]
}
},
"sync":`
function (doc) {
console.log("doc=================================================================>")
channel (doc.channels);
}
`
}
}}
服务器可能只向移动设备发送相关数据以进行同步。
答案 0 :(得分:3)
是的,您应该使用Sync Gateway channels来路由正确的数据,以便设备。作为同步功能的一部分,如果您将数据路由到“移动频道”,例如在复制器上设置此频道,或为只能访问此频道的移动用户设置身份验证,那么您只能获得该功能具体数据。
答案 1 :(得分:2)
这可以通过为每个用户正确配置频道来定义访问权限,并可以限制用户。
允许同步功能根据文档内容授予用户对频道的访问权限
在这种情况下,当您创建文档时,它的属性应指示特定用户已创建/编辑,并且基于同步功能启动以进行复制。
根据有兴趣在移动设备上复制的给定用户的文档类型创建一个标记数组,并将其传递给同步函数
{
"tags" : [
"fashion",
"outing",
"shopping"
]
}
和同步功能类似
function(doc) {
channel(doc.tags);
}
在客户端上通过使用内置复制API来同步相关用户内容,该API建立用户关注的主题以获取相关数据。然后,复制器将与来自通道的数据进行交互。像在Objective-C代码中一样创建拉复制
CBLReplication *pull = [database createPullReplication: url];
pull.channels = @[@"outing",@"shopping"];
[pull start];
如果我们没有设置特定频道,那么可能所有存在的数据都会从同步网关下拉。