本主題說明電信業者通知事件的技術詳細數據。
事件資料負載
MobileOperatorNotification 事件承載包含下列字段:
田 | 描述 |
---|---|
MessageType | 觸發事件的訊息列舉。 |
介面 | 對應於與事件相關聯的物理介面的 GUID。 |
編碼類型 | 如果 MessageType 是 SMS/USSD,則該訊息的編碼方法。 |
MessageDataSize | 如果 MessageType 為 SMS/USSD,則訊息的大小會以位元組計算。 |
訊息 | 如果 MessageType 為 SMS/USSD,則收到的原始訊息。 |
MobileOperatorNotification 事件透過事件承載中的 [MessageType] 字段,對 電信業者通知案例 中所述的每個案例進行區分。 MessageType被列舉如下:
列舉 | 類型 |
---|---|
0 | GSM SMS |
1 | CDMA SMS |
2 | USSD |
3 | 資料方案臨界值已達 |
4 | DataPlanReset |
5 | 資料方案已刪除 |
6 | ProfileConnected |
7 | 個人檔案已斷線 |
8 | 註冊漫遊 |
9 | 註冊住宅 |
10 | 網路共享權限檢查 |
與MobileOperatorNotification 事件相關聯的工作項目應該以有效區分 MessageType的邏輯開始,並針對每個案例執行適當的程式代碼。
GSM/CDMA SMS 和 USSD
內送作員訊息,包括SMS和USSD,會觸發MobileOperatorNotification事件,以及適當的對應 MessageTypes。 這些類型的獨特之處在於 EncodingType、MessageDataSize和 Message。
資料方案已達門檻
根據預設,此訊息類型為停用。 您可以使用配置資料來指定 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 中的本機數據計數器每 1 分鐘更新一次;最多會在所有描述的案例中,每分鐘產生一次此事件。 在 Windows 8.1 中,事件會在達到 5% 閾值時實時傳遞。
注意
雖然這項資訊是良好的初級指南,但 Windows 無法考慮未計費的流量,或用於共用相同數據限制的其他裝置(例如家庭方案或 SIM 交換)。 行動電信業者的應用程式應該僅使用本機數據計數器來估算自上次與電信業者計費系統同步以來的使用量。 對於已處理過的數據使用量,計費系統應該視為權威。
DataPlanReset
在方案重設日期上,數據使用量和訂用帳戶管理員 (DUSM) 會將使用者的目前本機數據使用量重設為零。
資料方案已刪除
對於具有固定到期日的預付費數據方案,DUSM 會在到期日刪除與該帳戶相關聯的連接配置檔,而MobileOperatorNotification事件則是使用此 MessageType觸發的。 刪除連線配置檔時,Windows 連接管理員不會再嘗試自動連線到連線配置檔所描述的網路。
ProfileConnected 和 ProfileDisconnected
當 Windows 連線管理員連接到由營運商體驗元數據提供的網路配置檔時,MobileOperatorNotification 事件會生成這些 MessageType。 每個連線和中斷連線都會觸發此事件,包括睡眠/繼續之後的初始連線。 在下載並安裝應用程式和服務元數據時,如果裝置已經連線,該功能也會被觸發。
ProfileConnected MessageType 會在行動寬頻介面的 L2 連線上觸發。
注意
此觸發程式會於網路識別完成之前發生。 當網路識別決定網路連線層級時,會產生 NetworkStatusChanged 事件(NetworkInformation API 的一部分。 如需網路識別的詳細資訊,請參閱 快速入門:擷取網路連線資訊 和 NetworkInformation 類別。
已註冊漫遊 (RegisteredRoaming) 和 已註冊家園 (RegisteredHome)
當 Windows 連接管理員向漫遊網路註冊時,會使用這些 MessageType產生 MobileOperatorNotification 事件。 每次註冊都會觸發此事件,包括從休眠/喚醒後的初始註冊。 如果在下載並安裝應用程式和服務元數據時,裝置已經註冊到網路,也會啟動此程序。
應用程式應該只在用戶註冊漫遊網路時通知使用者一次,一次當他們返回其家庭網路時。 由於此事件會在每次註冊時觸發,因此應用程式會負責追蹤應用程式會話數據中先前已註冊的狀態。
網路共享授權檢查
當用戶開啟因特網共用時,會使用此 MessageType產生MobileOperatorNotification 事件。 只要電信業者將服務元數據架構中的 AllowTethering 元素設定為 EntitlementCheckRequired,每次使用者嘗試使用因特網共用時,都會觸發此事件。 如需服務元資料架構的詳細資訊,請參閱 服務元資料套件架構參考。
應用程式應該運行由行動電信業者網路支援的適當權利檢查機制,並通過 AuthorizeTethering 方法,將結果發送到系統。這個方法是 NetworkOperatorNotificationEventDetails 類別中的,位於 Windows.Networking.NetworkOperators 命名空間。 如果應用程式沒有執行權利檢查的功能,電信業者應該將 Service Metadata 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 市集中更新。 您應該避免在服務元數據中變更 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 中可以定義文字訊息作為操作員訊息的規則。
[允許的寄件者] [寄件者] 屬性會指定允許通知抵達的保留寄件者位址。 (此號碼必須與SMS訊息中收到的寄件者號碼完全相符,包括國際格式)。
Pattern 用於識別並可選擇性地從文字訊息中擷取資料欄位的正則表達式。 若要比對寄件者的所有訊息,請使用模式
[^]*
。