




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
移動運營商通知和系統(tǒng)事件摘要本白皮書提供有關Windows8的移動運營商通知系統(tǒng)事件的信息。它向移動運營商提供了用于開發(fā)移動寬帶Metro風格應用的指南,從而可以有效處理基于SMS或USSD的傳入移動運營商通知和相關移動寬帶系統(tǒng)事件。本書假定讀者熟悉Windows移動寬帶平臺和Metro風格應用開發(fā)的基本概念。該信息適用于以下操作系統(tǒng):
Windows8 此處討論的參考和資源均會在本書末尾部分列出。本白皮書的當前版本在以下Web維護:
移動運營商通知和系統(tǒng)事件免責聲明:本文檔按“原樣”提供。本文檔中所表達的信息和觀點(包括URL和其他Internet網站引用)如有更改,恕不另行通知。有些信息涉及預發(fā)行的產品,它在商業(yè)發(fā)布之前可能會大幅修改。Microsoft對在這里提供的信息不做任何明示或暗示的擔保。使用本文檔所帶來的風險由你自行承擔。此處所描述的一些例子是僅為演示的目的而虛構。與真實世界無實際關聯(lián),也不應以此作為推斷。本文檔不賦予任何Microsoft產品中的知識產權的法律權利。你可以復制和使用本文件作為內部參考。?2021Microsoft。保留所有權利。文檔歷史記錄日期更改2021年8月15日更新了“ProfileConnected和ProfileDisconnected”中的信息,增加了有關“在元數(shù)據中更改后臺任務注冊”和“驗證是否已成功應用設置元數(shù)據”的信息,并且在“未將收到的短信檢測為運營商通知”中增加了信息2021年6月8日闡明了ProfileConnected消息類型的傳遞時間2021年5月31日2021年2月28日首次發(fā)表目錄簡介客戶在Windows8上對運營商品牌的主要體驗為Metro風格移動寬帶設備應用。此應用不應該用于提供主要的連接管理功能,而是應該提供帳戶管理體驗和服務體驗。為了讓用戶可以接收其帳戶狀態(tài)的通知,應用需要執(zhí)行某些活動,即使在用戶未與其交互時也是如此。這些活動包括對運營商SMS或網絡啟動的USSD消息的響應,通知用戶他們已接近其數(shù)據限制,通知用戶其數(shù)據計劃已到期以及通知用戶其漫游狀態(tài)。Windows8中的后臺代理工作項Windows8引入了以全屏方式運行的Metro風格應用,其中包括Metro風格移動寬帶設備應用。最終用戶僅可以以前臺方式與應用程序進行交互。前臺應用被假定為對用戶最重要,以便此應用接收所有系統(tǒng)資源。如果應用不在前臺,則應用將掛起且無法運行任何代碼。掛起的應用在用戶通過將應用帶回前臺以恢復該應用前保持的掛起狀態(tài)。采用這樣的應用行為模型,用戶體驗不會受到由于執(zhí)行不重要的后臺應用而導致的滯后或延遲的影響。此外,減少不必要的后臺活動可優(yōu)化各種機型上的電池的壽命?;謴蛼炱鸬膽盟ㄙM時間可以忽略不計,并且?guī)缀醪粫淮蟛糠钟脩舨煊X。Windows8提供可用于保持應用磁貼最新和更新(即使在該應用掛起時)的Windows推送通知。推送通知針對系統(tǒng)性能和更長的設備電池壽命進行了優(yōu)化,因此最好盡可能使用Windows推送通知。如果掛起的應用必須運行自己的代碼來執(zhí)行其他類型的工作,則Windows8為該應用提供創(chuàng)建后臺任務的功能。盡管在Metro風格應用不在前臺運行時該應用無法運行任何代碼,但
Windows8中的系統(tǒng)事件代理將提供一個機制讓位于后臺的應用運行響應事件的代碼。應用可以使用系統(tǒng)事件代理注冊工作項以響應特定后臺代理的事件。當觸發(fā)后臺代理的事件時,Windows會運行應用的工作項,而不管該應用當前處于何種狀態(tài)(活動或掛起)。通常來說,后臺事件用于簡單觸發(fā)點,并不針對具有大量處理操作的信號。
同樣,每個應用的配額也基于后臺事件允許的處理時間。后臺事件由網
絡運營商API提供,其中包括MobileOperatorNotification事件和
HotspotAuthentication事件,Windows將這些事件視為關鍵事件。
與Windows8中的常規(guī)后臺事件相比,與MobileOperatorNotification和HotspotAuthentication事件關聯(lián)的后臺工作項將執(zhí)行事件的每個實例,而不考慮處理時間配額,盡管后臺工作項的每個實例都會受到處理時間配額的限制。應注意,在后臺事件處理程序中應僅執(zhí)行最少的處理并且將較大處理推遲留給應用程序處理。有關HotspotAuthentication后臺事件的詳細信息,請參閱\hWindows8無線熱點運營商集成。術語和定義本書使用以下術語:后臺任務由應用實現(xiàn)的類或JavaScript頁面,即使在應用不在前臺的情況下也可以提供功能。后臺觸發(fā)器系統(tǒng)定義的事件,應用可以將其與后臺任務關聯(lián)。當系統(tǒng)觸發(fā)觸發(fā)器時,將啟動與該觸發(fā)器關聯(lián)的應用后臺任務。前臺應用用戶正在主動與其交互的應用。MobileOperatorNotification場景連接到移動寬帶和斷開與移動寬帶的連接網絡運營商消息Windows8中的移動寬帶平臺僅為運營商的Metro風格設備應用提供可用的增強功能,以接收和顯示傳入SMS和網絡啟動的USSD運營商管理消息。這些消息可用于用戶通知,例如,接近數(shù)據使用量上限、國際漫游或余量不足,或者用于觸發(fā)來自運營商的應用的響應。應用適當?shù)靥幚韨魅胂?。可能的響應包括以下任意或全部內容:立即同步當前?shù)據使用量更新Metro風格應用的磁貼檢索并應用更新的運營商設置XML向用戶顯示toast通知,例如:用戶可以點擊或單擊要直接發(fā)送給運營商的應用的通知,如下圖所示。如果運營商希望在應用中顯示消息,則MobileOperatorNotification事件觸發(fā)的后臺任務需要讀取消息內容并將消息內容存儲至應用自己的本地數(shù)據存儲中。移動寬帶SMS平臺不保留過去接收到的管理SMS通知隊列。移動網絡運營商SMS通知傳入SMS消息可用于已請求和授予對電腦上SMS功能的訪問權限的所有應用。但是,某些SMS消息直接來自運營商并應限制用于該運營商的應用并由該應用處理。移動寬帶SMS平臺篩選每個新接收的以下兩種類型之一的SMS:來自MNO的管理(“無提示”)SMS通知和常規(guī)SMS消息。從移動網絡運營商處接收的管理SMS通知僅可由MNOMetro風格應用訪問,并在常規(guī)SMS客戶端應用中隱藏。移動網絡運營商在帳戶設置元數(shù)據中為管理SMS和USSD通知指定自定義篩選規(guī)則。如果未指定消息篩選規(guī)則,則SMS平臺將所有SMS消息分類作為可用于所有應用的常規(guī)SMS消息。如果傳入SMS與設置的篩選規(guī)則相匹配,則觸發(fā)MobileOperatorNotification事件并且后臺工作項可以相應地處理傳入SMS消息。網絡啟動的USSD以本地方式觸發(fā)數(shù)據使用量和漫游通知在許多市場中,監(jiān)管法律要求移動網絡運營商通知用戶當達到其數(shù)據使用限制時或該用戶正在更貴的網絡中漫游。此消費者保護措施將減少“帳單震撼”或者非常高的使用費用的風險。在Windows中,運營商的移動寬帶應用可以顯示toast通知和磁貼更新以確保用戶意識到數(shù)據使用量和漫游狀態(tài)。這些通知可通過SMS或USSD從運營商的網絡后端啟動,這將觸發(fā)MobileOperatorNotification事件,如上例所示。此外,在以下情況中使用本地信息也可觸發(fā)MobileOperatorNotification事件。通過本地數(shù)據計數(shù)器的數(shù)據使用量通知運營商通過設置元數(shù)據啟動本地數(shù)據使用量通知。本地數(shù)據計數(shù)器評估自上次更新后更改量超過用戶數(shù)據限制5%的配置文件上的使用量。數(shù)據使用量和訂閱管理器(DUSM)通知系統(tǒng)事件代理觸發(fā)
MobileOperatorNotification事件。系統(tǒng)事件代理調用運營商的應用來處理后臺事件。應用通過從運營商的后端基礎結構中檢索最新使用量信息來處理事件。如果當前使用量信息超過閾值(例如80%),則應用將向用戶顯示一個toast通知并用當前使用量更新DUSM。此外,如果當前使用量沒有超過閾值,則應用無需顯示toast通知。通過Windows連接管理器的漫游通知Windows連接管理器在將連接報告為“漫游”的移動寬帶網絡上注冊。Windows連接管理器通知系統(tǒng)事件代理觸發(fā)MobileOperator
Notification事件。系統(tǒng)事件代理調用運營商的應用來處理后臺事件。應用識別用戶在此網絡上漫游時是否會產生額外使用費用,并且如果需要會向用戶顯示一個toast通知和磁貼更新。數(shù)據計劃到期和使用量重置對于后付費數(shù)據計劃,DUSM在特定日期將計劃數(shù)據使用量重置為零,例如每月的第一天。進行重置時,會觸發(fā)MobileOperatorNotification事件,且應用可以通知用戶已更新的數(shù)據使用量。MobileOperatorNotification事件詳細技術信息事件負載MobileOperatorNotification事件負載包括以下字段:MessageType–觸發(fā)事件的消息的枚舉。Interface–對應于與事件關聯(lián)的物理接口的GUID。EncodingType–如果MessageType為SMS/USSD,則該字段為消息的編碼方法。MessageDataSize–如果MessageType為SMS/USSD,則該字段為消息的大小,以字節(jié)為單位。Message–如果MessageType為SMS/USSD,則該字段為收到的原始消息。通過使用事件負載中的MessageType字段區(qū)分這些方案,MobileOperatorNotification事件可以啟用上述每個方案。對MessageTypes進行枚舉,如下所示:GSMSMSCDMASMSUSSDDataPlanThresholdReachedDataPlanResetDataPlanDeletedProfileConnectedProfileDisconnectedRegisteredRoamingRegisteredHome與MobileOperatorNotification事件關聯(lián)的工作項應從高效區(qū)分
MessageType的邏輯開始并為每個方案執(zhí)行適當?shù)拇a。GSM/CDMASMS和USSD傳入的運營商消息(包括SMS和USSD)將根據正確對應的MessageTypes觸發(fā)MobileOperatorNotification事件。只有這些類型具有EncodingType、MessageDataSize和Message。DataPlanThresholdReached默認情況下,此消息類型處于禁用狀態(tài)。必須通過使用設置元數(shù)據指定
DataUsageInMobileOperatorNotificationEnable字段來啟用此字段,
如下所示。<?xmlversion="1.0"?><CarrierProvisioningxmlns="/networking/CarrierControl/v1"><Global><CarrierId>{2c85b76b-f859-47c4-8122-721fe8b6c25f}</CarrierId><SubscriberId>012345678901234</SubscriberId></Global><MBNProfiles><DefaultProfilexmlns="/networking/CarrierControl/WWAN/v1"><Name>Contoso</Name><AssociatedPlan>SamplePlan</AssociatedPlan><Context><AccessString>C</AccessString><UserLogonCred><UserName>User</UserName><Password>secret</Password></UserLogonCred></Context></DefaultProfile></MBNProfiles><Plans><Planxmlns="/networking/CarrierControl/Plans/v1"Name="SamplePlan"><DescriptionPlanType="Fixed"><DataLimitInMegabytes>500</DataLimitInMegabytes><DataUsageInMobileOperatorNotificationEnabled>true</DataUsageInMobileOperatorNotificationEnabled></Description></Plan></Plans></CarrierProvisioning>有關其他詳細信息,請參閱\h提供移動寬帶元數(shù)據。除了以下兩種情況,當本地數(shù)據計數(shù)器評估自上次事件發(fā)生后在移動寬帶接口上的使用量(發(fā)送和接收的字節(jié))達到5%的變化時,將使用此MessageType生成事件:當連接到家庭網絡(非漫游)時,如果未指定數(shù)據計劃限制,則每使用100MB本地數(shù)據觸發(fā)此事件一次。當連接到漫游網絡時,數(shù)據計劃限制將不適用,并且每使用5MB本地數(shù)據觸發(fā)此事件一次。Windows8中的本地數(shù)據計數(shù)器以1分鐘的頻率進行更新;在上面描述的所有情況下,最多每分鐘生成此事件一次。必須注意的是,盡管可將此信息視為良好的初級指導值,但Windows無法將未計費流量或共享同一數(shù)據限制(例如,家庭計劃或SIM對換)的其他設備上的使用量也計算在內。運營商應用僅應將本地數(shù)據計數(shù)器用于自上次與運營商所有的計費系統(tǒng)同步后粗略估計使用量。對于已使用的數(shù)據使用量,應將計費系統(tǒng)提供的信息視為權威信息。DataPlanReset在計劃重置日期當日,DUSM將用戶的當前本地數(shù)據使用量重置為零。DataPlanDeleted ProfileConnected和ProfileDisconnected當Windows連接管理器連接到運營商體驗元數(shù)據提供的網絡配置文件時,將生成具有這些MessageTypes的MobileOperatorNotification事件。此事件將在每次連接和斷開連接時觸發(fā),其中包括睡眠/恢復后的初始連接。\hRegisteredRoaming和RegisteredHome當Windows連接管理器注冊到報告為漫游的網絡時,將生成具有這些
MessageTypes的MobileOperatorNotification事件。此事件將在每次注冊時觸發(fā),其中包括睡眠/恢復后的初始注冊。應用會僅在用戶在漫游網絡上注冊時和在用戶返回其所屬網絡時通知該用戶。由于此事件在每次注冊時觸發(fā),因此該應用負責在應用的會話數(shù)據中跟蹤以前注冊的狀態(tài)。通過元數(shù)據注冊MobileOperatorNotification事件通常情況下,應用必須由用戶至少運行一次才可通過系統(tǒng)事件代理注冊工作項。但是,由于完成關鍵移動寬帶方案需要使用MobileOperatorNotification事件,因此此事件通過移動寬帶服務元數(shù)據與移動寬帶應用相關聯(lián)。在服務元數(shù)據中,添加以下條目:\Package\SoftwareInformation\SoftwareInfo.xml<DeviceCompanionApplications> <Package> <Applications> <ApplicationId="MyOperatorNotification"/><DeviceNotificationHandlers><DeviceNotificationHandlerEventID="MobileOperatorNotificationHandler"EventAsset="backgroundtask.js"/></DeviceNotificationHandlers></Applications> </Package></DeviceCompanionApplications>如果Metro風格應用為C#應用,則事件資產必須指向實現(xiàn)backgroundtask接口的運行時類。<DeviceNotificationHandlers><DeviceNotificationHandlerEventID="MobileOperatorNotificationHandler"EventAsset="MNOMessageBackground.OperatorNotification"/>下載元數(shù)據和應用時,設備設置管理器通過系統(tǒng)事件代理注冊相應的工作項之后,應用才可運行一次。在元數(shù)據中更改后臺任務注冊如果在更新版本的Metro風格應用中更改后臺任務入口點,也需要更改元數(shù)據中的DeviceNotificationHandler。雖然最終用戶需要在Windows應用商店中手動更新Metro風格應用,但是
會在Windows8電腦上自動更新元數(shù)據。開發(fā)人員應避免在元數(shù)據中更改
DeviceNotificationHandler后臺任務注冊。如果需要進行更改,則元數(shù)據應包含對所有受支持版本的Metro風格應用中使用的所有不同后臺任務入口點的引用,以便為尚未手動更新Metro風格應用的最終用戶保留功能。在設置XML中定義篩選規(guī)則Windows使用來自運營商的元數(shù)據信息來自定義Windows8的各個方面,其中包括提供數(shù)據以設置電腦。設置XML用于指定自定義篩選規(guī)則以區(qū)分運營商SMS與USSD通知。有關討論的元數(shù)據和設置的詳細信息,請參閱\h提供移動寬帶元數(shù)據。Windows接受來自運營商的基于XML的設置文件。設置XML的示例版本如下所示:<?xmlversion="1.0"encoding="utf-8"?><CarrierProvisioningxmlns="/networking/CarrierControl/v1"><Global><!--AdjusttheCarrierIDtofitmatchtheServiceNumberinservicemetadata.RefertotheMSDNdocumentationaboutCarrierId.--><CarrierId>{11111111-1111-1111-1111-111111111111}</CarrierId><!--AdjusttheSusbscriberID.RefertotheMSDNdocumentationaboutSubscriberID's.--><SubscriberId>1234567890</SubscriberId></Global><MBNProfiles><DefaultProfilexmlns="/networking/CarrierControl/WWAN/v1"><!--Adjusttheprofilename--><Name>Contoso</Name><AssociatedPlan>Limited</AssociatedPlan><!--AdjustthehomeprovidernameforthegivenSIM/Device--><HomeProviderName>Contoso</HomeProviderName><Context><!--AdjusttheaccessstringtoyourAPN.--><AccessString>Contoso.Contoso</AccessString><!--AdjusttheUserLogonCredtofityourUserLogonCred.RefertotheMSDNdocumentationaboutUserLogonCred's.--><UserLogonCred><UserName>user</UserName><Password>password</Password></UserLogonCred></Context></DefaultProfile><Messagesxmlns="/networking/CarrierControl/WWAN/v1"><MessageRuleId="Sample1"Silent="true"><SMSBearerClassZeroOnly="false"Sender=/><!--[^]*matchesallmessagesfromthissender,regardlessofcontent--><Pattern>[^]*</Pattern><!--BecausenoFieldsarespecified,thismessagewillbepassedtotheoperatorappwithoutparsing.--></Message><MessageRuleId="Sample2"Silent="false"><!--Parsingasimpleusagemessage.--><USSDBearer/><Pattern>(\d+\.\d+)(\w+)of(\d+)(\w+)usedasof(\S+)</Pattern><!--Usingthesefielddefinitions,Windowswillautomaticallyupdateusagedatabeforepassingthemessagetotheoperatorapp.--><UnitsG="GB"M="MB"/><Fields><!--Thesefieldsarecurrentlyunordered,butanorderwillberequiredinRC.--><UsageGroup="1"UnitGroup="2"/><UsageTimestampGroup="5"Format="%I:%M%pon%d%b"/><DataLimitGroup="3"UnitGroup="4"/></Fields></Message></Messages></MBNProfiles><Provisioning/></CarrierProvisioning>將文本消息標識為運營商消息的規(guī)則可在此XML中定義。允許的發(fā)件人:“Sender”特性用于指定允許通知從其發(fā)出的保留發(fā)件人地址。(此數(shù)字必須與SMS消息中接收到的發(fā)件人編號精確匹配,其中包括國際格式)。模式:用于標識和可選地從文字消息中提取數(shù)據字段的正則表達式。要匹配來自某個發(fā)件人的所有消息,請使用模式[^]*更多信息可在\h提供移動寬帶元數(shù)據中找到。開發(fā)處理MobileOperatorNotification事件的應用最佳做法關于后臺事件的處理,應遵守以下最佳做法:請勿注冊你無法對其采取操作的后臺事件。處理這些事件將不必要地占用應用程序配額。請勿在接收到后臺事件時執(zhí)行大量處理。請考慮將處理推遲到下次應用啟動時。請考慮顯示toast通知和更新磁貼以響應后臺事件??梢詥覯etro風格應用來處理后臺事件負載。有關Windows8中后臺事件模型的詳細信息,請參閱\h后臺任務簡介。第1步:后臺任務合約聲明若要使Windows可以識別移動運營商的Metro風格設備應用提供的后臺任務體驗,該應用必須聲明它提供了系統(tǒng)功能的擴展。若要在VisualStudio11項目的package.appxmanifest文件中做出聲明,請遵循以下步驟:在MicrosoftVisualStudio2021中,在解決方案資源管理器中雙擊你的項目的package.appxmanifest文件。在“聲明”選項卡中,從“可用聲明”中選擇“后臺任務”,然后單擊“添加”。在“屬性”下輸入應用信息。對于使用JavaScript和HTML的Metro風格設備應用,在應用程序設置的StartPage字段中輸入在應用中處理后臺任務的文件名(例如backgroundtask.js)。對于“支持的任務類型”,請選擇“系統(tǒng)事件”。下圖顯示了采用C#的此過程:下圖顯示了采用JavaScript的此過程:假如操作正確,當使用Notepad打開package.appxmanifest時,會看到以下代碼:<Applications><ApplicationId=…>......<ExtensionCategory="windows.backgroundTasks"StartPage="backgroundtask.js"><BackgroundTasks><TaskType="systemEvent"/></BackgroundTasks></Extension>......</Application></Applications>第2步:后臺任務處理程序如果應用提供移動運營商通知聲明,則必須提供用于該后臺任務激活的處理程序。該處理程序將從以下位置中獲取移動運營商網絡帳戶ID和事件數(shù)據:
(Windows.Networking.NetworkOperators.NetworkOperator
NotificationEventDetails)。由于后臺任務支持的唯一UI為Toast,因此后臺任務處理程序可以顯示Toast或將NetworkOperatorNotificationEventDetails保存到本地存儲中。以下代碼示例顯示了可在接收到新的管理SMS通知時運行的后臺任務。C#:usingWindows.Networking.NetworkOperators;namespaceMNOMessageBackground{publicsealedclassMNOBackgroundTask:IBackgroundTask{publicvoidRun(Windows.ApplicationModel.Background.IBackgroundTaskInstancetaskInstance){ NetworkOperatorNotificationEventDetailsnotifyData=(NetworkOperatorNotificationEventDetails)taskInstance.TriggerDetails;//ThenetworkaccountIDisstoredinnotifyData.NetworkAccountId.switch(notifyData.NotificationType){caseNetworkOperatorEventMessageType.Gsm://0break;caseNetworkOperatorEventMessageType.Cdma://1break;caseNetworkOperatorEventMessageType.Ussd://2break;caseNetworkOperatorEventMessageType.DataPlanThresholdReached://3break;caseNetworkOperatorEventMessageType.DataPlanReset://4break;caseNetworkOperatorEventMessageType.DataPlanDeleted://5break;caseNetworkOperatorEventMessageType.ProfileConnected://6break;caseNetworkOperatorEventMessageType.ProfileDisconnected://7break;caseNetworkOperatorEventMessageType.RegisteredRoaming://8break;caseNetworkOperatorEventMessageType.RegisteredHome:///9break;default:break;} //Addcodetosavethemessagetoapplocalstorage,andoptionallyshowtoastnotificationandtileupdates.}}}JavaScript:(function(){"usestrict";////Thebackgroundtaskinstance'sactivationparametersareavailablevia//Windows.UI.WebUI.WebUIBackgroundTaskInstance.current.//varbackgroundTaskInstance=Windows.UI.WebUI.WebUIBackgroundTaskInstance.current,networkOperatorEventType=Windows.Networking.NetworkOperators.NetworkOperatorEventMessageType,key=null,settings=Windows.Storage.ApplicationData.current.localSettings;try{vardetails=backgroundTaskInstance.triggerDetails;//ThenetworkaccountIDisstoredinworkAccountId.switch(details.notificationType){casenetworkOperatorEventType.gsm:showToast("MobileBroadbandmessage",details.message);break;casenetworkOperatorEventType.cdma:showToast("MobileBroadbandmessage",details.message);break;casenetworkOperatorEventType.ussd:showToast("MobileBroadbandmessage",details.message);break;casenetworkOperatorEventType.dataPlanThresholdReached:showToast("MobileBroadbandmessage","Dataplanthresholdreached");break;casenetworkOperatorEventType.dataPlanReset:showToast("MobileBroadbandmessage","Dataplanreset");break;casenetworkOperatorEventType.dataPlanDeleted:showToast("MobileBroadbandmessage","Dataplandeleted");break;casenetworkOperatorEventTfileConnected:showToast("MobileBroadbandmessage","Profileconnected");break;casenetworkOperatorEventTfileDisconnected:showToast("MobileBroadbandmessage","Profiledisconnected");break;casenetworkOperatorEventType.registeredRoaming:showToast("MobileBroadbandmessage","Registeredroaming");break;casenetworkOperatorEventType.registeredHome:showToast("MobileBroadbandmessage","Registeredhome");break;default:showToast("MobileBroadbandmessage","Unknownmessage");break;}////AJavaScriptbackgroundtaskmustcallclosewhenitisdone.//close();}catch(exception){//Displayerrormessage.close();}顯示toast通知有關toast通知和磁貼更新體驗設計指南,請參閱\h移動運營商應用的用戶體驗設計。為了顯示toast通知,應用需要在.appxmanifest的“通知”部分中指定
“ToastCapable”。以下代碼表明已在package.appxmanifest文件中設置了“ToastCapable”(如果使用記事本查看該文件的話)。<Applications><ApplicationId=…><VisualElementsToastCapable="true"…......</Application></Applications>以下代碼展示如何使用JavaScript在后臺任務處理程序中顯示toast通知。JavaScript:functionshowToast(title,body){varnotifications=Windows.UI.Notifications;vartoastXml=vartemp="theparameterwillpasstoappwhenappactivatedfromtapToast";toastXml.selectSingleNode("/toast").setAttribute("launch",temp);vartextNodes=toastXml.getElementsByTagName("text");textNodes[0].appendChild(toastXml.createTextNode(title));textNodes[1].appendChild(toastXml.createTextNode(body));vartoast=newnotifications.ToastNotification(toastXml);toastNotificationManager.createToastNotifier().show(toast);}獲取短信JavaScript:(function(){"usestrict";////Thebackgroundtaskinstance'sactivationparametersareavailablevia//Windows.UI.WebUI.WebUIBackgroundTaskInstance.current.//varbackgroundTaskInstance=Windows.UI.WebUI.WebUIBackgroundTaskInstance.current,try{vardetails=backgroundTaskInstance.triggerDetails;if(details.notificationType===networkOperatorEventType.gsm||details.notificationType===networkOperatorEventType.cdma){ vartextMessage=newWindows.Devices.Sms.SmsTextMessage.fromBinaryMessage(details.smsMessage);//textMessagecanbeusedtogetotherSmsMessageproperties//likesendernumber,timestamp,messagepartcountetc.showToast("From:"+textMessage.from+";TimeStamp:"+textMessage.timestamp,details.message);}使用本地存儲后臺任務可以使用本地存儲來保存從后臺事件中獲取的消息,以便應用可以在稍后使用該信息。以下代碼展示了如何使用本地存儲來存儲消息。////Savethemessage//varsettings=Windows.Storage.ApplicationData.current.localSettings;varkeyMessage="BA5857FA-DE2C-4A4A-BEF2-49D8B4130A39";////Thebackgroundtaskinstance'sactivationparametersareavailablevia//Windows.UI.WebUI.WebUIBackgroundTaskInstance.current//varbackgroundTaskInstance=Windows.UI.WebUI.WebUIBackgroundTaskInstance.current;vardetails=backgroundTaskInstance.triggerDetails;settings.values[keyMessage]=details.message;以下代碼展示了如何在應用中檢索后臺任務處理程序存儲的消息。varsettings=Windows.Storage.ApplicationData.current.localSettings;varkeyMessage="BA5857FA-DE2C-4A4A-BEF2-49D8B4130A39";varoperatorMessage=settings.values[keyMessage];第3步:處理激活事件如果后臺任務處理程序顯示Toast,則可以通過點擊Toast來啟動應用。如果
toast設置了參數(shù),則將通過detail.arguments將其傳遞給應用。以下代碼展示了如何使用JavaScript附加事件處理程序和確定應用上下文。WinJS.Application.addEventListener("activated",activated;false);functionactivated(eventArgs){if(eventArgs.detail.kind===Windows.ApplicationModel.Activation.ActivationKind.launch){if(!eventArgs.detail.arguments){//InitializelogicfortheStartexperiencehere.}else{//InitializelogicfortheNotificationexperiencehere.}}}有關詳細信息,請參閱\h后臺任務簡介。第4步:處理后臺任務完成處理程序在后臺任務完成時,前臺應用也可以注冊要通知的完成處理程序。在后臺任務的“運行”方法中發(fā)生的完成狀態(tài)或任何例外將傳遞到前臺應用中的完成處理程序中。如果應用在任務完成時已掛起,則下次應用恢復時將接收到完成通知。如果應用已處于“已終止”狀態(tài),則不會接收到完成通知。如果后臺任務需要保留其運行成功的信息,則它必須使用狀態(tài)管理器或其他方法保留該信息,例如當應用恢復“正在運行”狀態(tài)時可以讀取的文件。盡管移動運營商后臺事件可由系統(tǒng)為應用自動注冊,但如果應用希望注冊到后臺完成或進度處理程序,則該應用仍需要至少運行一次。以下代碼展示了如何將事件處理程序附加到后臺事件中。有關后臺任務進度報告和完成處理程序的詳細信息,請參閱后臺任務簡介。注意:在Windows8ConsumerPreview中,事件名稱可能為空。作為一種解決方法,將任務名稱與“”進行比較。C#:foreach(varcurinBackgroundTaskRegistration.AllTasks){if(cur.Value.Name==“MobileOperatorNotificationHandler”){cur.Value.Progress+=newBackgroundTaskProgressEventHandler(OnProgress);cur.Value.Completed+=newBackgroundTaskCompletedEventHandler(OnCompleted);}}////Handlebackgroundtaskcompletion.//privatevoidOnCompleted(IBackgroundTaskRegistrationsender,BackgroundTaskCompletedEventArgse){vartaskCompletion=taskasIBackgroundTaskRegistration;varcompletionArgs=args.ContextasBackgroundTaskCompletedEventArgs;////Ifthebackgroundtaskthrewanexception,displaytheexceptionin//theerrortextbox.//if(completionArgs.Status!=null){throwcompletionArgs.Status;}}////Handlebackgroundtaskprogress.//privatevoidOnProgress(IBackgroundTaskRegistrationsender,BackgroundTaskProgressEventArgse){vartaskRegistration=taskasIBackgroundTaskRegistration;varprogressArgs=args.ContextasBackgroundTaskProgressEventArgs;//progressArgs.Progresshastheprogresspercentage}JavaScript:variter=Windows.ApplicationModel.Background.BackgroundTaskRegistration.allTasks.first();varhascur=iter.hasCurrent;while(hascur){varcur=iter.current.value;if(===“MobileOperatorNotificationHandler”){cur.addEventListener("progress",newProgressHandler(cur).onProgress);cur.addEventListener("completed",newCompleteHandler(cur).onCompleted);}hascur=iter.moveNext();}////Handlebackgroundtaskprogress.//functionProgressHandler(task){this.onProgress=function(args){try{varprogress="Progress:"+gress+"%";}catch(ex){displayError(ex);}};}////Handlebackgroundtaskcompletion.//functionCompleteHandler(task){this.onCompleted=function(args){try{varkey=task.taskId;}catch(ex){displayError(ex);}};}疑難解答觸發(fā)元數(shù)據分析以注冊后臺任務開發(fā)人員可通過在桌面的“設備和打印機”窗口中按F5鍵(或右鍵單擊并選擇“刷新”),手動觸發(fā)Windows8以分析服務元數(shù)據并注冊后臺任務。僅當部署應用時,通過服務元數(shù)據分析進行后臺任務注冊才會成功。驗證是否已正確注冊后臺任務開發(fā)人員可通過查看ApplicationandServicesLogs\Microsoft\Windows\
DeviceSetupManager下的事件日志,驗證設備設置管理器(DSM)是否已正確分析服務元數(shù)據。打開“事件查看器”。在“開始”頁上,鍵入“事件查看器”并在“搜索”窗格中選擇設置。單擊“查看事件日志”。在菜單選項卡上,選擇“查看”,然后選擇“顯示分析和調試日志”。瀏覽到ApplicationsandServicesLogs\Microsoft\Windows\
DeviceSetupManager。\h驗證是否已成功應用設置元數(shù)據設置文件中的CarrierId和體驗元數(shù)據中的服務編號之間不匹配驗證系統(tǒng)事件代理是否正在執(zhí)行后臺任務開發(fā)人員可通過檢查事件查看器,驗證Windows是否正在生成
MobileOperatorNotification事件并且事件代理正在執(zhí)行應用的后臺任務。
默認情況下,對這些事件的記錄處于禁用狀態(tài),可通過以下步驟啟用:打開“事件查看器”。在“開始”頁上,鍵入“事件查看器”并在“搜索”窗格中選擇設置。單擊“查看事件日志”。瀏覽到ApplicationsandServicesLogs\Microsoft\Windows\
BackgroundTaskInfrastructure。右鍵單擊“診斷”日志并選擇“啟用日志”。如果未正在執(zhí)行后臺任務,請首先驗證在服務元數(shù)據中指定的你的后臺任務的名稱是否與你的程序包的AppXManifest.xml文件中的名稱相匹配。然后,
在部署應用并插入移動寬帶設備后,驗證是否已觸發(fā)對服務元數(shù)據的分析。驗證Windows是否正在接收SMS和USSD開發(fā)人員可通過在事件查看器中檢查SmsRouter事件來驗證Windows是否正在接收SMS和USSD通知。未將收到的短信檢測為運營商通知如果未將收到的SMS檢測為運營商通知,請在帳戶設置元數(shù)據中驗證SMS管理通知的自定義篩選規(guī)則。有關詳細信息,請參閱\h提供移動寬帶元數(shù)據。尤其是,如果指定發(fā)件人號碼,請驗證指定的號碼格式匹配通過SMSAPI收到的消息中的格式。若要驗證這已正確匹配,請將模式臨時更改為“[^]*”,以匹配來自此發(fā)件人的所有消息。附錄backgroundtask.js示例文件:////AJavaScriptbackgroundtaskrunsaspecifiedJavaScriptfile.//(function(){"usestrict";////Thebackgroundtaskinstance'sactivationparametersareavailableviaWindows.UI.WebUI.WebUIBackgroundTaskInstance.current.//varbackgroundTaskInstance=Windows.UI.WebUI.WebUIBackgroundTaskInstance.current,networkOperatorEventType=Windows.Networking.NetworkOperators.NetworkOperatorEventMessageType,key=null,settings=Windows.Storage.ApplicationData.current.localSettings;try{vardetails=backgroundTaskInstance.triggerDetails;switch(details.notificationType){casenetworkOperatorEventType.gsm:vartextMessage=newWindows.Devices.Sms.SmsTextMessage.fromBinaryMessage(details.smsMessage);showToast("GsmMsgFrom:"+textMessage.from+";TimeStamp:"+textMessage.timestamp,details.message);break;casenetworkOperatorEventType.cdma:showToast("MobileBroadbandmessage",details.message);break;casenetworkOperatorEventType.ussd:showToast("MobileBroadbandmessage",details.message);break;casenetworkOperatorEventType.dataPlanThresholdReached:showToast("MobileBroadbandmessage","Dataplanthresholdreached");break;casenetworkOperatorEventType.dataPlanReset:showToast("MobileBroadbandmessage","Dataplanreset");break;casenetworkOperatorEventType.dataPlanDeleted:showToast("MobileBroadbandmessage","Dataplandeleted");break;casenetworkOperatorEventTfileConnected:showToast("MobileBroadbandmessage","Profileconnected");break;casenetworkOperatorEventTfileDisconnected:showToast("MobileBroadbandmessage","Profiledisconnected");break;casenetworkOperatorEventType.registeredRoaming:showToast("MobileBroadbandmessage","Registeredroaming");break;casenetworkOperatorEventType.registeredHome:showToast("MobileBroadbandmessage","Registeredhome");break;default:showToast("MobileBroadbandmessage","Unknownmessage");break;}taskSucceeded();}catch(exception){taskFailed();}functionshowToast(title,body){varnotifications=Windows.UI.Notifications;vartoastNotificationManager=Windows.UI.Notifications.ToastNotificationManager;vartoastXml=toastNotificationManager.getTemplateContent(notifications.ToastTemplateType.toastText02);////PasstoappthrougheventArguments.arguments.//vartemp="\"Title\""+":"+"\""+title+"\""+","+"\"Message\""+":"+"\""+body+"\"";if(temp.length>251){temp=temp.substring(0,251);}toastXml.selectSingleNode("/toast").setAttribute("launch","'{"+temp+"}'");vartextNodes=toastXml.getElementsByTagName("text");textNodes[0].appendChild(toastXml.createTextNode(title));textNodes[1].appendChild(toastXml.createTextNode(body));vartoast=newnotifications.ToastNotification(toastXml);toastNotificationManager.createToastNotifier().show(toast);}////Thisfunctioniscalledwhenthebackgroundtaskiscompletedsuccessfully.//functiontaskSucceeded(){////Usethesucceededpropertytoindicatethatthisbackgroundtaskcompletedsuccessfully.//backgroundTaskInstance.succeeded=true;backgroundTask.task
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 預防擁擠踩踏班會課件
- 攜手抗疫守護健康
- 我為健康而來主題演講大綱
- 健康飲食產業(yè)園項目風險管理方案
- 電網側獨立儲能示范項目資金申請報告(參考)
- 2025年高效的鍋爐鼓、引風機項目發(fā)展計劃
- 系統(tǒng)解剖學試題(附參考答案)
- 2025年環(huán)保節(jié)能型冷卻塔項目合作計劃書
- 物業(yè)管理企業(yè)財務管理規(guī)定
- 武漢體育學院附屬體育運動學校招聘真題
- 2024-2025學年下學期高一數(shù)學人教A版期末必刷??碱}之頻率與概率
- 設備易損配件管理制度
- 青霉素過敏反應的急救
- 2025-2030中國鋁業(yè)發(fā)展狀況與投資戰(zhàn)略研究報告
- 2025年國家醫(yī)療器械抽檢品種檢驗方案
- 防汛物資儲備定額編制規(guī)程(SL298-2024)
- 無人機培訓創(chuàng)業(yè)計劃書-20250205-222450
- 輿情分析試題及答案
- 營運車輛入股協(xié)議書
- 高中數(shù)學專項提升計劃
- 2025年國家公務員考錄《申論》真題及參考答案(行政執(zhí)法卷)
評論
0/150
提交評論