Oracle® Fusion Middleware Oracle User Messaging Serviceの管理 12c (12.2.1.3.0) E90140-01 |
|
前 |
次 |
この章では、Oracle User Messaging Service (UMS)ドライバの用途、機能および制限事項について説明します。次のUMSドライバについて説明します。
UMSドライバには、電子メール・サーバーやショート・メッセージ・サービス・センター(SMSC)など、様々なメッセージング・ゲートウェイにUMSを接続するためのプロトコル固有の実装が含まれています。ドライバは、特定のインストールでメッセージング・チャネルの可用性に応じて、個別にデプロイまたはアンデプロイできます。
電子メール・ドライバは、メッセージを送受信します。すべての関連する電子メール・プロトコル(電子メールの送信にはSMTP、電子メールの受信にはIMAPおよびPOP3)がサポートされ、あらゆる標準メール・サーバーと通信できます。セキュリティ・プロトコルのTLSまたはSSLを有効にして電子メールのコンテンツを通信時に保護するためのサポートが実装されています。電子メール・ドライバでは、必要なプロトコルおよびクライアントを実装する標準のJavaコンポーネントであるJavaMail v1.4を使用して、電子メールの作成、アクセス、送受信を実行します。
電子メール・ドライバでは、マルチスレッド設計を使用して複数のメール・ボックスを(IMAPまたはPOP3プロトコルで)ポーリングできます。ポーリングするメール・ボックスが1つしかない場合、この設計のため、そのメール・ボックスで機能するスレッドが1つのみになるという制限事項が1つあります。
注意: POP3は非推奨となったプロトコルであり、使用しないようにしてください。 |
電子メール・ドライバは、POP3、IMAP4およびSMTPの各プロトコルと互換性があります。表3-1に、電子メール・ドライバのゲートウェイ・ベンダーとそのバージョンを示します。
表3-1 電子メール・ドライバのゲートウェイ・ベンダーとバージョン
ベンダー | バージョン |
---|---|
Oracle Beehive |
リリース1 (1.4.3) |
Oracle Collaboration Suite |
10gリリース1 (10.1.2) |
Microsoft Exchange |
2003 |
Dovecot (IMAP4/POP3) |
0.99.11 |
sendmail (SMTP) |
8.13.1 |
UMSメッセージのAPI優先度レベルは、次のように電子メール・メッセージ・ヘッダーのX-Priorityに変換されます。
MessagePriorityType.LOWEST => header value "5" MessagePriorityType.LOW => header value "4" MessagePriorityType.NORMAL => header value "3" MessagePriorityType.HIGH => header value "2" MessagePriorityType.HIGHEST => header value "1"
電子メール・ドライバでは、ヘッダー、コンテンツ・タイプと文字セット・エンコーディング、MIMEマルチパートと本文パートを含め、UMSメッセージから電子メール・メッセージへ(およびその逆)の変換を処理します。着信メッセージの場合、UMSメッセージの受信者はそのメールを受信した電子メール・ボックスの電子メール・アドレスです。受信者が電子メールの宛先、CCまたはBCCのフィールドに入っていたかどうかは、Addressメタデータを見るとわかります。
アウトバウンド電子メールが配信できない場合、受信者のメール・サーバーで配信状態通知(DSN)を作成し、送信者の電子メール・アドレスに返信することができます。電子メール・ドライバでは、受信したDSNとDSNで参照しているアウトバウンド電子メールと照合し、そのアウトバウンド・メッセージの"配信失敗"ステータスを作成しようとします。このような場合、配信成功ステータスがしばらくすると配信失敗ステータスに変ることがあります。
ショート・メッセージ・ピアツーピア(SMPP)プロトコルは、ショート・メッセージ・サービス・センター(SMS-C)、外部ショート・メッセージング・エンティティ(ESME)などのSMSピア・エンティティ間でSMSメッセージを交換するためのTCP/IPベースの業界プロトコルです。UMS SMPPドライバは、ESMEとして実装されます。SMPPプロトコルv3.4に基づいています。
送信機能が有効な場合、SMPPドライバは送信用の送信側システムとしてSMS-CへのTCP接続を1つ開きます。ドライバの受信機能が有効な場合は、受信用の受信ドライバとしてSMS-Cに別の接続を開きます。ドライバとSMS-C間のすべての通信に必要なのは、2つのTCP接続(両方ともドライバが開始する)のみです。
送信テキスト・メッセージは、UMSメッセージの件名とコンテンツを連結したものです。着信SMSのコンテンツは、UMSメッセージのコンテンツに挿入されます。UMSメッセージの件名は空になります。
UMSメッセージのAPI優先度レベルは、次のようにSMPPの優先度に変換されます。
MessagePriorityType.LOWEST、MessagePriorityType.LOW、MessagePriorityType.NORMAL => SMPPの優先度: 0
MessagePriorityType.HIGH => SMPPの優先度: 1
MessagePriorityType.HIGHEST => SMPPの優先度: 2
ただし、SMPPの優先度は、SMPPドライバの構成パラメータ"PriorityAllowed"によって制限されることがあります。
SMPPドライバは、UMS API MessageInfoの"有効期限"データを受け入れ、メッセージとともにその情報をSMS-Cに渡します。
XMPPドライバは、Extensible Messaging and Presence Protocol (XMPP)を介したリアルタイムIMの場合に、Oracle Fusion Middlewareからエンド・ユーザーへの一方向または双方向のアクセスを提供します。このドライバを使用すると、エンド・ユーザーは、選択したIMクライアントを介して、アラート通知を受信したり、複数のアプリケーションと相互にチャットすることができます。
XMPPは、IM用のオープンXMLベースのプロトコルで、クライアント/サーバー・アーキテクチャで構成されており、ユビキタス電子メール・ネットワークに似ています。受信者は、[username]@domain[/resource]形式のXMPP ID (またはJabber ID (JID))によってアドレス指定されます。UMSでXMPPドライバを使用するには、Jabber/XMPPサーバーへのアクセス権と、ログインに使用するUMS XMPPドライバ・インスタンスのXMPPアカウントが必要です。
XMPPのエンド・ユーザーは、XMPPクライアントを使用してXMPPサーバーに接続して、インスタント・メッセージを他のXMPPユーザーに送信します。ただし、XMPPはIMに利用できる唯一のプロトコル・ネットワークではありません。XMPPには、拡張可能なモジュール型アーキテクチャがあります。これは固有のIMネットワークに統合され、XMPPユーザーは他のネットワーク上のユーザーと通信できるようになります。
XMPPサーバーでは複数のドライバ(つまりクライアント)を使用して同じアカウントにアクセスできないため、XMPPドライバは複数のサーバーにスケール・アウトできません。2つ目のドライバがログインすると、XMPPサーバーでは最初のドライバが切断されます。しばらくして最初のドライバが再接続し、2番目のドライバが切断される、というようになります。この設定では、送信メッセージは、メッセージを処理するドライバがその特定の瞬間に接続している場合のみ機能します。
XMPPサーバーに対する接続問題がある場合、XMPPドライバは、リモート・サーバーに再接続しようとし続けますが、緊密なループを回避するために遅延が大きくなります。
拡張ドライバは、UMSで定義されたNotification WebServicesインタフェースを実装する構成済エンドポイントURLにメッセージを送信します。メッセージング・ゲートウェイ(ゲートウェイに対するアダプタ)ではこのWebサービスを実装できるため、UMSで変更しなくてもUMSが拡張されます。
また、拡張ドライバでは、Oracleのワークフローおよびコラボレーション製品の1つであるATKポップアップ・サービスなどのADFビジネス・コンポーネントのWebアプリケーションへのメッセージ送信がサポートされています。実行時に、拡張ドライバでは、構成済エンドポイントURLがNotification WebServiceであるかATKポップアップ・サービスであるかを検出し、それに応じて動作します。
拡張ドライバは、送信メッセージに対してのみ使用されます。
ドライバは、WebServicesコール経由で外部システムと通信し、エンドポイントURLのホスト部分は仮想IPです。つまり、外部システムはロード・バランサの背後にあります。
UMSメッセージのコンテンツは、バイナリではなく、テキストにする必要があります。拡張ドライバを使用してUMSで新しいプロトコルを有効にするには、次のタスクを実行します。
MessagingNotifyService
WSDL (umsnotify.wsdl
)を基に、Webサービス・リスナー・エンドポイントを実装およびデプロイします。
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://xmlns.oracle.com/ucs/messaging/extension" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="MessagingNotifyService" targetNamespace="http://xmlns.oracle.com/ucs/messaging/extension"> <wsdl:types> <xsd:schema targetNamespace="http://xmlns.oracle.com/ucs/messaging/extension"> <xsd:element name="notification"> <xsd:complexType> <xsd:sequence> <xsd:element name="messageId" type="xsd:string" minOccurs="0" maxOccurs="1"> <xsd:annotation> <xsd:documentation>Unique message identifier from User Messaging Service.</xsd:documentation> </xsd:annotation> </xsd:element> <xsd:element name="sender" type="xsd:string"> <xsd:annotation> <xsd:documentation>The sender address.</xsd:documentation> </xsd:annotation> </xsd:element> <xsd:element name="recipient" type="xsd:string"> <xsd:annotation> <xsd:documentation>The recipient address (typically username).</xsd:documentation> </xsd:annotation> </xsd:element> <xsd:element name="subject" type="xsd:string" minOccurs="0" maxOccurs="1"> <xsd:annotation> <xsd:documentation>The subject of the message, if available.</xsd:documentation> </xsd:annotation> </xsd:element> <xsd:element name="contentType" type="xsd:string" default="text/plain"> <xsd:annotation> <xsd:documentation>The MIME type of the message. e.g. text/plain, text/html, text/xml.</xsd:documentation> </xsd:annotation> </xsd:element> <xsd:element name="content" type="xsd:string"> <xsd:annotation> <xsd:documentation>The main body of the message. Textual content only (no binary content).</xsd:documentation> </xsd:annotation> </xsd:element> <xsd:element name="parameters" type="tns:parameter" minOccurs="0" maxOccurs="unbounded"> <xsd:annotation> <xsd:documentation>Additional key-value pairs. This interface does not define any specific key-value pair meanings. Use of such parameters is defined on a private basis by particular implementations of this interface. </xsd:documentation> </xsd:annotation> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="parameter"> <xsd:sequence> <xsd:element name="name" type="xsd:string"> <xsd:annotation> <xsd:documentation>Parameter name</xsd:documentation> </xsd:annotation> </xsd:element> <xsd:element name="value" type="xsd:string"> <xsd:annotation> <xsd:documentation>Parameter value</xsd:documentation> </xsd:annotation> </xsd:element> </xsd:sequence> </xsd:complexType> <xsd:element name="notificationResponse"> <xsd:complexType> <xsd:sequence> <xsd:element name="messageId" type="xsd:string" minOccurs="0" maxOccurs="1"> <xsd:annotation> <xsd:documentation>A message identifier returned in response to successfully accepting the message. If returned, the identifier should be unique. Note: A fault is raised if the message cannot be accepted.</xsd:documentation> </xsd:annotation></xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="notificationFault"> <xsd:complexType> <xsd:sequence> <xsd:element name="code" type="xsd:string"/> <xsd:element name="message" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> </wsdl:types> <wsdl:message name="notifyRequest"> <wsdl:part element="tns:notification" name="parameters" /> </wsdl:message> <wsdl:message name="notifyResponse"> <wsdl:part element="tns:notificationResponse" name="parameters"/> </wsdl:message> <wsdl:message name="notifyException"> <wsdl:part element="tns:notificationFault" name="parameters"/> </wsdl:message> <wsdl:portType name="Notify"> <wsdl:operation name="invoke"> <wsdl:input message="tns:notifyRequest"/> <wsdl:output message="tns:notifyResponse"/> <wsdl:fault message="tns:notifyException" name="NotifyException"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="NotifySOAPBinding" type="tns:Notify"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="invoke"> <soap:operation soapAction="http://www.oracle.com/ucs/messaging/extension" /> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> <wsdl:fault name="NotifyException"> <soap:fault name="NotifyException" use="literal"/> </wsdl:fault> </wsdl:operation> </wsdl:binding> <wsdl:service name="NotifyService"> <wsdl:port binding="tns:NotifySOAPBinding" name="Notify"> <soap:address location="http://localhost:8001/NotifyService"/> </wsdl:port> </wsdl:service> </wsdl:definitions>
次のタスクを実行して、拡張ドライバを構成します。
usermessagingdriver-extensionという事前デプロイ済の拡張ドライバ(または新しいデプロイメント)を、UMS (usermessagingserver)が稼働している適切なサーバーにターゲット設定して、ドライバを起動します。
Enterprise Manager Fusion Middleware Controlで、usermessagingserverのホーム・ページに移動します。
「ユーザー・メッセージング・サービス」をクリックし、「ドライバ・プロパティ」に移動します。
ドライバusermessagingdriver-extensionを選択して編集するか、新しいドライバ・デプロイメントと同じ名前で新しいドライバを作成します。
「ドライバ固有の構成」で、新しい拡張エンドポイント構成グループを追加してプロパティを指定します。EndpointURLは、手順1で作成したWebサービス・リスナー・エンドポイントへのURLです。Protocolは、通知サポートを追加する新しいメッセージング・チャネルの値(myProtocolなど)です。
「共通構成」で、Supported Protocolsを、各拡張エンドポイント・グループに定義されているプロトコルのカンマ区切りのリストで更新します。
「OK」をクリックして、構成を保存します。
これで、拡張ドライバを使用したUMSでの新しいメッセージング・チャネル(プロトコル)の構成および統合は完了です。
この新しいチャネル(プロトコル)に通知を送信するには、次のURIアドレッシング形式を使用して、URI配信タイプに受信者を指定する必要があります。
URI:scheme:scheme-specific-address-value
ここで、scheme
はプロトコルです。URI配信タイプはオプションです。たとえば、拡張ドライバがプロトコルmyProtocolをサポートするように構成されている場合、アプリケーションでmyProtocol:john.doe@example.com宛のメッセージを作成できます。
また、エンド・ユーザーは、「ユーザー通信プリファレンス」UIで新しいチャネル・タイプの新しいメッセージング・チャネルを作成することによって、メッセージング・プリファレンスを宣言することもできます。ユーザー・プリファレンスは、アプリケーションがユーザーベースの通知(つまり、USER:usernameの形式の受信者宛)を送信する場合にのみ適用されます。
Twitterドライバは、Twitter APIサーバーと通信するUMSドライバです。Twitterサーバーとの双方向のメッセージング・サービスを提供します。そのため、Twitterドライバを使用すると、アプリケーション・ユーザーはTwitterフィードを公開し、これに対する応答を受信できます。
Twitterドライバの特徴は次のとおりです。
複数の認証モード: Twitter REST APIでは次の2種類の認証を使用できます。
OAuth: これはシングル・サインオン・タイプの認証モードです。この認証モードはFusion Middleware Control (EM)のページから有効にできます。ドライバ固有のEMページで、「認証モード」パラメータをOauthに設定し、2組のキー、つまりカスタマ・キー、カスタマ・シークレット、アクセス・トークンおよびアクセス・トークン・シークレットを構成する必要があります。これらのキーの詳細は、表4-12「Twitterドライバのカスタム・プロパティ」を参照してください。
xAuth: この認証モードはOAuthに基づいています。Twitterドライバは、OAuthの要件を満たしていないアプリケーションにのみxAuthを許可します。この認証モードを有効にするには、ユーザーがリクエストごとにユーザー名とパスワードを入力する必要があります。
複数のメッセージング・オプション: Twitterドライバを使用する場合に、ユーザーが目にするメッセージには次の2つのカテゴリがあります。
アウトバウンド・メッセージ: UMSクライアント・アプリケーションからTwitterサーバーに送信されるメッセージをアウトバウンド・メッセージと呼びます。このメッセージはツイートまたはダイレクト・メッセージとして処理されます。
ツイート: Twitterドライバに構成されているユーザー名に対して送信されるメッセージはツイートとして投稿されます。たとえば、TwitterドライバがユーザーTWという資格証明で構成されている場合、URI:twitter:TW
に送信されるメッセージはすべて、ユーザーTWからのツイートとして投稿されます。
ダイレクト・メッセージ: 構成済ユーザーのユーザー名から別のTwitterユーザーに送信されるメッセージはダイレクト・メッセージとして処理できます。Twitterでは、構成済ユーザーはそのユーザーの直接のフォロワにのみダイレクト・メッセージを送信できます。ダイレクト・メッセージの受信者がTwitterに登録されていないユーザーの場合、または送信者の直接のフォロワではない場合、メッセージの配信は失敗し、エラー・メッセージが表示されます。
インバウンド・メッセージ: TwitterドライバがTwitterサーバーから受信するメッセージをインバウンド・メッセージと呼びます。インバウンド・メッセージには次のタイプがあります。
タイムライン・メッセージ: これは構成済ユーザーまたは構成済ユーザーがフォローしているTwitterユーザーが投稿したツイートのリストです。
ダイレクト・メッセージ: これは構成済ユーザーがフォーローするTwitterユーザーから構成済ユーザーに送信されたプライベート・メッセージです。
ツイート・サイズの制限: Twitterでは各ツイートの長さが140バイトまでに制限されています。この制限を超えるツイートはTwitterサーバーで拒否されます。長いツイートの場合、Twitterサーバーに送信される前にTwitterドライバで切り捨てられます。
ツイート頻度の制限: Twitterではユーザー当たりのツイート使用頻度が制限されています。Twitterの制限の詳細は、「About Twitter Limits」ページを参照してください。ユーザーの使用頻度がそのTwitterユーザーの頻度制限を超えると、アウトバウンド・メッセージの配信に失敗し、インバウンド・メッセージの受信は停止します。
UMSをファイアウォールの後方で使用する場合、WebLogic Serverのプロキシ設定を構成する必要があります。WebLogic Serverのプロキシ設定の構成に関する詳細は、『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC Webサービス・スタート・ガイド』のシステム・プロパティを使用したプロキシ・サーバーの指定に関する項を参照してください。
Twitterサーバーに対する接続問題がある場合、Twitterサーバーが正常な状態に戻るまで、Twitterドライバは4分に1回から16分に1回の低頻度でサーバーをポーリングします。正常動作では、ドライバは、1分に1回から4分に1回の頻度でTwitterサーバーをポーリングします。
Twitterでは、そのサービスの使用状況を積極的に監視します。ユーザーのリミットに達すると、理由を示すエラー・メッセージが表示され、そのクライアントがリクエストしたサービスの提供が許可されないことがあります。リミットはすべて現在のリミットのページに示されています。Twitterサーバーによって使用を制限されると、まずドライバは30分待機した後、4分に1回から16分に1回の低頻度でサーバーをポーリングします。
送信メッセージの場合、つまり、ツイートの投稿やダイレクト・メッセージの送信時、ツイート・テキストはUMSメッセージのコンテンツと連結されたUMSメッセージの件名です。着信ツイートおよびダイレクト・メッセージの場合、テキストはUMSメッセージのコンテンツに挿入されます。
表3-4に、アウトバウンド・メッセージに使用されるメタデータを示します。
ネームスペース: "UMS-TWITTER"
表3-4 Twitterドライバでアウトバウンド・メッセージに使用されるメタデータ
名前 | 説明 | 備考 |
---|---|---|
retweet_id |
リツイートされるメッセージのTwitter ID。このIDは、メッセージ/ツイートを受信すると入手できます。 |
このメタデータは、受信者のAddressオブジェクトに対するものです。 |
reply_to_id |
返信するメッセージのTwitter ID。このIDは、メッセージ/ツイートを受信すると入手できます。 |
このメタデータは、受信者のAddressオブジェクトに対するものです。 |
geo_location |
latitude,longitudeとして表される緯度と経度。latitudeとlongitudeはJavaプリミティブ・データ型doubleに変換されます。 |
このメタデータは、Messageオブジェクトに対するものです。 |
APNSドライバはユーザー・メッセージング・サービス(UMS) 12.2.1以降で使用できます。UMSメッセージをAppleのiOSデバイス(iPhone、iPadなど)への通知として送信するためのサポートを提供します。
APNSドライバの特徴は次のとおりです。
アウトバウンド・メッセージ: UMSクライアント・アプリケーションからAppleのデバイスにAPNsを介して送信されるメッセージは、UMSの用語ではアウトバウンド・メッセージと呼ばれます。Appleの用語では「通知」です。受信者uri:apns:tokenに送信されたメッセージは、UMS APNSドライバによって処理されます。UMS APNSドライバは、受信者のアドレスからトークンを抽出して、空のApple Push Notification Payloadを作成します。UMSメッセージの情報に基づいて、Apple Push Notification Payloadが移入され、最後にAPNsに送信されます。
サポートされる配信タイプ
配信タイプURIがサポートされます。プロトコルapnsがサポートされます。
Mimeタイプがサポートされます。
Mimeタイプtext/plainおよびapplication/jsonがサポートされます。
サポートされる配信ステータス・タイプ
UMS APIは様々なステータス・タイプを定義します。APNSドライバでは次のステータスが使用されます。
DELIVER_TO_DRIVER_SUCCESS
さらなる処理のために、ドライバがメッセージを受信しました。
DELIVERY_TO_GATEWAY_FAILURE
通知をAPNsに送信できません。
DELIVERY_TO_GATEWAY_SUCCESS
通知がAPNsに送信されました。ただし、APNsは配信を保証せず、UMSはメッセージがデバイスに送信されたかどうかを認識しないため、APNSドライバがDELIVERY_TO_DEVICE_SUCCESSを返すことはありません。
DELIVERY_TO_DEVICE_FAILURE
APNSドライバが、たとえば、使用されたアドレスが無効であることを見つけました。通常、ユーザーがそのデバイスでアプリケーションを登録解除しています。
外部プロトコルへのマッピング
表3-5は、UMSメッセージ・プロパティとAPNsプロトコルのマッピングを示しています。
表3-5 アウトバウンド・メッセージのGCMメタデータ
UMSメッセージ・プロパティ | APNsプロトコル | 値のタイプ | 説明 |
---|---|---|---|
受信者のアドレス(例: 'uri:apns:token') |
デバイス・トークン |
UMSアドレス |
受信者アドレスのトークンの部分は、APNsへのデバイス・トークンとして使用されます。 |
コンテンツ |
alert |
string |
UMSメッセージ・テキストのコンテンツは、アラート・メッセージのペイロードとして使用されます。コンテンツ・タイプがtext/plainの場合、そのコンテンツはアラートに使用されます。メタデータ・プロパティ(次の表を参照)はペイロードに追加されます。コンテンツ・タイプがapplication/jsonの場合、そのコンテンツはそのままAPNsに渡され、メタデータ・プロパティは無視されます。 |
有効期限(MessageInfo)(秒単位)。デフォルトは |
expiry |
integer |
UMSプロパティの有効期限は、有効である期間を秒単位で指定します。ゼロまたは負の値は、メッセージが期限切れにならないことを意味します。有効期限が負の値またはゼロの場合、expiryはMAX_INTに設定され、それ以外の場合、expiryプロパティは現在の時間(秒単位)に有効期限を足した値として計算されます。 配信される前に期限切れになったプッシュ通知は失敗した配信と見なされず、フィードバック・サービスに影響しません。 |
件名 |
- |
- |
UMSメッセージの件名は無視されます。 |
表3-6は、オプションのUMSメッセージ・メタデータを示しています。
表3-6 オプションのUMSメッセージ・メタデータ
名前 | 説明 |
---|---|
badge |
アプリケーション・アイコンのバッジとして表示される番号。このプロパティがない場合、バッジは変更されません。バッジを削除するには、このプロパティの値に |
sound |
アプリケーション・バンドルのサウンド・ファイルの名前。このファイルのサウンドはアラートとして再生されます。サウンド・ファイルが存在しないか、 |
action-loc-key |
文字列を指定した場合は、2つのボタンを持つアラートが表示されます。ただし、iOSは文字列をキーとして使用し、「表示」のかわりに右ボタンのタイトルに使用するために、現在のローカリゼーションにローカライズされた文字列を取得します。値がnullの場合、単一のOKボタンを持つアラートが表示され、タップすると単にアラートが閉じられます。 |
loc-key |
現在のローカリゼーション(ユーザーの言語設定によって設定されます)のLocalizable.stringsファイルのアラートメッセージ文字列へのキー。キー文字列は、 |
launch-image |
アプリケーション・バンドルのイメージ・ファイルのファイル名。拡張子を含めるか、省略できます。このイメージは、ユーザーがアクション・ボタンをタップするか、アクション・スライダを移動させたときの起動イメージとして使用されます。このプロパティを指定しない場合、前のスナップショット、またはアプリケーションのInfo.plistファイルのUILaunchImageFileキーによって識別されるイメージが使用されるか、 |
custom |
カスタム値をApple Push Payloadに追加するには、メタデータ名にcustomおよび値としてJSON形式の文字列を使用します。JSONオブジェクトはデバイス・アプリケーションにそのまま渡されます。カスタム値には、JSONの構造化型およびプリミティブ型(ディクショナリ(オブジェクト)、配列、文字列、数値およびブール)を使用する必要があります。JSONオブジェクトはペイロードに追加されます。 |
ドライブ固有のメッセージの検証
デバイス・トークンおよびメッセージ・サイズが検証されます。デバイス・トークンが適切な長さではない場合、メッセージは送信されず、失敗ステータスが生成されます。メッセージ・サイズが256バイトを超えている場合、メッセージは送信されず、失敗ステータスが生成されます。
コンテンツ・タイプapplication/jsonの場合、またはカスタムJSONオブジェクトがメタデータ・プロパティに追加されている場合、JSONオブジェクトを解析できるかどうかについてJSON健全性チェックが行われます。解析できない場合、メッセージは送信されず、失敗ステータスが生成されます。
RAW JSONの送信
コンテンツ・タイプにapplication/jsonを設定することによって、完全なAPNsメッセージを設定できます。UMSはJSONデータをそのままAPNsに渡します。コンテンツ・タイプにapplication/jsonが設定されている場合、ドライバ固有のすべてのメタデータ・プロパティは無視されます。
これにより、他のメッセージ・タイプ(MDM (Mobile Device Management)メッセージなど)をAPNsに使用することもできます。
複数のアプリケーションのサポート
複数の独立したアプリケーションがAPNSドライバを使用できるように、APNSドライバは複数の構成をサポートします。メッセージに適切なAPNSドライバを選択するために、UMSのコア機能であるドライバ選択が使用されます。推奨される方法は、SupportedApplicationNamesまたはSupportedCarriersドライバ構成プロパティを使用することです。
SupportedCarriersの場合、メッセージのinfoオブジェクト(oracle.sdp.messaging.MessageInfo)に、対応するキャリア・プロパティが設定されている必要があります。
message.getMessageInfo().setCarrier("myapp");
SupportedApplicationNamesの場合、アプリケーション名プロパティのデフォルト値は、通常の場合に使用できるようにアプリケーションのデプロイメント名です。なんらかの理由で他の値を使用する必要がある場合、アプリケーション名プロパティは次のようにMessagingClientが作成されるときに設定できます。
Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put(ApplicationInfo.APPLICATION_NAME, "myapp"); messagingClient = MessagingClientFactory.createMessagingClient(parameters);
インバウンド・メッセージ - フィードバック・サービス: インバウンド・メッセージはAPNsフィードバック・サービスからのレポートで構成されます。フィードバック・サービスは、到達できなくなったデバイス(たとえば、ユーザーがiOSアプリケーションをアンインストールしたため)を報告します。APNSドライバは、このデバイス・アプリケーションでの無効なデバイス・トークンについてフィードバック・サービスをポーリングし、それらをインバウンド・メッセージでプロバイダ・アプリケーションに報告します。プロバイダ・アプリケーションがそれらのメッセージを受信するには、ドライバの構成と同じ値(例: uri:apns:myapp)でアクセス・ポイントを登録する必要があります。
フィードバック・サービスは、TLS接続が示すデバイス・アプリケーションの到達できないすべてのデバイス・トークンを返します。デバイス・トークンのサブセットのみを受け取ることはできません。
AppleのAPNsドキュメントでは、フィードバック・サービスを使用することが推奨されています。この情報を使用して、配信に失敗するプッシュ通知の送信を停止することにより、アプリケーションで不要なメッセージのオーバーヘッドが減少し、全体的なシステム・パフォーマンスが向上します。APNsは、フィードバック・サービスを適切にチェックしていること、およびデバイスに存在しないアプリケーションへのプッシュ通知の送信を控えることについてプロバイダを監視します。
メッセージの形式はJSONです。メッセージは、デバイス・トークンおよび有効期限日(longのEpochミリ秒)を持つJSONオブジェクトの配列です。
[ { "deviceToken" : "ad123e45f6f78c9041dd234e5a6f7890", "expiry" : 134567878222112333 }, { "deviceToken" : "bb223e45f6f78c9041dd234e5a6f1234", "expiry" : 133577878222123456 } ]
異なるユーザーの同じ情報プロバイダ・アプリケーション: プロバイダ・アプリケーションが複数のユーザー(オンプレミスまたはクラウドにインストールされている)によって使用される場合、アプリケーションのクライアント側(デバイス・アプリケーション)は直接再使用できません。デバイス・アプリケーションは、一意のバンドルIDを使用してユーザーに配信する必要があります。これは、フィードバック・サービスが到達できないデバイス・トークンをポーリングする場合、各ユーザーに異なるTLS証明書を使用する必要があるためです。APNSドライバは、各ユーザーに異なるTLS証明書を使用する必要があります。そうしないと、他のユーザーの到達できないデバイス・トークンが取得されます。
テキストの追加。
APNSドライバは、リソース・アダプタが特定のJEEプラットフォームで処理できる数と同等の数のメッセージの送信をサポートします。
ドライバのスケーラビリティは、JMSソリューションのスケーラビリティによって制限されます。UMSおよびドライバは複数のノードにデプロイできます。
APNsへの呼出しが失敗した場合、メッセージはゲートウェイへの配信に失敗したとマークされます。
UMSおよびAPNSドライバは複数のノードにデプロイできます。
注意: プッシュ通知の配信はAPNsによって保証されません。データ転送はプッシュ通知を使用して実行しないでください。データが使用可能であるという通知のみを送信します。 |
UMS APNSドライバが中間層サーバーにデプロイされている場合、すべてのUMSクライアントがuri:apns
配信チャネルを使用できる必要があります。詳細は、次のコード例を参照してください。
プッシュ通知を送信するには、メッセージをデバイス・トークンに送信します。トークンが1234567890…1234567890
であるとします。次のjavaスニペットは、通知をそのデバイスにプッシュします。
String recipient = "uri:apns:1234567890..1234567890"; Message message = MessagingFactory.createTextMessage("New Lenny K clips"); message.addRecipient(MessagingFactory.createAddress(recipient)); String id = mMessagingClient.send(message);
バッジ番号およびサウンド・ファイルを指定してプッシュ通知を送信するには、次のjavaスニペットに示されているように、UMSメッセージにメタデータを追加します。
String recipient = "uri:apns:1234567890..1234567890"; Message message = MessagingFactory.createTextMessage("New Lenny K clips"); message.addRecipient(MessagingFactory.createAddress(recipient)); message.setMetaData("UMS-APNS", "badge", "3"); message.setMetaData("UMS-APNS", "sound", "Rocknroll.aiff"); String id = mMessagingClient.send(message);
ローカライズされたアラート・テキストを引数に指定してプッシュ通知を送信するには、次のjavaスニペットに示されているように、UMSメッセージにメタデータを追加します。
String recipient = "uri:apns:1234567890..1234567890"; Message message = MessagingFactory.createTextMessage("New Lenny K clips"); message.addRecipient(MessagingFactory.createAddress(recipient)); message.setMetaData("UMS-APNS", "loc-key", "GAME_PLAY_REQUEST_FORMAT"); message.setMetaData("UMS-APNS", "loc-args", "Jenna,Frank"); String id = mMessagingClient.send(message);
前述のスニペットは、次のような通知ペイロードになります。
{ "aps" : { "alert" : { "loc-key" : "GAME_PLAY_REQUEST_FORMAT", "loc-args" : ["Jenna", "Frank"] } } }
カスタム・データを指定してプッシュ通知を送信するには、次のjavaスニペットに示されているように、カスタム・データを表すJSON形式の文字列を作成し、UMSメッセージにメタデータcustomとしてそれを追加します。
String customDataAsJson = "{\"myCustomDataSection\":{\"mykey1\":\"value1\",\"mykey2\":\"value2\"}, \"section2\":4711}"; String recipient = "uri:apns:1234567890..1234567890"; Message message = MessagingFactory.createTextMessage("New Lenny K clips"); message.addRecipient(MessagingFactory.createAddress(recipient)); message.setMetaData("UMS-APNS", "custom", customDataAsJson); String id = mMessagingClient.send(message);
結果の通知ペイロードは次のようになります。
{ "aps" : { "alert" : "New Lenny K clips", }, "myCustomDataSection" : { "mykey1" : "value1", "mykey2" : "value2", }, "section2" : 4711 }
注意: JSON形式の文字列は、様々なオブジェクトから作成できます(たとえば、WebLogicですでに使用可能なcom.fasterxml.jacksonパッケージを使用して)。 |
APSペイロード・データを指定してプッシュ通知を送信するには、ペイロードを表すJSON形式の文字列を作成します。
String rawJson = "{\"aps\":{\"alert\":\"UMS rocks\"}}"; String recipient = "uri:apns:1234567890..1234567890"; Message message = MessagingFactory.createMessage(); message.addRecipient(MessagingFactory.createAddress(recipient)); message.setContent(rawJson,"application/json; charset=\"UTF-8\""); String id = mMessagingClient.send(message);
MDMペイロード・データを指定してプッシュ通知を送信するには、ペイロードを表すJSON形式の文字列を作成します。
String rawJson = "{\"mdm\":\"the_push_magic_token\"}"; String recipient = "uri:apns:1234567890..1234567890"; Message message = MessagingFactory.createMessage(); message.addRecipient(MessagingFactory.createAddress(recipient)); message.setContent(rawJson,"application/json"); String id = mMessagingClient.send(message);
APNSドライバは、到達できないデバイス・トークンのリストを取得するために、フィードバック・サービスを定期的にポーリングします。デバイス・トークンのリストを受け取ると、フィードバック・サービスはそのデバイス・トークンに関する情報をクリアします。このため、同じデバイス・トークンを再度受け取ることはできません(再度登録されて、再度到達不能になった場合を除く)。
アプリケーションは、APNSドライバが構成されているアクセス・ポイントに対応するUMSアクセス・ポイントを登録する必要があります。
import com.fasterxml.jackson.databind.*; String address = "uri:apns:myapp"; AccessPoint accessPoint = AccessPointFactory.createAccessPoint(MessagingFactory.createAddress(address)); messagingClient.registerAccessPoint(accessPoint); Message[] messages = messagingClient.receive(); byte[] content = (byte[]) messages[0].getContent(); JsonNode devices = new ObjectMapper().readTree(content); for (JsonNode device : devices) { System.out.println("deviceToken: " + device.get("deviceToken").asText()); System.out.println("expiry: " + new Date(device.get("expiry").asLong())); }
ASCII以外の文字が使用される場合、UMSメッセージの文字セットをそれに応じて設定する必要があります(たとえば、UTF-8に)。次のコード例は、文字「ä」およびエモーティコンを使用したメッセージの作成を示しています。
// message with 'ä' Message message1 = MessagingFactory.createTextMessage("\u00e4", "UTF-8"); // message with SMILING FACE WITH SUNGLASSES (U+1F60E) Message message2 = MessagingFactory.createTextMessage("\ud83d\ude0e", "UTF-8");