anchor.diff:      {UserData} = jiffy:decode(UserBody),
       UserData.
   
  --spec push_message_user([binary()], [proplists:property()], binary()) -> ok | nopush.
  +-spec push_message_user([binary()], [proplists:property()], binary()) -> ok | error.
   push_message_user(Thread, Message, UserId) ->
       Text = proplists:get_value(<<"body">>, Message),
       ThreadId = proplists:get_value(<<"_id">>, Thread),
  
positive.code:             nopush
      end.
  
  -spec push_message_users([binary()], [proplists:property()], [binary()]) -> [ ok | nopush ].
  push_message_users(Thread, Message, [UserId|Users]) ->
      Result = push_message_user(Thread, Message, UserId),
      [ Result | push_message_users(Thread, Message, Users) ];
  push_message_users(_, _, []) ->
      [].
  
  -spec push_message(binary(), [proplists:property()]) -> ok.
  push_message(ThreadId, Message) ->
      {ok, {Thread}} = '3rd-base_db_utils':fetch(ThreadId),
      Users = proplists:get_value(<<"users">>, Thread),
  
negative.code: -record(token, {type, token}).
  
  -include_lib("apns/include/apns.hrl").
  
  -spec is_online(binary()) -> online | offline.
  is_online(UserId) ->
      case mnesia:dirty_read(mqtt_presence, UserId) of
          [{mqtt_presence, _, Clients, _}] ->
              case sets:size(Clients) > 0 of
                  true ->
                      online;
                  false ->
                      offline
              end;
          _DoesNotExist ->
              offline
      end.
  
  push(Text, Extra, #token{type=apns, token=Token}) ->
      apns:send_message(apns, #apns_msg{
  