0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

contentfulの記事が公開される時にPush通知を行う

Last updated at Posted at 2021-10-28

今回はReact、ContentfulとOneSignalでPush通知を実装していきたいと思います。Next.jsを使用している方もこの記事の手順に従うことでできます。

※ 残念ながら、iOSのデバイスでは機能しませんが、iOS以外のデバイスは機能します。

前提条件

  • ReactやNext ウエブアプリ
  • Contentfulアカウント
  • 少なくとも1つのContentfulコンテンツモデル

OneSignalの設定

OneSignalのホームページで無料アカウントを作りましょう。アカウントを作った後、アカウントのホームで「New App/Website」のボタンをクリックします。画像の画面が見なければ、ヘッダーの左上にあるOneSignalのロゴをクリックしてください。
start.png

「Name of your app or website」の枠でアプリやウェブサイトの名前を入力します。今回はReactウェブサイトでOneSignalを使いますから、真ん中の「Web」を選びます。 終わったら下の青いボタンをクリックします。
new app.png

次の画面で、一番左の「Typical Site」をクリックします。
その下「Site Setup」」で、ウエブサイトの名前とURLを入力します。
注意: 選択したURLからのみpush配信できます。
テストをするために今回localhostにします。
localhostを使う時に「local testing」をオンする必要があります。
良ければ、アイコンのアップロードもできます。
web configuration.png

下の「Permission Prompt Setup」で「edit」」をクリックします。
edit welcome.png
「Permission Prompt Editor」の画面で「Customize slide prompt text」をオンにします。メッセージとボタンのテキストをカスタマイズします。
「And」の枠の「10」を[3]にします。そうすると、ウェブサイトは3秒後に新しいユーザーの許可を求めます。通常、直ぐにユーザーの許可を求めることは余り良くないですが、テストの環境では速く機能するかどうかを確認したいです。 終わったら、下の「Done」ボタンをクリックします。最後に下の「Save」をクリックします。
Capture d’écran (39).png

次の画面で「DOWNLOAD ONESIGNAL SDK FILES」をクリックして、「Finnish」だけをクリックします。

コーディングを始める前、APIキーが必要です。OneSignalのユーザーホームから、登録したウェブサイトの名前にクリックします。ヘッダーにある「settings」---> 「Keys & IDs」をクリックします。 後で使用するためにOneSignal App IDとRest API Keyを保存します。

クライアント側(React)

react-onesignalをインストールします。npm yarn
App.js/App.tsxでonesignalを以下のように初期化します。Next.jsなら_app.js/_app.tsxでやります。 NEXT_PUBLIC_ONESIGNAL_API_KEYを.envファイルに追加します。

App.js
import OneSignal from "react-onesignal";
//...
  useEffect(() => {
    OneSignal.init({ appId: process.env.NEXT_PUBLIC_ONESIGNAL_API_KEY });
  }, []);
//...

先にダウンロードしたOneSignalのzipフォルダーの中の「OneSignal-Web-SDK-HTTPS-Integration-Files」というフォルダーの中で二つのjavascriptファイルがあります。この二つのファイルをReactやNextプロジェクトのpublicフォルダーにペーストします。

これで、locahostで機能していることを確認できます。localhostを開く3秒後、許可を求めるメッセージが表示されます。

ContentulのWebhookはlocalhostで使えないので、deployしなければなりません。では、好きなホスティングにdeployします。deployが終わったらOneSignalの設定で、URLをlocalhostから、deployのURLに変えます。「LOCAL TESTING」もオフにします。
そのURLに行って、push配信の許可を与えます。

Contentful Webhook

これからContentfulのwebhookを設定していきます。

ContentfulのダッシュボードからSettings--->Webhooksをクリックします。
Capture d’écran (41).png

好きなWebhookの名前を入力して、URLのタイプをPOSTして、URLをhttps://onesignal.com/api/v1/notificationsにします。 記事が公開される時にpush配信したいので「Content Event」」で Entry/Publishにします。
Capture d’écran (43).png

次はHeadersを入力します。 KeyはAuthorization、バリューはあなたのOneSignal REST API Keyです。Content-typeをapplication/jsonにします。
Capture d’écran (44).png

「Add Webhook」のボタンをクリックします。
Capture d’écran (42).png

「Payload」」で「Customize the webhook payload」をクリックします。
枠で以下のJSONを書きます。「app_id」」はあなたのOneSignal App ID. メッセージと見出しもカスタマイズできます。「web_url」はユーザーがクリックしたらその URLに飛びます。

「included_segments」はあなたのすべてのサブスクライバーを含むグループ。OneSignalのグループを詳しく見るにはこちらです。(英語です)

「ja」は日本語のブラウザ限定ですが、「en」は英語だけでなくあらゆる言語のブラウザが対象です。

{
  "included_segments": [
    "Subscribed Users"
  ],
  "app_id": "00000000-0000-0000-0000-000000000000",
  "contents": {
    "ja": "メッセージ",
    "en": "message"
  },
  "headings": {
    "en": "Heading",
    "ja": "見出し"
  },
  "web_url": "https://qiita.com/Code-Kat"
}

終わったら「Save」」をクリックします。

これで終わりました! これをテストするために、新しいContentfulのエントリーを作成しましょう。公開するとpush通知が表示されれば、完成です。!

何かの問題が発生した場合は、コメントを書いてくれれば、私が一緒に解決策を考えます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?