Metadata-Version: 2.0
Name: django-webpush
Version: 0.2.2.2
Summary: A simple Django package to integrate Web Push Notification in your Application
Home-page: https://www.github.com/safwanrahman/django-webpush
Author: Safwan Rahman
Author-email: safwan.rahman15@gmail.com
License: GNU Public License
Description-Content-Type: UNKNOWN
Platform: UNKNOWN
Classifier: Environment :: Web Environment
Classifier: Framework :: Django
Classifier: Framework :: Django :: 1.8
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Requires-Dist: pywebpush (==1.6.0)

Django-Webpush
==============

Django-Webpush is a Package made for integrating and sending `Web Push
Notification <https://developer.mozilla.org/en/docs/Web/API/Push_API>`__
in Django Application. **This is a Work in Progress package. As the `Web
Push Notification specification <https://www.w3.org/TR/push-api/>`__ is
still in draft, things may change soon. So keep updated.**

Currently, it Supports Sending Push Notification to **Firefox 46+ and
Chrome 52+**.

--------------

Installation and Setup
----------------------

You can install it easily from pypi by running

::

    pip install django-webpush

After installing the package, add ``webpush`` in in your
``INSTALLED_APPS`` settings

.. code:: python

        INSTALLED_APPS = (
            ...
            'webpush',
        )

If you would like to send notification to Google Chrome Users, you need
to add a ``WEBPUSH_SETTINGS`` entry with the **Vapid Credentials** Like
following:

.. code:: python

    WEBPUSH_SETTINGS = {
        "VAPID_PUBLIC_KEY": "Vapid Public Key",
        "VAPID_PRIVATE_KEY":"Vapid Private Key",
        "VAPID_ADMIN_EMAIL": "admin@example.com"
    }

**Replace ``"Vapid Public Key"`` and ``"Vapid Private Key"`` with your
Vapid Keys. Also replace ``admin@example.com`` with your email so that
the push server of browser can reach to you if anything goes wrong.**

    **To know how to obtain Vapid Keys please see this
    ```py_vapid`` <https://github.com/web-push-libs/vapid/tree/master/python>`__
    and `Google Developer
    Documentation <https://developers.google.com/web/fundamentals/push-notifications/subscribing-a-user#how_to_create_application_server_keys>`__.
    You can obtain one easily from
    `web-push-codelab.glitch.me <https://web-push-codelab.glitch.me/>`__.
    ``Application Server Keys`` and ``Vapid Keys`` both are same.**

Then include ``webpush`` in the ``urls.py``

::

    urlpatterns =

        url(r'^webpush/', include('webpush.urls'))
    ]

Then run Migration by **``python manage.py migrate``**

Adding Web Push Information in Template
---------------------------------------

So in template, you need to load ``webpush_notifications`` custom
template tag by following: > - If you are using built in templating
engine, add ``{% load webpush_notifications %}`` in the template > - If
you are using jinja or other templating engine, you can manually add the
html header and button and other information. Documentation for them is
coming soon. Working on getting a automated way for jinja users. If you
would like to add support for them, patch are very much welcome.

Next, inside the ``<head></head>`` tag add ``{% webpush %}``. Like
following

::

    <head>
      {% webpush %}
    </head>

Next, inside the ``<body></body>`` tag, insert ``{% webush_button %}``
where you would like to see the **Subscribe to Push Messaging** Button.
Like following

::

    <body>
      <p> Hello World! </p>
      {% webpush_button %}
    </body>

..

    **Note:** The Push Notification Button will show only if the user is
    logged in or any ``group`` named is passed through ``webpush``
    context

***If you would like to mark the subscription as a group, like all
person subscribe for push notification from the template should be
marked as group and would get same notification, you should pass a
``webpush`` context to the template through views. The ``webpush``
context should have a dictionary like ``{"group": group_name}``*** .
Like following

::

     webpush = {"group": group_name } # The group_name should be the name you would define.

    return render(request, 'template.html',  {"webpush":webpush})

..

    **Note:** If you dont pass ``group`` through the ``webpush``
    context, only logged in users can see the button for subscription
    and able to get notification.

--------------

Sending Web Push Notification
-----------------------------

A Web Push generally have a header and body. According to the W3C
Specification, the data should be encrypted in transmission. the data is
addressed as payload generally. Also a TTL header should be included
indicating how much time the web push server store the data if the user
is not online. So in order to send notification, see below.

-  If you would like to send notification to a specific group, do like
   following:

   ::

       from webpush import send_group_notification

       payload = {"head": "Welcome!", "body": "Hello World"}

       send_group_notification(group_name="my_group", payload=payload, ttl=1000)
       # All subscribe subscribe through "my_group" will get a web push notification. A ttl of 1000 is passed so the web push server will store the data maximum 1000 milliseconds if any user is not online

-  If you would like to send Notification to a specific user, do like
   following \``\` from webpush import send_user_notification

   payload = {“head”: “Welcome!”, “body”: “Hello World”}

   send_user_notification(user=user, payload=payload, ttl=1000) # Here
   in the user parameter, a user object should be passed # The user will
   get notification to all of his subscribed browser. A user can
   subscribe many browsers. \``\` **And the subscribers will get a
   notification like** |Web Push Notification|

License
=======

Copyright © 2016 by Safwan Rahman

This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 3 of the License, or (at your
option) any later version.

This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
Public License for more details.

You should have received a copy of the GNU General Public License along
with this program. If not, see http://www.gnu.org/licenses/.

.. |Web Push Notification| image:: http://i.imgur.com/VA6cxRc.png



