電信業者通知事件技術詳細數據
本主題說明行動電信業者通知事件的技術詳細數據。
事件承載
MobileOperatorNotification 事件承載包含下列字段:
欄位 | Description |
---|---|
MessageType | 觸發事件的訊息列舉。 |
介面 | 對應至與事件相關聯之實體介面的 GUID。 |
EncodingType | 如果 MessageType 是 SMS/USSD,訊息的編碼方法。 |
MessageDataSize | 如果 MessageType 是 SMS/USSD,則訊息的大小,以位元組為單位。 |
訊息 | 如果 MessageType 是 SMS/USSD,則會接收的原始訊息。 |
MobileOperatorNotification 事件可藉由在事件承載中使用 MessageType 字段來區分行動操作員通知案例中所述的每個案例。 MessageTypes 會列舉如下:
列舉型別 | 類型 |
---|---|
0 | GSM SMS |
1 | CDMA SMS |
2 | USSD |
3 | DataPlanThresholdReached |
4 | DataPlanReset |
5 | DataPlanDeleted |
6 | ProfileConnected |
7 | ProfileDisconnected |
8 | RegisteredRoaming |
9 | RegisteredHome |
10 | TetheringEntitlementCheck |
與 MobileOperatorNotification 事件相關聯的工作項目應該從有效區分 MessageType 的邏輯開始,並針對每個案例執行適當的程式代碼。
GSM/CDMA SMS 和 USSD
內送操作員訊息,包括SMS和USSD,會觸發MobileOperatorNotification事件與適當的對應 MessageTypes。 這些類型專屬於 EncodingType、 MessageDataSize 和 Message。
DataPlanThresholdReached
根據預設,此訊息類型會停用。 您可以使用布建元數據來指定 DataUsageInMobileOperatorNotificationEnabled 字段來啟用它,如下所示。
<?xml version="1.0"?>
<CarrierProvisioning xmlns="http://www.microsoft.com/networking/CarrierControl/v1">
<Global>
<CarrierId>{2c85b76b-f859-47c4-8122-721fe8b6c25f}</CarrierId>
<SubscriberId>012345678901234</SubscriberId>
</Global>
<MBNProfiles>
<DefaultProfile xmlns="http://www.microsoft.com/networking/CarrierControl/WWAN/v1">
<Name>Contoso</Name>
<AssociatedPlan>SamplePlan</AssociatedPlan>
<Context>
<AccessString>Contoso.com</AccessString>
<UserLogonCred>
<UserName>User</UserName>
<Password>[PLACEHOLDER]</Password>
</UserLogonCred>
</Context>
</DefaultProfile>
</MBNProfiles>
<Plans>
<Plan xmlns="http://www.microsoft.com/networking/CarrierControl/Plans/v1" Name="SamplePlan">
<Description PlanType="Fixed">
<DataLimitInMegabytes>500</DataLimitInMegabytes>
<DataUsageInMobileOperatorNotificationEnabled>true</DataUsageInMobileOperatorNotificationEnabled>
</Description>
</Plan>
</Plans>
</CarrierProvisioning>
如需帳戶布建元數據的詳細資訊,請參閱 帳戶布建。
當本機數據計數器估計在行動寬頻介面上傳送和) 接收的位元組使用量 (自上次發生之後已變更為 5%,但下列情況除外,此事件會產生此 MessageType :
當連線到家庭網路 (非漫遊) 時,如果未指定數據計劃限制,則會每隔 100 MB 的本機數據使用量觸發此事件。
連線到漫遊網路時,不會套用數據計劃限制,而且每 5 MB 的本機數據使用量就會觸發此事件。
Windows 8 中的本機數據計數器會每隔一分鐘更新一次;在所有描述的案例中,最多每分鐘都會產生一次此事件。 在 Windows 8.1 事件會在達到 5% 閾值時實時傳遞。
注意
雖然這項資訊是良好的第一訂單指南,但 Windows 無法考慮未計費的流量,或在共用相同數據 (限制的其他裝置上使用,例如系列方案或 SIM 交換) 。 行動電信業者應用程式應該只使用本機數據計數器來近似使用量,因為上次與操作員自己的計費系統同步處理。 對於已經處理的數據使用量,計費系統應該視為權威。
DataPlanReset
在方案重設日期上,[數據使用量] 和 [訂用帳戶管理員] (DUSM) 會將使用者的目前本機數據使用量重設為零。
DataPlanDeleted
對於具有固定到期日的預先付費數據方案,DUSM 會刪除到期日與帳戶相關聯的連線配置檔,並使用這個 MessageType 觸發 MobileOperatorNotification 事件。 刪除連線配置檔時,Windows 連線管理員 不再嘗試自動連線到連線配置檔所描述的網路。
ProfileConnected 和 ProfileDisconnected
當 Windows 連線管理員 連線到操作員體驗元數據所提供的網路配置檔時,MobileOperatorNotification 事件會產生這些 MessageType。 每個連線和中斷連線都會觸發此事件,包括睡眠/繼續之後的初始連線。 如果在下載並安裝應用程式和服務元數據時,裝置已連線,也會觸發它。
ProfileConnected MessageType 會在行動寬頻介面的 L2 連線上觸發。
注意
此觸發程式會在網路識別完成之前發生。 NetworkStatusChanged 事件會在網路識別判斷網路的連線層級時產生 (NetworkInformation API) 的一部分。 如需網路識別的詳細資訊,請參閱 快速入門:擷取網路連線資訊和NetworkInformation 類別。
RegisteredRoaming 和 RegisteredHome
當 Windows 連線管理員 註冊漫遊網路時,MobileOperatorNotification 事件會產生這些 MessageTypes。 每個註冊都會觸發此事件,包括睡眠/繼續之後的初始註冊。 如果在下載並安裝應用程式和服務元數據時,裝置已經註冊到網路,也會觸發它。
當用戶註冊漫遊網路時,應用程式應該只會通知使用者一次,並在他們返回其首頁網路時一次通知使用者。 由於此事件會在每次註冊時觸發,因此應用程式會負責追蹤應用程式會話數據中先前註冊的狀態。
TetheringEntitlementCheck
當用戶開啟因特網共用時,會使用此 MessageTypes 產生 MobileOperatorNotification 事件。 只要行動操作員已將服務元數據架構中的 AllowTethering 元素設定為 EntitlementCheckRequired,每次用戶嘗試使用因特網共用時就會觸發此事件。 如需服務元數據架構的詳細資訊,請參閱 服務元數據套件架構參考。
應用程式應該執行行動電信業者網路所支援的適當權利檢查機制,並使用 Windows.Networking.NetworkOperatorS 命名空間中 NetworkOperatorNotificationEventDetails 類別的 AuthorizeTethering 方法,將結果傳送至系統。 如果應用程式沒有執行權利檢查的功能,行動電信業者應該將服務元數據 AllowTethering 元素變更為 Always 或 Never,讓事件永遠不會產生。
使用元數據註冊MobileOperatorNotification事件
一般而言,應用程式至少必須由使用者執行一次,才能向系統事件代理程序註冊工作專案。 不過,因為需要MobileOperatorNotification事件才能完成主要行動寬頻案例,所以此事件會使用服務元數據與行動寬頻應用程式相關聯。 在服務元數據中,設定 DeviceCompanionApplications 元素。
<DeviceCompanionApplications>
<Package>
<Identity Name="MyOperatorNotification" Publisher="MyCorporation " />
<Applications>
<Application Id="MyOperatorNotification" />
<DeviceNotificationHandlers>
<DeviceNotificationHandler EventID="MobileOperatorNotificationHandler" EventAsset="backgroundtask.js" />
</DeviceNotificationHandlers>
</Applications>
</Package>
</DeviceCompanionApplications>
EventID 屬性會告訴系統裝置預期何種事件。 EventAsset 屬性的值應該指向實作背景工作的進入點。 這會告訴系統當發生該特定事件時要執行的工作。
使用此範例,系統會建立並註冊該裝置特有的事件。 它也會註冊此事件的行動寬頻應用程式。 應用程式必須有名為 backgroundtask.js 的 JavaScript 檔案,每次系統收到操作員通知時都會執行。
如果行動寬頻應用程式是以 C# 撰寫,則事件資產必須指向實作 backgroundtask 介面的運行時間類別。
<DeviceNotificationHandlers>
<DeviceNotificationHandler EventID="MobileOperatorNotificationHandler" EventAsset="MNOMessageBackground.OperatorNotification" />
下載服務元數據和應用程式時,裝置安裝管理員會在執行應用程式之前,向系統事件代理人註冊適當的工作專案。 在註冊工作項目之後,如果行動寬頻裝置已註冊或連線到網路,則MobileOperatorNotification事件會與對應的 MessageType 一起觸發。
變更元數據中的背景工作註冊
如果背景工作進入點在行動寬頻應用程式的更新版本中變更,服務元數據中的 DeviceNotificationHandler 元素也必須變更。
在執行 Windows 8、Windows 8.1 和 Windows 10 的計算機上,服務元數據會自動更新。 行動寬頻應用程式會在 Microsoft Store 中更新。 您應該避免變更服務元數據中的 DeviceNotificationHandler 背景工作註冊。 如果需要變更,服務元數據應該包含所有支援版本的行動寬頻應用程式所使用的不同背景工作進入點參考,以保留尚未更新行動寬頻應用程式之使用者的功能。
定義布建 XML 中的篩選規則
Windows 會接受您以 XML 為基礎的布建檔案。 佈建 XML 的範例版本如下所示:
<?xml version="1.0" encoding="utf-8"?>
<CarrierProvisioning xmlns="http://www.microsoft.com/networking/CarrierControl/v1">
<Global>
<!-- Adjust the Carrier ID to fit match the Service Number in service metadata. Refer to the documentation about CarrierId. -->
<CarrierId>{11111111-1111-1111-1111-111111111111}</CarrierId>
<!-- Adjust the Subscriber ID. Refer to the documentation about Subscriber ID's. -->
<SubscriberId>1234567890</SubscriberId>
</Global>
<MBNProfiles>
<DefaultProfile xmlns="http://www.microsoft.com/networking/CarrierControl/WWAN/v1">
<!-- Adjust the profile name -->
<Name>Contoso</Name>
<AssociatedPlan>Limited</AssociatedPlan>
<!-- Adjust the home provider name for the given SIM/Device -->
<HomeProviderName>Contoso</HomeProviderName>
<Context>
<!-- Adjust the access string to your APN. -->
<AccessString>Contoso.Contoso</AccessString>
<!-- Adjust the UserLogonCred to fit your UserLogonCred. Refer to the documentation about UserLogonCred's. -->
<UserLogonCred>
<UserName>user</UserName>
<Password>[PLACEHOLDER]</Password>
</UserLogonCred>
</Context>
</DefaultProfile>
<Messages xmlns="http://www.microsoft.com/networking/CarrierControl/WWAN/v1">
<Message RuleId="Sample1" Silent="true">
<SMSBearer ClassZeroOnly="false" Sender="18005551212"/>
<!-- [^]* matches all messages from this sender, regardless of content -->
<Pattern>[^]*</Pattern>
<!-- Because no Fields are specified, this message will be passed to the operator app without parsing. -->
</Message>
<Message RuleId="Sample2" Silent="false">
<!-- Parsing a simple usage message. -->
<USSDBearer/>
<Pattern>(\d+\.\d+)(\w+) of (\d+)(\w+) used as of (\S+)</Pattern>
<!-- Using these field definitions, Windows will automatically update usage data before passing the message
to the operator app. -->
<Units G="GB" M="MB"/>
<Fields>
<!-- These fields are currently unordered, but an order will be required in RC. -->
<Usage Group="1" UnitGroup="2"/>
<UsageTimestamp Group="5" Format="%I:%M%p on %d %b"/>
<DataLimit Group="3" UnitGroup="4"/>
</Fields>
</Message>
</Messages>
</MBNProfiles>
<Provisioning />
</CarrierProvisioning>
如需帳戶布建元數據的詳細資訊,請參閱 帳戶布建。
此 XML 中可以定義文字訊息作為運算子訊息的規則。
允許的寄件者 Sender 屬性會指定允許通知送達的保留寄件者位址。 (此號碼必須與SMS訊息中所收到的寄件者號碼完全相符,包括國際格式) 。
模式 要識別並選擇性地從文字訊息擷取數據欄位的正規表達式。 若要符合寄件者的所有訊息,請使用模式
[^]*
。