Skip to content

Django app which stores, manages FCM push tokens and interacts with them.

License

Notifications You must be signed in to change notification settings

omelched/djangoFCM

Repository files navigation

djangoFCMv0.4.9

Django app which stores, manages Firebase Cloud Messaging and Huawei Messaging Service push tokens and interacts with them.

Description

djangoFCM is Django-compatible application which stores FCM and HMS push tokens, their parameters, and automates push notifications routines.

Main feature is for djangoFCM to be a "plug-in" Django application, thus capable to work with "little-to-no" configuring and changes to Django project.

Features

djangoFCM @ v0.4.9 can:

  • store push tokens from FCM or HMS
  • link push tokens with their users and applications
  • store push notifications
  • store push notifications extra kwargs (e.g. deeplinks)
  • compose recipients via UI based on user-specified conditions
  • watch notifications schedule on calendar
  • send scheduled push notifications
  • store applications as swappable model

Usage example

TODO

sample_project

sample-project is a showcase django project. You can reference to it for usage cases, examples, testing. You must never deploy sample_project in production due to exposed SECRET_KEY.

Getting Started

Dependencies

System dependencies

In means of automatisation, djangoFCM heavily relies on celery (via django-celery-beat), thus it is your task to provide celery and celerybeat processes and message broker (e.g. rabbitMQ).

Python packages

  • django~=3.2.8 might work on lesser versions, not tested
  • django-celery-beat~=2.2.1 might work on lesser versions, not tested
  • pyfcm~=1.5.4 might work on lesser versions, not tested
  • pyhcm~=1.0.6.4 might work on lesser versions, not tested
  • django-picklefield~=3.0.1 might work on lesser versions, not tested

Django applications

  • django_celery_beat

Installing

Using Python Package Index

  • make sure to use latest pip:

    python3 -m pip install --upgrade pip
  • install djangoFCM:

    python3 -m pip install djangoFCM

OR download package from releases

  • download release asset (.tar.gz or .whl)

  • make sure to use latest pip:

    python3 -m pip install --upgrade pip
  • install djangoFCM from file:

    python3 -m pip install /path/to/downloaded/asset.tar.gz # or .whl

OR clone from repository

  • clone project:

    git clone \
            --depth=1 \
            --branch=master \
            git@github.com:omelched/djangoFCM.git \
            </path/to/downloads>
  • move /djangoFCM/djangoFCM solely to folder containing django apps

    mv      </path/to/downloads>/djangoFCM/djangoFCM \
            </path/to/django/project/apps>
  • remove leftovers

    rm -rf  </path/to/downloads>/djangoFCM

Configuring

Installing application

Add djangoFCM to INSTALLED_APPS in your Django project settings.py.

If you installed package the third way, </path/to/django/project/apps> must be added to PYTHONPATH. If you not sure add code below in your Django project manage.py before calling main():

sys.path.append('</path/to/django/project/apps>')

Provide FCM api key via DJANGOFCM_FCM_API_KEY in your Django project settings.py.

Provide HMS credentials via DJANGOFCM_HMS_CLIENT_ID, DJANGOFCM_HMS_SECRET, DJANGOFCM_HMS_PROJECT_ID in your Django project settings.py.

If your server has its own model to store Applications — specify model identifier (e.g. your_app.better_application_model) in DJANGOFCM_APPLICATION_MODEL in your Django project settings.py.

Celery

Make sure to point celery to djangoFCM.tasks.send_push_notification task. Use app.autodiscover_tasks() in your celeryapp module or specify in settings:

CELERY_IMPORTS = (
    'djangoFCM.tasks',
)

Provide Celery worker to execute tasks, e.g:

venv/bin/celery -A sample_project worker -l INFO

Official documentation may help.

Celerybeat

Provide Celery beat to start scheduled tasks, e.g:

venv/bin/celery -A sample_project beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler

Official documentation on custom schedulers.

Migrations

Execute database migrations:

python sample_project/manage.py migrate

Collect static:

python sample_project/manage.py collectstatic

Authors

@omelched (Denis Omelchenko)

Contributors

Changelist

djangoFCM version history and changelist available at releases page.

License

This project is licensed under the GNU APGLv3 License - see the LICENSE file for details.

Acknowledgments

Inspiration, code snippets, etc.