Pythonを使用してWebアプリに通知を送信する方法

ネイティブアプリは最近非常に人気があります。これは主に、オフラインでの作業、移行、簡単な配布、そしてもちろんプッシュ通知などの機能が原因です。ただし、残念ながら、価値のあるネイティブアプリを作成するには、JavaやSwiftなどの言語に関する十分な知識が必要です。

プログレッシブウェブアプリ

プログレッシブウェブアプリ(PWA)は、ブラウザーで実行されるJavaScriptアプリケーションです。彼らは、ネイティブアプリの機能の一部をWebに導入するよう努めています。HTML、CSS、特にJavaScriptの基本的な知識があれば、PWAは簡単に開発できます。さらに、Webサイト上のデスクトップデバイスからサービスに既にアクセスできる場合は、ネイティブモバイルアプリを開発するよりも、Webアプリの機能を追加する方が簡単です。

通知

通知により、ユーザーは新しいメッセージについて通知されたり、新しいブログ投稿について通知されたりします。

多くのネイティブアプリは、ユーザーにプッシュ通知を送信します。ただし、これはPWAとNotificationsAPIを使用して行うこともできます。

OneSignal

このチュートリアルでは、OneSingalを使用してWebアプリに通知を送信します。OneSignalは、通知をプッシュするためのシンプルなインターフェイスを提供する強力なツールです。また、通知の送信に使用するRestAPIも提供します。

OneSignalを設定する

プッシュ通知を送信するには、最初にOneSignalを設定する必要があります。そのため、OneSignalのアカウントが必要です。彼らのウェブサイトに行き、右上隅にある「ログイン」を押してください。

次に、アプリを作成する必要があります。名前を付けて、「セットアッププラットフォーム」を選択します。ここでは、「すべてのブラウザ」を選択します。その後、統合として「カスタムコード」を選択します。それからあなたはあなたのウェブサイトについてのいくつかの情報を提供しなければなりません。

アプリの設定領域には、「キーとID」というタブがあります。後で使用するために両方のキーをコピーします。

重要:RESTAPIキーを共有しないでください。プライベートにしてください!

OneSignalの設定は以上です。簡単でした!

私たちのウェブサイトをセットアップする

次のパートでは、通知機能をWebサイトに追加します。Webサイトは、OneSignalから送信される通知を待って、ユーザーに表示する必要があります。

プログレッシブWebアプリを作成していることをブラウザーに通知するために、manifest.jsonというファイルをプロジェクトのルートに追加します。

{ "name": "My Application", "short_name": "Application", "start_url": ".", "display": "standalone", "background_color" : "#fff" , "description": "We send notifications to you", "gcm_sender_id": "482941778795", "gcm_sender_id_comment": "Do not change the GCM Sender ID"}

最初の6つのキーと値のペアは、アプリケーションの外観を表します。gcm_send_idは、通知を送信するために重要です。マニフェスト.jsonについて詳しく知りたい場合は、Mozillaのドキュメントをご覧ください。

ブラウザはマニフェストを自動的に検索しません。 lt; h e ad>タグ内のすべてのHTMLドキュメントに、そのパスを配置する必要があります。

 ...  ...

さらに、WebサイトをOneSignalに接続するためのJavaScriptコードが必要です。

そのためのコードは、 lt; h e ad>部分のスクリプトタグに入れることができます。再することを忘れてはいけない場所my-独自のOneSignalアプリケーションIDとアプリIDを。

   var OneSignal = window.OneSignal || []; OneSignal.push(function () { OneSignal.init({ appId: "my-app-id", autoRegister: false, notifyButton: { enable: true, }, }); }); 

通知をサブスクライブするようにユーザーに促す場合は、このコードを実行します。

OneSignal.push(function () { OneSignal.showHttpPrompt();});

さらに、通知をバックグラウンドでリッスンするサービスワーカーが必要です。したがって、プロジェクトのルートディレクトリに2つのファイルが必要です。

OneSignalSDKUpdaterWorker.js

importScripts('//cdn.onesignal.com/sdks/OneSignalSDKWorker.js');

OneSignalSDKWorker.js

importScripts('//cdn.onesignal.com/sdks/OneSignalSDKWorker.js');

Pythonを使用してAPIにアクセスする

OneSignalには使いやすいRestAPIがあります。エンドポイントは、OneSignal開発者向けドキュメントに記載されています。

アクセスするには、HTTPリクエストを送信する必要があります。したがって、requestsというライブラリを使用します。これをインストールするには、Pythonのパッケージマネージャーであるpipを使用できます。

pip install requests

これは、通知を送信するために必要なAPIエンドポイントです://onesignal.com/api/v1/notifications。

The HTTP protocol has several methods. In this case, we want to make a POST request. To do so, we need to import requests and execute a function.

import requests
requests.post("//onesignal.com/api/v1/notifications")

OneSignal wants to verify that only you can send notifications to your website. So you have to add an HTTP header with your Rest API Key from OneSignal.

requests.post( "//onesignal.com/api/v1/notifications", headers={"Authorization": "Basic my-rest-api-key"})

Remember to replace my-rest-api-key with your Rest API Key.

Moreover, you need some basic information about your notification.

data = { "app_id": "my-app-id", "included_segments": ["All"], "contents": {"en": "Hello"}}
requests.post( "//onesignal.com/api/v1/notifications", headers={"Authorization": "Basic my-rest-api-key"}, json=data)

Replace my-app-id with your own app id. Next you choose who will receive your notifications. Example values are "All", "Active Users", "Inactive Users”. But you can also create your own segments. And for the last one, you add some content of the message in English. If you need another language, you can add it here too.

That’s it! If you subscribed to the notifications, you should get a push notification.

Send notifications using an API Wrapper

Because my code became kind of messy with many different notifications, I created an API wrapper for OneSignal.

API Wrapper

But what is an API wrapper? An API wrapper makes it easier for you to access an API. You can say that it is an API for an API. You call the API wrapper instead of the API directly.

You can install the wrapper called OneSignal-Notifications from pip.

pip install onesignal-notifications

Now you can import it and setup your client.

from onesignal import OneSignal, SegmentNotificationclient = OneSignal("MY_APP_ID", "MY_REST_API_KEY")

To send a Notification, you have to initialize the class SegmentNotificationand use the method send.

notification_to_all_users = SegmentNotification( { "en": "Hello from OneSignal-Notifications" }, included_segments=SegmentNotification.ALL)client.send(notification_to_all_users)

Maybe this looks kind of unnecessary to you, because it takes even more lines of code. But if you have several notifications, it makes the process much easier and your code more beautiful.

For example if you want to send a notification, which is based on some conditions, the API wrapper has a custom class for that.

from onesignal import OneSignal, FilterNotification, Filterclient = OneSignal("MY_APP_ID", "MY_REST_API_KEY")
filter_notification = FilterNotification( { "en": "Hello from OneSignal-Notifications" }, filters=[ Filter.Tag("my_key", "", "5"), "OR", Filter.LastSession(">", "1"), ])

There are many custom parameters you can provide to adapt your notification. For example, you can add buttons to the notification. All list of all parameters can be found here.

from onesignal import OneSignal, FilterNotification, Filterclient = OneSignal("MY_APP_ID", "MY_REST_API_KEY")
filter_notification = SegmentNotification( { "en": "Hello from OneSignal-Notifications" }, web_buttons=[ { "id": "like-button", "text": "Like", "icon": "//i.imgur.com/N8SN8ZS.png", "url": "//github.com/Lanseuo/onesignal-notifications"} ], included_segments=SegmentNotification.ALL)

If you want to find out more about OneSignal-Notifications, you can have a look in the GitHub Repository or in the docs.