Page History
コンテンツリストを表示
現在地:
...
ユーザーのサブスクリプション登録
Vapid 公開鍵の取得
PRIM_CAP.PrivateKey.VapidPublicKey
Vapid 公開鍵は、PRIM_CAP.PrivateKey を使ってprime256v1 EC プライベート・キーの PEM ファイルをロードすることで取得できます。ロードが終わると、Vapid 公開鍵が取得でき、この公開鍵が Web アプリケーションに渡すエンコーディングされた文字列を返します。
Mthroutine Name(GetVapidKey)
Define_Map For(*RESULT) Class(#Prim_dc.UnicodeString) Name(#result)
#xPushManagerPrivateKeyPath := *TEMP_DIR + 'PrivateKeys' + *PATHDELIM + 'ECPrivatekey.pem'
If (#PrivateKey.LoadPemFile( #xPushManagerPrivateKeyPath ))
#result := #PrivateKey.VapidPublicKey
Endif
Endroutine
プッシュ・マネージャ
プッシュ・マネージャは Web コンポーネント内で定義され、プロパティ、メソッド、イベントにアクセスして、ユーザーのプッシュ通知を管理します。
Define_Com Class(#PRIM_WEB.PushManager) Name(#PushManager)
メソッド
Query
Query はフィールド・サービスワーカーに問い合わせて、ユーザーのプッシュ通知の権限ステータス、プッシュ通知の機能ステータス、ユーザーのサブスクリプションの参照、通知履歴(ブラウザでそれまでにユーザーが受信したメッセージのリスト)を検出します。この処理によって changes イベントが起動し、適切なプロパティが収集されます。
Mthroutine Name(CheckSubscription)
#PushManager.Query
...
Endroutine
Subscribe
プッシュ通知を受信するためのユーザーのサブスクリプション登録を行います。サービスワーカーでサブスクリプション登録が完了すると、プッシュ・マネージャの changed イベントが起動します。
Evtroutine Handling(#ButtonSubscribe.Click)
#Subscribing := True
#PushManager.Subscribe( #xPushManagerVapidPublicKey )
Endroutine
Unsubscribe
ユーザーのプッシュ通知受信を停止します。サービスワーカーでサブスクリプション解除が完了すると、プッシュ・マネージャの changed イベントが起動します。
Evtroutine Handling(#ButtonUnsubscribe.Click) #UnSubscribing := True #PushManager.Unsubscribe Endroutine
イベント
Changed
changed イベントが起動するのは、プッシュ通知のステータスが変更された、またはサブスクリプションの詳細すべてを受信したことを示すためです。つまり、サービスワーカーから取り出されたプロパティは最新であるということです。
Evtroutine Handling(#PushManager.Changed)
#xPushManagerFeatureStatus := #PushManager.FeatureStatus
#xPushManagerPermissionsStatus := #PushManager.PermissionStatus
#xPushSubscriptionObject #xPushSubscriptionEndpoint := ""
If ((#xPushManagerFeatureStatus = 'Subscribed') *And (#xPushManagerPermissionsStatus = 'Granted'))
#xPushSubscriptionObject := #PushManager.Subscription.SubscriptionObject
#xPushSubscriptionEndpoint := #PushManager.Subscription.Endpoint
#ButtonSubscribe.Enabled := False
#ButtonUnsubscribe.Enabled := true
If (#Subscribing)
#com_self.SendSusbscription
#Subscribing := False
Endif
...
Else
If (#UnSubscribing)
#com_self.UnsubscribeUser
#UnSubscribing := False
Endif
#ButtonSubscribe.Enabled := (#PushManager.FeatureStatus<>Unsupported) *And
(#PushManager.FeatureStatus<>Failed) *And (#PushManager.PermissionStatus<>Denied)
#ButtonUnsubscribe.Enabled := False
Endif
...
Endroutine
プロパティ
権限のステータス (PermissionStatus)
該当の Web アプリに対するプッシュ通知の権限をもとに以下の列挙値を返します。
Unknown – 通知の権限が取得されていない、もしくは取得できませんでした。
Granted – ユーザーはプッシュ通知を受信する権限が付与されました。
Denied - ユーザーはこのアプリケーションからのプッシュ通知の受信要求が拒否されました。
Prompt - ユーザーが権限を許可する必要があります。
Failed - 通知ステータスの取得に失敗しました。
...
#PushNotificationFeatureStatus := #PushManager.FeatureStatus
#PushNotificationPermissionsStatus := #PushManager.
...
PermissionStatus 機能のステータス (FeatureStatus)
FeatureStatus は Web アプリケーションのサービスワーカーとプッシュ通知の受信時ステータスをもとに、以下の列挙値を返します。
Unsupported - ユーザーが使用しているブラウザがプッシュ通知をサポートしていないか Web アプリケーションが PWA をサポートしていません。もしくはその両方です。
NotSubscribed – アプリケーションは通知をサポートしていますが、ユーザーのサブスクリプション登録がまだ行われていません。
Subscribed - ユーザーはプッシュ通知を受信するためのサブスクリプションが登録されています。
Pending - サービスワーカーがまだサブスクリプション登録を処理しています。
Failed - プッシュ通知サブスクリプションの作成時にエラーが発生しました。
...
#PushNotificationFeatureStatus := #PushManager.FeatureStatus
#PushNotificationPermissionsStatus := #PushManager.
...
PermissionStatus サブスクリプション登録 (Subscription)
ユーザーのサブスクリプションへの参照を返します。詳細については、プッシュ・マネージャの Subscription を参照してください。
通知履歴
これまでに受信したプッシュ通知およびそのコンテンツの値が含まれる反復子を返します。この値は バッジ、本文、アイコン、イメージ、タグ、タイムスタンプ、タイトル、URL になります。
プッシュ・マネージャのサブスクリプション
プッシュ・マネージャの Subscription には、ユーザーのサブスクリプション詳細として次の 2 つ (SubscriptionObject と Endpoint) のプロパティが含まれます。
プロパティ
SubscriptionObject
SubscriptionObject は、ユーザーのサブスクリプション詳細を返すエンコードされた文字列です。プッシュ通知を送信するためにこの値を設定する場合、この SubscriptionObject は変更できません。
SubscriptionEndpoint
SubscriptionEndpoint は一意の URL で、ユーザー・エージェントを指し示した後、サービスワーカーに通知を転送します。
プッシュ通知の送信
PRIM_SRVM.HttpPushMessage
プッシュ通知の生成、暗号化、送信を管理します。
Define_Com Class(#Prim_srvm.HttpPushMessage) Name(#Push)
プロパティ
ClaimsSubject
JWT クレームで使用する、アプリケーションのアドミニストレータの電子メール・アドレスを指定します。個人の電子メール・アドレスではなく、グループの電子メール・アドレスの使用が推奨されています。
...
ValidationMessage
プッシュ通知の検証でエラーになった場合、エラーの詳細とともに値を返します。
メソッド
SendPush
プロパティを使用してプッシュ通知を構築し、暗号化したものを HTTP 経由で送信します。この処理には入力パラメータとして、Vapid 公開鍵の作成に使用するプライベートキーが必要です。
通知の送信前に設定する必要がある必須プロパティもあります。この必須プロパティは以下の通りです。
SubscriptionObject、ClaimsSubject、ClaimsExpiry、PushMessageTitle
Mthroutine Name(Send) Define_Map For(*INPUT) Class(#xPushManagerSubscriptionStatus) Name(#iStatus) Mandatory(*SQLNULL) Define_Com Class(#prim_Capi.PrivateKey) Name(#PushPrivateKey) If (#PushPrivateKey.LoadPemFile( #COM_SELF.GetPrivateKeyPath )) #Push.PushMessageBadgeUrl := #xPushMessageBadge #Push.PushMessageBody := #xPushMessageBody #Push.PushMessageDirection := #xPushMessageDirection #Push.PushMessageIconUrl := #xPushMessageIcon #Push.PushMessageImageUrl := #xPushMessageImage #Push.PushMessageLang := #xPushMessageLanguage #Push.PushMessageRenotify := #xPushMessageRenotify #Push.PushMessageRequireAction := #xPushMessageRequireAction #Push.PushMessageTag := #xPushMessageTag #Push.PushMessageTimestamp := #xPushMessageTimestamp #Push.PushMessageTitle := #xPushMessageTitle #Push.PushMessageUrl := #xPushMessageData #Push.ClaimsTokenTimespan := #xPushMessageClaimsExpiry #Push.ClaimsSubject := #xPushMessageClaimsSubj#Push.TimeToLive := #xPushMessageTimeToLive Select Fields(#xPushSubscriptionObject) From_File(xPushSubscriptions) #Push.SubscriptionObject := #xPushSubscriptionObject If (#Push.SendPush( #PushPrivateKey )) #PushNotificationHttpIsSuccessfulRequest := #Push.HttpResponse.IsSuccessfulRequest #PushNotificationHttpResponseCode := #Push.HttpResponse.HttpStatusCode If (#PushNotificationHttpIsSuccessfulRequest.not) #PushNotificationHttpErrorCode := #Push.HttpResponse.ErrorCode #PushNotificationHttpErrorMessage := #Push.HttpResponse.ErrorMessage Endif Else #PushNotificationHttpErrorMessage := #Push.ValidationMessage Endif Endselect Endif Endroutine
以下はこれらの機能を PWA に適用した例です。
コンテンツリストを表示
