я пробовал сделать похожий вариант с использованием Firebase: но тогда не смог разобраться с ним, не хватило опыта. Он все описанные возможности реализует. В итоге написал сам на чистом java, все достаточно примитивно. Но не для большого объема данных.