2012-06-30
SMS PDUとWSPの分析がAndroidに実装され、WBXMLによってカプセル化されたデータが取得され、ブロードキャスト「android.provider.Telephony.WAP_PUSH_RECEIVED」が発行されました。ネイティブ実装は、WAP PUSHSIおよびWAPPUSH SLのmimeTypeを使用したブロードキャストにまだ応答していません。つまり、WBXMLによってカプセル化されたPUSHデータの処理が不足しています。この記事では、Androidのネイティブ実装を分析および要約し、WAP PUSH SI / SLの実装リファレンスを提供します。
1.Androidでのネイティブ実装
著者は、SMS受信プロセスとSMS PDU / WSP / WBXMLのパッケージ形式について説明しているいくつかの記事を持っています。
- 「AndroidでのSMS受信処理」では、SMS受信処理プロセスの説明に焦点を当てています。
- 「WapPUSHAnalysis(1)-SMS PDU Coding」は、PDUのカプセル化フォーマットの説明に焦点を当てています。
- 「WapPUSH分析(2)-WSPおよびWBXMLコーディング」では、WSPおよびWBXMLのカプセル化について説明します。
要約は次のとおりです。
- RILで新しいSMSを受信し、android.telephony.SmsMessage.newFromCMT()を呼び出してPDUをデコードし、結果をSmsMessageに入れます。android.telephony.SmsMessage.newFromCMT()電話の種類に応じて、com.android.internal.telephony.gsm.SmsMessageまたはcom.android.internal.telephony.cdma.SmsMessageのnewFromCMT()を使用して、PDUデコードを実際に実現します。
- SmsDispatcher(特定の実装クラスGsmSmsDispatcher / CdmaSmsDispatcher)のdispatchMessage()を実行して、メッセージmsgを配布します。ターゲットポートがあり、ターゲットポートがWAP PUSH(SmsHeader.PORT_WAP_PUSH)の場合は、WapPushOverSms :: dispatchWapPdu()を使用して処理します。
- WapPushOverSms :: dispatchWapPdu()でWSPを解析して、ContentTypeに対応するMIMEタイプを取得します。サービス表示(SI)は「application / vnd.wap.sic」、サービス負荷(SL)は「application /vnd.wap.slc」です。SIおよびSLタイプの場合は、dispatchWapPdu_default()を呼び出します。
以下は、dispatchWapPdu_default()の実装です。
private void dispatchWapPdu_default(byte[]pdu, int transactionId, int pduType,
StringmimeType, int headerStartIndex, int headerLength) {
byte[] header = new byte[headerLength];
System.arraycopy(pdu, headerStartIndex,header, 0, header.length);
int dataIndex = headerStartIndex +headerLength;
byte[] data;
data = new byte[pdu.length -dataIndex];
System.arraycopy(pdu, dataIndex, data,0, data.length);
Intent intent = newIntent(Intents.WAP_PUSH_RECEIVED_ACTION);
intent.setType(mimeType);
intent.putExtra("transactionId", transactionId);
intent.putExtra("pduType",pduType);
intent.putExtra("header",header);
intent.putExtra("data",data);
mSmsDispatcher.dispatch(intent,"android.permission.RECEIVE_WAP_PUSH");
}
上記はすべてフレームワークで処理されます。SI/ SLWBXMLによってカプセル化されたデータがフレームワークで解析され、ブロードキャストを通じてブロードキャストされていることがわかります。次に、mimeTypeによって識別される特定のビジネスの処理は、アプリケーション層の仕事です。mimeTypeが「application / vnd.wap.sic」(SI)および「application / vnd.wap.slc」(SL)のWAP_PUSH_RECEIVEDの処理は、Androidのネイティブ実装では実装されていません。
ブロードキャストのインテントパラメータに注意してください。
- mimeType:“ application / vnd.wap.sic "or application / vnd.wap.slc";
- header:ContentTypeを識別するために使用される、WSPによって解析されたヘッダーには、すでにmimeTypeがあり、これには意味がありません。
- データ:WBXMLによってカプセル化されたSIまたはSLXMLデータ。
次の場合に限り、完全なWAPPUSHを実現します。
- mimeTypeが「application / vnd.wap.sic」(SI)および「application / vnd.wap.slc」(SL)のWAP_PUSH_RECEIVEDの処理を実現します。
- 受信したブロードキャストでは、WBXMLによってカプセル化されたSI / SLが解析され、メッセージライブラリに挿入されます。
MMSでの「application / vnd.wap.mms-message」(MMS)タイプのWAP_PUSH_RECEIVED処理の実装を参照してください。
二、再理 "android.provider.Telephony.WAP_PUSH_RECEIVED"
「android.provider.Telephony.WAP_PUSH_RECEIVED」を処理するには、BroardcastReceiver実装クラスWapPushReceiverを定義し、「application / vnd.wap.sic」(SI)と「application / vnd.wap.slc」(SL)を追加します。 )WAP_PUSH_RECEIVED処理ステートメントのタイプ。
<receiver android:name=".transaction.WapPushReceiver"
android:permission="android.permission.BROADCAST_WAP_PUSH">
<intent-filter>
<action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" />
<data android:mimeType="application/vnd.wap.sic" />
<data android:mimeType="application/vnd.wap.slc" />
</intent-filter>
</receiver>
3.WapPushReceiverでのWBXML解析
ネイティブ実装のMMSでのPushReceiverの処理を参照し、次の実装を実行します。
- WapPushReceiverのonReceive()は、インテントの「data」パラメーターを介してWBXMLによってカプセル化されたPushDataを取得します。
- バックグラウンドでAsyncTaskを開始して、WBXMLによってカプセル化されたPushDataを解析し、PushData(XML形式)を解析します。
- PushDataをXML形式で解析して、URL /コンテンツ/信号などの情報を取得します。
- 3の結果に従って、メッセージデータベースに参加し、ユーザーに通知することを選択します。
ここで重要なのは、WBXML形式の解析です。MIUIROMを参照して、WAP PUSHSMSのパッチを受け取ることができます 。これは、Xiaomi携帯電話用のWAPPUSH解析の実装です。WBXML解析のソースコードを参照できます。ただし、WBXMLで定義されたTAGと属性のサポートが不完全な場合、読者は必要に応じて必要なサポートを追加できます。
参照
1. Google Android source2.3.7_r1
Androidネイティブ実装ソースコード
WBXML標準、必見!
3. MIUIROMはWAPPUSHSMSパッチを受信します
AndroidでのWAPPUSH解析の実装にはソースコードがありますが、解析は不完全です。
4. SMS経由WAPプッシュ
SMSを介したWAPPUSHの概要(英語)
WAP PUSHサービス表示パッケージの例(英語)
6. ActiveXpertsSMSおよびMMSツールキットを使用してSMSWAPPushメッセージを送信する
WAPPUSHを送信するためのツール。使用説明書です。実装の詳細はありませんが、WBXMLのトークンと属性の比較を参照できます。(英語)