同步Android客户端和REST服务器(Synchronize Android client an

2019-06-26 22:51发布

REST服务器

我创建了一个包含一个Rails服务器:users和相关:comments 。 它是用来作为后端的API为Android客户端。 交换格式加载并在服务器上存储数据是JSON。 以下是相关的迁移。

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name
      t.timestamps
    end
  end
end

...

class CreateComments < ActiveRecord::Migration
  def change
    create_table :comments do |t|
      t.references :users
      t.string :subject
      t.text :message
      t.timestamps
    end
  end
end

所有用户都已经导入。 因此,只能读取配置为:users资源。 因此,对于:comments应该是可以添加新条目。 以下是可用的路线。

   user_comments GET   /users/:user_id/comments(.:format)      comments#index
                 POST  /users/:user_id/comments(.:format)      comments#create
new_user_comment GET   /users/:user_id/comments/new(.:format)  comments#new
    user_comment GET   /users/:user_id/comments/:id(.:format)  comments#show
           users GET   /users(.:format)                        users#index
            user GET   /users/:id(.:format)                    users#show

Android客户端

在客户端,我使用的是ServiceAsyncTasks下载,解析和存储用户到本地SQLite数据库。 一个ContentProvider缓存用户提供到用户界面。 从服务器下载的用户对象包含的唯一ID users表。 当一个新的评论获取客户机上创建这应该是有用的。

方案1:阅读评论

  • 用户将显示在Android客户端上的列表视图。
  • 用户项目被选中。
  • 该列表活动创建一个Intent包含用户特定的URI,例如content://com.example.myapp.provider/users/23
  • 用户活动显示有关用户和相关联的注释的详细信息。
  • 缓存的意见获得通过加载CursorLoader 。 (1)
  • 同步进程加载从远程服务器评论。 (2)

方案2:写评论

  • 注释可从用户活动创建。
  • 注释被存储到本地数据库。 (3)
  • 存储评论sychronized与远程服务器。 (2)

头痛的问题

我标志着与下列问题相关的方案步骤。

  1. 如何创建您的评论内容URI都与使用CursorLoader在用户活动? 请介意的话,我只知道在这一点上的用户URI。
  2. 有人能描述我如何创建一个同步过程? 我不知道如果SyncAdapter作品在这里(从来没有使用过)。 是同步过程只是一个Service上,一方面开始任务下载,解析和评论存储在客户端和另一方面负载,编码并发送意见到服务器?
  3. 如何为新评论内容URI是什么样子? 是ContentProvider征求意见一样的用户? 有只有一个SQLiteOpenHelper的应用程序?

我挣扎的主要问题是如何设计的应用程序? 如果你知道我应该怎么同步用户和他们的相关评论更好的解决方案,你都非常欢迎。

答案

回答以下问题1和3。
我延长了REST模型如下:对于评论的JSON哈希返回现在包括相关用户ID。 同一ID也被包含在JSON哈希的用户 。 这两个对象都存储在Android设备上的本地数据库。 这让我请求评论为特定用户 。 我只是通过服务器用户ID作为WHERE子句。 征求意见的内容URI,因为我有我的问题暗示不级联。 它类似于用户内容URI:

content://com.example.myapp.provider.commentsprovider/comments

请注意,我改变了字符串的授权部分。 我决定创建独立的内容提供商 ,为用户评论

Answer 1:

一个简单的架构是始终在服务器先更新的东西,发送发表的评论到服务器马上从那里通过推送通知GCM到应要求更新的评论列表中的用户。 该流程是这样的:

  • 当应用程序打开时发送GCM注册ID到您的推送通知服务器(比如uniqush推 ,或使用自己的服务器上的宝石来处理GCM逻辑 ),这样你可以用它来推送通知发送给用户,告诉应用程序更新来自服务器的评论
  • 建立你的初始高速缓存,你想要它
  • 每当用户发布评论,将其发送到服务器,并与创建注释数据的服务器响应,所以如果它想,使用返回的ID和其他任何应用程序可以使用,并且已经对其进行缓存
  • 在服务器上,当评论发布,遍历所有有关用户和使用GCM注册ID发送推送通知,也可以是具有同样简单"update_comments": "1"
  • 在当推通知是由用户点击应用程序,与服务器的请求更新注释缓存


文章来源: Synchronize Android client and REST server