デバイスに対する通知を受信するには、次で説明しているデバイス登録構造を使用する前に、デバイスを登録しておく必要があります: 「プッシュ通知用のデバイス登録サービスを使用する方法」。
スマート デバイス アプリケーションでのプッシュ通知は、RemoteNotifications と呼ばれるスマートデバイス用の外部オブジェクトを使用して送信されます。
通知または通知のリストを送信する必要がある場合、Add メソッドと Send メソッドを併用できます。1
まず、RemoteNotification オブジェクトのリストを作成し、Add メソッドを使用して Notifications ローカル変数に追加する必要があります。その後、Send メソッドを使用して、通知を配信し、戻り値 (RemoteNotificationResult オブジェクトのコレクション) を確認します。
たとえば、次のコードセクションでは、Send メソッドで送信する通知のリストをロードし、その結果を検証します。
&ErrCode = &Notifications.OpenSession('SampleNotifications') //通知が有効な Dashboard または SDPanel の名前。
for each
&RemoteNotification = new()
&RemoteNotification.DeviceType = DeviceType
&RemoteNotification.DeviceToken = DeviceToken.Trim()
&RemoteNotification.Message = 'Remote Message'
&RemoteNotification.Badge = '1'
&Notifications.Add(&RemoteNotification)
endfor
&RemoteNotificationResult = &Notifications.Send()
for &i = 1 to &RemoteNotificationResult.Count
msg(&RemoteNotificationResult.Item(&i).ErrorDescription, status)
endfor
注: OpenSession および Send メソッドは、Notifications コレクションでデバイスをロードするループ外から (RemoteNotifications 外部オブジェクトに基づいて) 呼び出す必要があります。
ErrorCode |
ErrorDescription |
-1 |
不明なデバイスのタイプです |
0 |
Ok |
1 |
notifications.json が見つかりません |
2 |
無効なアプリケーション ID です |
多くの場合、アプリケーションを呼び出すためにプッシュ通知を送信するだけでは不十分であり、ユーザーは受信した通知を開いたときにアクションが実行されることを期待しています。
たとえば、Facebook アプリで Rachel の友達リクエストのプッシュ通知を受け取った場合、プッシュ通知を実行したときに、Facebook アプリが開くだけでは十分ではなく、Rachel の友達リクエストを承認または拒否するためのダイアログが開かれることが期待されます。
GeneXus でこれを行うために、以下の操作が必要です。
- 呼び出すイベント名 (および、そのパラメーター) を Notifications 変数で設定する。
- アプリケーションのメインオブジェクトでこのイベントを定義する。
これには、RemoteNotification SDT の Event ノードを使用します。
どのイベントをいつ実行する必要があるのか、必要に応じてパラメーターと値を含め、指定できます。
ドメインの定義
- EventExecution - 列挙型
- OnLauchByUser
イベントは、ユーザーが通知からアプリケーションを起動すると実行されます。
- OnNotificationArrive
iOS 7 以降でのみ使用可能 - iOS 6 以前の場合、この値は OnUserPress と同じように動作します。
この値では、アプリケーションが非アクティブであっても、通知がデバイスに届くと、イベントが実行されます。このオプションの特殊なケースでは、通知にメッセージ、バッジ、サウンドがない場合です。これはイベントを実行する通知で、ユーザーは検知しません。つまり、オフラインアプリケーションの場合に、デバイスの場所をリモートで取得するか、データの同期をトリガーします。このオプションは、「Silent Notification」とも呼ばれます。
- PushNotificationPriority - 列挙型
- High
- Normal
コード例
開発者は、登録されたすべてのデバイスに通知を送信するために、Web パネルで次のイベントを定義できます。
Event 'RemoteNotification'
&ErrCode = &Notifications.OpenSession('MySDMainObject')
For each
&RemoteNotification = new()
&RemoteNotification.DeviceType = DeviceType
&RemoteNotification.DeviceToken = DeviceToken.Trim()
&RemoteNotification.Message = "Look at this new product!"
&RemoteNotification.Event.Name = 'ViewProduct'
&RemoteNotification.Event.Execution = EventExecution.OnLauchByUser
&Parameter.Name = "Product"
&Parameter.Value = &ProductId.ToString()
&RemoteNotification.Event.Parameters.Add(&Parameter)
&Notifications.Add(&RemoteNotification)
Endfor
&RemoteNotificationResult = &Notifications.Send()
for &i = 1 to &RemoteNotificationResult.Count
msg(&RemoteNotificationResult.Item(&i).ErrorDescription)
endfor
Endevent
この例では、&Parameter 変数は RemoteNotification.Event.Parameter SDT に基づいています。
通知を送信するもう 1 つの方法としては、Call メソッドまたは CallActions メソッドを使用します (一括送信ではパフォーマンスが低下するため、代わりに Send メソッドを使用してください)。
Event 'RemoteNotificationCall'
For each
&RemoteNotification.Call('MySDMainObject',DeviceType,DeviceToken,"Look at this new product!")
Endfor
Endevent
Event 'RemoteNotificationCallActions'
For each
&RemoteNotification.CallActions('MySDMainObject',DeviceType,DeviceToken,"Look at this new product!",&NotificationParameters)
Endfor
Endevent
ここで、&NotificationParameters 変数は NotificationParameters 外部オブジェクトに基づいています。
ユーザーが通知メッセージをタップしたときに、あらかじめ定義しておいたイベントを実行するには、メインオブジェクトのアプリケーションでそのイベントを設定しておく必要があります。
RemoteNotifications SDT 変数の [ イベント名 ] フィールドの名前で、新しいアクションを定義します。
イベントがパラメーターを受け取る場合は、RemoteNotification SDT 変数の [ パラメーター名 ] フィールドの名前で変数を定義する必要があります。
コード例
前の例を使いますが、今回は次のようにイベントを定義します。
Event 'ViewProduct'
Composite
&ProductId = &Product.Trim().ToNumeric()
WorkWithDevicesProduct.Product.Detail(&ProductId)
Endcomposite
Endevent
まず、Notifications ノードを追加します。
[ Notifications ] ノードにアクションを追加します。
これにより、ダッシュボードに表示されないアクションが追加されますが、RemoteNotification SDT の [ イベント名 ] フィールドにアクション名を設定すると、プッシュ通知から呼び出すことができます。
このアクションのイベントは、デバイス上でプッシュ通知が呼び出されると実行されます。
プッシュ通知を送信する場合のもう 1 つのオプションは、アプリケーションアイコンに数字を表示することです。バッジは、アプリケーションのホーム画面アイコンに表示される赤い円で囲まれた数字です。バッジは、アプリケーション内の未読または未応答のコンテンツ (たとえば、未読のメッセージやトップニュース、またはアプリケーション内部でアクションを待機中のものなど) の数を示すために使用されます。
このシナリオでは、RemoteNotification SDT の [ Badge ] フィールドでユーザーに示す値を設定し、その通知を送信する必要があります。
なお、サーバー側で送信された通知の数を計算し、各デバイスに送信された通知の数を追跡する必要があります。
また、この数字をリセットする必要がある場合は、空のバッジでプッシュ通知を送信します。
注: バッジは iOS アプリケーションにのみ存在します。
- 警告: メインアプリケーションで OnNotificationArrive モードを使用して定義されたイベントには、UI を含むコマンド、関数、またはコントロール (msg、confirm など) を追加できません。このような通知は、デバイスがロックされている場合、アプリケーションがバックグラウンドで実行されている場合、およびアプリケーションが実行されていない場合でも到達できます。アプリケーションがフォアグラウンドで実行されている場合でも可能です (開発者が [ Interop.ApplicationState ] プロパティを使用して確認する必要があります)。
1 通知外部オブジェクトの Add、Send、および SetConfiguration メソッドは、GeneXus X Evolution 3 以降の .NET でのみ利用できます。
|