Push notifications

In this version, push notifications work with MongoosePush 2.0.0 and its API v3 by default.

Push notifications are send from the server's JID

Since this version, MongooseIM sends the PubSub publish request to push notifications node from the server's JID. Previously the publish request was sent from the user's JID. If the push PubSub node was created with pubsub#access_mode set to whitelist and pubsub#publish_model set to publishers, now the server's JID needs to be added to the push node in order to send the push notifications successfully.

It can be done by sending the following request from the push node's owner:

<iq to='pubsub.mypubsub'
    type='set'
    id='wy6Hibg='
    from='alice@wonderland.com/resource'>
    <pubsub xmlns='http://jabber.org/protocol/pubsub#owner'>
        <affiliations node='punsub_node_for_my_private_iphone'>
            <affiliation jid='mychat.com' affiliation='publish-only'/>
        </affiliations>
    </pubsub>
</iq>

mod_push module is no longer available

mod_push has been deprecated since MongooseIM 2.1.1 and it is no longer present in this release. Please use the push backend for mod_event_pusher, which is the direct equivalent of mod_push.

Different MUC Light room schema definition

We have introduced a change that enforces defining fields with default values. The previous setup led to problems with the RDBMS backend as separating MUC Light options for the schema from the default values was unintuitive. In a specific case when the default config was a subset of the schema and the client failed to provide these values when a room was created, MUC Light stored the incomplete config in the table. Then the missing config fields could not be supplied by the clients. If you've experienced this issue, a way to fix it is described in the Known issues page.

The current method makes it impossible to make the same mistake, as it disallows field definition without any default value.

What has changed? - for administrators

  • It's no longer possible to declare a room config field only with its name.
  • There is no default_config option anymore.
  • Declaring a field name and type without an atom key is no longer supported.

Example 1

Old config:

{config_schema, [
                 "roomname",
                 "subject",
                 "background",
                 "notification_sound"
                ]},
{default_config, [
                  {"roomname", "The room"},
                  {"subject", "Chit-chat"}
                 ]}

New config:

{config_schema, [
                 {"roomname", "The room"},
                 {"subject", "Chit-chat"},
                 {"background", ""},
                 {"notification_sound", ""}
                ]}

Example 2

Old config:

{config_schema, [
                 "roomname",
                 {"subject", binary},
                 {"priority", priority, integer},
                 {"owners-height", owners_height, float}
                ]},
{default_config, [
                  {"roomname", "The room"},
                  {"subject", "Chit-chat"},
                  {"priority", 10}]}

New config:

{config_schema, [
                 {"roomname", "The room"},
                 {"subject", "Chit-chat"},
                 {"priority", 10, priority, integer},
                 {"owners-height", 180.0, owners_height, float}
                ]}

What has changed? - for developers

The room config schema is currently stored in a completely different data structure, so if you have any custom modules that use it, you'll need to adjust them. Additionally, all definitions and the room config API have been extracted from mod_muc_light.hrl and mod_muc_light_utils.erl into mod_muc_light_room_config.erl module.

For more information, please check the specs for types and functions in the aforementioned file.

What hasn't changed?

  • The default room config is still the same, i.e. roomname (default: "Untitled") and subject (empty string).
  • The room config representation in databases (both Mnesia and RDBMS) is the same; no need for migration.