Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

      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 アプリに対するプッシュ通知の権限をもとに以下の列挙値を返します。

...

      #PushNotificationFeatureStatus := #PushManager.FeatureStatus   
#PushNotificationPermissionsStatus := #PushManager.PermissionStatus
機能のステータス (FeatureStatus)

FeatureStatus は Web アプリケーションのサービスワーカーとプッシュ通知の受信時ステータスをもとに、以下の列挙値を返します。

...

Failed - プッシュ通知サブスクリプションの作成時にエラーが発生しました。

       #PushNotificationFeatureStatus := #PushManager.FeatureStatus   
#PushNotificationPermissionsStatus := #PushManager.PermissionStatus
サブスクリプション登録 (Subscription)

ユーザーのサブスクリプションへの参照を返します。詳細については、プッシュ・マネージャの Subscription を参照してください。

通知履歴 (NotificationHistiory)

これまでに受信したプッシュ通知およびそのコンテンツの値が含まれる反復子を返します。この値は バッジ、本文、アイコン、イメージ、タグ、タイムスタンプ、タイトル、URL になります。

プッシュ・マネージャのサブスクリプション

プッシュ・マネージャの Subscription には、ユーザーのサブスクリプション詳細として次の 2 つ (SubscriptionObject と Endpoint) のプロパティが含まれます。

プロパティ

SubscriptionObject

SubscriptionObject は、ユーザーのサブスクリプション詳細を返すエンコードされた文字列です。プッシュ通知を送信するためにこの値を設定する場合、この SubscriptionObject は変更できません。

SubscriptionEndpoint

SubscriptionEndpoint は一意の URL で、ユーザー・エージェントを指し示した後、サービスワーカーに通知を転送します。

プッシュ通知の送信

PRIM_SRVM.HttpPushMessage

プッシュ通知の生成、暗号化、送信を管理します。
Define_Com Class(#Prim_srvm.HttpPushMessage) Name(#Push)

プロパティ

ClaimsSubject

JWT クレームで使用する、アプリケーションのアドミニストレータの電子メール・アドレスを指定します。個人の電子メール・アドレスではなく、グループの電子メール・アドレスの使用が推奨されています。

ClaimsTokenTimespan

JWT クレームが有効な時間を秒で指定します。値は 1 から 86,400 の間でなければいけません。

HttpResponse

PushSend メソッドからの HTTP 応答を返します。

PushMessageBadgeUrl

プッシュ通知のバッジとして使用するイメージを指定します。このバッジは通知内容を表示するスペースが十分ではない場合 (スマートフォンの通知センターなど) に表示されます。

PushMessageBody

表示するメッセージ本文の内容を指定します。

PushMessageDirection

列挙値の方向を指定します。値の意味は以下の通りです。
Auto – テキストの方向は使用している ISO 言語により決定されます。
RightToLeft – テキストは右から左に表示されます。
LeftToRight – テキストは左から右に表示されます。

PushMessageIconUrl

プッシュ通知のアイコンとして使用するイメージを指定します。

PushMessageImageUrl

PushMessageIconUrl はプッシュ通知のイメージとして使用するイメージを指定します。すべてのブラウザでサポートされるわけではありません。

PushMessageLang

ISO 形式のプッシュ通知コンテンツの ISO 言語を指定します。

PushMessageRenotify

ユーザーが通知を再度受信するかどうかを指定します。

PushMessageRequireAction

メッセージをユーザーが操作するまで画面に残すか、数秒間表示するのかを指定します。

PushMessageTag

メッセージの識別子を指定します。

PushMessageTimestamp

プッシュ・メッセージに設定するタイムスタンプを指定します。

PushMessageTitle

通知に表示するタイトルを指定します。

PushMessageUrl

通知のクリック時にナビゲートする URL を指定します。この URL は相対パスでも絶対パスでも構いませんが、Web アプリケーションに存在するものでなければいけません。URL が指定されていない場合は、デフォルトではアプリケーションのルート URL にナビゲートされます。

SubscriptionObject

プッシュ通知のユーザー・サブスクリプション登録から返されるエンコードされたサブスクリプション文字列を指定します。

TimeToLive

プッシュメッセージが送信されてから、プッシュ通知がエンドユーザーに表示されるまでの遅延時間を秒単位で指定します。

Urgency

メッセージの優先順位を指定します。非アクティブのユーザーがオンライン状態になった場合、通知はその優先順位と送信された時間の順に表示されます。

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 に適用した例です。