




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
移動(dòng)運(yùn)營商通知和系統(tǒng)事件摘要本白皮書提供有關(guān)Windows8的移動(dòng)運(yùn)營商通知系統(tǒng)事件的信息。它向移動(dòng)運(yùn)營商提供了用于開發(fā)移動(dòng)寬帶Metro風(fēng)格應(yīng)用的指南,從而可以有效處理基于SMS或USSD的傳入移動(dòng)運(yùn)營商通知和相關(guān)移動(dòng)寬帶系統(tǒng)事件。本書假定讀者熟悉Windows移動(dòng)寬帶平臺(tái)和Metro風(fēng)格應(yīng)用開發(fā)的基本概念。該信息適用于以下操作系統(tǒng):
Windows8 此處討論的參考和資源均會(huì)在本書末尾部分列出。本白皮書的當(dāng)前版本在以下Web維護(hù):
移動(dòng)運(yùn)營商通知和系統(tǒng)事件免責(zé)聲明:本文檔按“原樣”提供。本文檔中所表達(dá)的信息和觀點(diǎn)(包括URL和其他Internet網(wǎng)站引用)如有更改,恕不另行通知。有些信息涉及預(yù)發(fā)行的產(chǎn)品,它在商業(yè)發(fā)布之前可能會(huì)大幅修改。Microsoft對(duì)在這里提供的信息不做任何明示或暗示的擔(dān)保。使用本文檔所帶來的風(fēng)險(xiǎn)由你自行承擔(dān)。此處所描述的一些例子是僅為演示的目的而虛構(gòu)。與真實(shí)世界無實(shí)際關(guān)聯(lián),也不應(yīng)以此作為推斷。本文檔不賦予任何Microsoft產(chǎn)品中的知識(shí)產(chǎn)權(quán)的法律權(quán)利。你可以復(fù)制和使用本文件作為內(nèi)部參考。?2021Microsoft。保留所有權(quán)利。文檔歷史記錄日期更改2021年8月15日更新了“ProfileConnected和ProfileDisconnected”中的信息,增加了有關(guān)“在元數(shù)據(jù)中更改后臺(tái)任務(wù)注冊”和“驗(yàn)證是否已成功應(yīng)用設(shè)置元數(shù)據(jù)”的信息,并且在“未將收到的短信檢測為運(yùn)營商通知”中增加了信息2021年6月8日闡明了ProfileConnected消息類型的傳遞時(shí)間2021年5月31日2021年2月28日首次發(fā)表目錄簡介客戶在Windows8上對(duì)運(yùn)營商品牌的主要體驗(yàn)為Metro風(fēng)格移動(dòng)寬帶設(shè)備應(yīng)用。此應(yīng)用不應(yīng)該用于提供主要的連接管理功能,而是應(yīng)該提供帳戶管理體驗(yàn)和服務(wù)體驗(yàn)。為了讓用戶可以接收其帳戶狀態(tài)的通知,應(yīng)用需要執(zhí)行某些活動(dòng),即使在用戶未與其交互時(shí)也是如此。這些活動(dòng)包括對(duì)運(yùn)營商SMS或網(wǎng)絡(luò)啟動(dòng)的USSD消息的響應(yīng),通知用戶他們已接近其數(shù)據(jù)限制,通知用戶其數(shù)據(jù)計(jì)劃已到期以及通知用戶其漫游狀態(tài)。Windows8中的后臺(tái)代理工作項(xiàng)Windows8引入了以全屏方式運(yùn)行的Metro風(fēng)格應(yīng)用,其中包括Metro風(fēng)格移動(dòng)寬帶設(shè)備應(yīng)用。最終用戶僅可以以前臺(tái)方式與應(yīng)用程序進(jìn)行交互。前臺(tái)應(yīng)用被假定為對(duì)用戶最重要,以便此應(yīng)用接收所有系統(tǒng)資源。如果應(yīng)用不在前臺(tái),則應(yīng)用將掛起且無法運(yùn)行任何代碼。掛起的應(yīng)用在用戶通過將應(yīng)用帶回前臺(tái)以恢復(fù)該應(yīng)用前保持的掛起狀態(tài)。采用這樣的應(yīng)用行為模型,用戶體驗(yàn)不會(huì)受到由于執(zhí)行不重要的后臺(tái)應(yīng)用而導(dǎo)致的滯后或延遲的影響。此外,減少不必要的后臺(tái)活動(dòng)可優(yōu)化各種機(jī)型上的電池的壽命?;謴?fù)掛起的應(yīng)用所花費(fèi)時(shí)間可以忽略不計(jì),并且?guī)缀醪粫?huì)被大部分用戶察覺。Windows8提供可用于保持應(yīng)用磁貼最新和更新(即使在該應(yīng)用掛起時(shí))的Windows推送通知。推送通知針對(duì)系統(tǒng)性能和更長的設(shè)備電池壽命進(jìn)行了優(yōu)化,因此最好盡可能使用Windows推送通知。如果掛起的應(yīng)用必須運(yùn)行自己的代碼來執(zhí)行其他類型的工作,則Windows8為該應(yīng)用提供創(chuàng)建后臺(tái)任務(wù)的功能。盡管在Metro風(fēng)格應(yīng)用不在前臺(tái)運(yùn)行時(shí)該應(yīng)用無法運(yùn)行任何代碼,但
Windows8中的系統(tǒng)事件代理將提供一個(gè)機(jī)制讓位于后臺(tái)的應(yīng)用運(yùn)行響應(yīng)事件的代碼。應(yīng)用可以使用系統(tǒng)事件代理注冊工作項(xiàng)以響應(yīng)特定后臺(tái)代理的事件。當(dāng)觸發(fā)后臺(tái)代理的事件時(shí),Windows會(huì)運(yùn)行應(yīng)用的工作項(xiàng),而不管該應(yīng)用當(dāng)前處于何種狀態(tài)(活動(dòng)或掛起)。通常來說,后臺(tái)事件用于簡單觸發(fā)點(diǎn),并不針對(duì)具有大量處理操作的信號(hào)。
同樣,每個(gè)應(yīng)用的配額也基于后臺(tái)事件允許的處理時(shí)間。后臺(tái)事件由網(wǎng)
絡(luò)運(yùn)營商API提供,其中包括MobileOperatorNotification事件和
HotspotAuthentication事件,Windows將這些事件視為關(guān)鍵事件。
與Windows8中的常規(guī)后臺(tái)事件相比,與MobileOperatorNotification和HotspotAuthentication事件關(guān)聯(lián)的后臺(tái)工作項(xiàng)將執(zhí)行事件的每個(gè)實(shí)例,而不考慮處理時(shí)間配額,盡管后臺(tái)工作項(xiàng)的每個(gè)實(shí)例都會(huì)受到處理時(shí)間配額的限制。應(yīng)注意,在后臺(tái)事件處理程序中應(yīng)僅執(zhí)行最少的處理并且將較大處理推遲留給應(yīng)用程序處理。有關(guān)HotspotAuthentication后臺(tái)事件的詳細(xì)信息,請參閱\hWindows8無線熱點(diǎn)運(yùn)營商集成。術(shù)語和定義本書使用以下術(shù)語:后臺(tái)任務(wù)由應(yīng)用實(shí)現(xiàn)的類或JavaScript頁面,即使在應(yīng)用不在前臺(tái)的情況下也可以提供功能。后臺(tái)觸發(fā)器系統(tǒng)定義的事件,應(yīng)用可以將其與后臺(tái)任務(wù)關(guān)聯(lián)。當(dāng)系統(tǒng)觸發(fā)觸發(fā)器時(shí),將啟動(dòng)與該觸發(fā)器關(guān)聯(lián)的應(yīng)用后臺(tái)任務(wù)。前臺(tái)應(yīng)用用戶正在主動(dòng)與其交互的應(yīng)用。MobileOperatorNotification場景連接到移動(dòng)寬帶和斷開與移動(dòng)寬帶的連接網(wǎng)絡(luò)運(yùn)營商消息Windows8中的移動(dòng)寬帶平臺(tái)僅為運(yùn)營商的Metro風(fēng)格設(shè)備應(yīng)用提供可用的增強(qiáng)功能,以接收和顯示傳入SMS和網(wǎng)絡(luò)啟動(dòng)的USSD運(yùn)營商管理消息。這些消息可用于用戶通知,例如,接近數(shù)據(jù)使用量上限、國際漫游或余量不足,或者用于觸發(fā)來自運(yùn)營商的應(yīng)用的響應(yīng)。應(yīng)用適當(dāng)?shù)靥幚韨魅胂???赡艿捻憫?yīng)包括以下任意或全部內(nèi)容:立即同步當(dāng)前數(shù)據(jù)使用量更新Metro風(fēng)格應(yīng)用的磁貼檢索并應(yīng)用更新的運(yùn)營商設(shè)置XML向用戶顯示toast通知,例如:用戶可以點(diǎn)擊或單擊要直接發(fā)送給運(yùn)營商的應(yīng)用的通知,如下圖所示。如果運(yùn)營商希望在應(yīng)用中顯示消息,則MobileOperatorNotification事件觸發(fā)的后臺(tái)任務(wù)需要讀取消息內(nèi)容并將消息內(nèi)容存儲(chǔ)至應(yīng)用自己的本地?cái)?shù)據(jù)存儲(chǔ)中。移動(dòng)寬帶SMS平臺(tái)不保留過去接收到的管理SMS通知隊(duì)列。移動(dòng)網(wǎng)絡(luò)運(yùn)營商SMS通知傳入SMS消息可用于已請求和授予對(duì)電腦上SMS功能的訪問權(quán)限的所有應(yīng)用。但是,某些SMS消息直接來自運(yùn)營商并應(yīng)限制用于該運(yùn)營商的應(yīng)用并由該應(yīng)用處理。移動(dòng)寬帶SMS平臺(tái)篩選每個(gè)新接收的以下兩種類型之一的SMS:來自MNO的管理(“無提示”)SMS通知和常規(guī)SMS消息。從移動(dòng)網(wǎng)絡(luò)運(yùn)營商處接收的管理SMS通知僅可由MNOMetro風(fēng)格應(yīng)用訪問,并在常規(guī)SMS客戶端應(yīng)用中隱藏。移動(dòng)網(wǎng)絡(luò)運(yùn)營商在帳戶設(shè)置元數(shù)據(jù)中為管理SMS和USSD通知指定自定義篩選規(guī)則。如果未指定消息篩選規(guī)則,則SMS平臺(tái)將所有SMS消息分類作為可用于所有應(yīng)用的常規(guī)SMS消息。如果傳入SMS與設(shè)置的篩選規(guī)則相匹配,則觸發(fā)MobileOperatorNotification事件并且后臺(tái)工作項(xiàng)可以相應(yīng)地處理傳入SMS消息。網(wǎng)絡(luò)啟動(dòng)的USSD以本地方式觸發(fā)數(shù)據(jù)使用量和漫游通知在許多市場中,監(jiān)管法律要求移動(dòng)網(wǎng)絡(luò)運(yùn)營商通知用戶當(dāng)達(dá)到其數(shù)據(jù)使用限制時(shí)或該用戶正在更貴的網(wǎng)絡(luò)中漫游。此消費(fèi)者保護(hù)措施將減少“帳單震撼”或者非常高的使用費(fèi)用的風(fēng)險(xiǎn)。在Windows中,運(yùn)營商的移動(dòng)寬帶應(yīng)用可以顯示toast通知和磁貼更新以確保用戶意識(shí)到數(shù)據(jù)使用量和漫游狀態(tài)。這些通知可通過SMS或USSD從運(yùn)營商的網(wǎng)絡(luò)后端啟動(dòng),這將觸發(fā)MobileOperatorNotification事件,如上例所示。此外,在以下情況中使用本地信息也可觸發(fā)MobileOperatorNotification事件。通過本地?cái)?shù)據(jù)計(jì)數(shù)器的數(shù)據(jù)使用量通知運(yùn)營商通過設(shè)置元數(shù)據(jù)啟動(dòng)本地?cái)?shù)據(jù)使用量通知。本地?cái)?shù)據(jù)計(jì)數(shù)器評(píng)估自上次更新后更改量超過用戶數(shù)據(jù)限制5%的配置文件上的使用量。數(shù)據(jù)使用量和訂閱管理器(DUSM)通知系統(tǒng)事件代理觸發(fā)
MobileOperatorNotification事件。系統(tǒng)事件代理調(diào)用運(yùn)營商的應(yīng)用來處理后臺(tái)事件。應(yīng)用通過從運(yùn)營商的后端基礎(chǔ)結(jié)構(gòu)中檢索最新使用量信息來處理事件。如果當(dāng)前使用量信息超過閾值(例如80%),則應(yīng)用將向用戶顯示一個(gè)toast通知并用當(dāng)前使用量更新DUSM。此外,如果當(dāng)前使用量沒有超過閾值,則應(yīng)用無需顯示toast通知。通過Windows連接管理器的漫游通知Windows連接管理器在將連接報(bào)告為“漫游”的移動(dòng)寬帶網(wǎng)絡(luò)上注冊。Windows連接管理器通知系統(tǒng)事件代理觸發(fā)MobileOperator
Notification事件。系統(tǒng)事件代理調(diào)用運(yùn)營商的應(yīng)用來處理后臺(tái)事件。應(yīng)用識(shí)別用戶在此網(wǎng)絡(luò)上漫游時(shí)是否會(huì)產(chǎn)生額外使用費(fèi)用,并且如果需要會(huì)向用戶顯示一個(gè)toast通知和磁貼更新。數(shù)據(jù)計(jì)劃到期和使用量重置對(duì)于后付費(fèi)數(shù)據(jù)計(jì)劃,DUSM在特定日期將計(jì)劃數(shù)據(jù)使用量重置為零,例如每月的第一天。進(jìn)行重置時(shí),會(huì)觸發(fā)MobileOperatorNotification事件,且應(yīng)用可以通知用戶已更新的數(shù)據(jù)使用量。MobileOperatorNotification事件詳細(xì)技術(shù)信息事件負(fù)載MobileOperatorNotification事件負(fù)載包括以下字段:MessageType–觸發(fā)事件的消息的枚舉。Interface–對(duì)應(yīng)于與事件關(guān)聯(lián)的物理接口的GUID。EncodingType–如果MessageType為SMS/USSD,則該字段為消息的編碼方法。MessageDataSize–如果MessageType為SMS/USSD,則該字段為消息的大小,以字節(jié)為單位。Message–如果MessageType為SMS/USSD,則該字段為收到的原始消息。通過使用事件負(fù)載中的MessageType字段區(qū)分這些方案,MobileOperatorNotification事件可以啟用上述每個(gè)方案。對(duì)MessageTypes進(jìn)行枚舉,如下所示:GSMSMSCDMASMSUSSDDataPlanThresholdReachedDataPlanResetDataPlanDeletedProfileConnectedProfileDisconnectedRegisteredRoamingRegisteredHome與MobileOperatorNotification事件關(guān)聯(lián)的工作項(xiàng)應(yīng)從高效區(qū)分
MessageType的邏輯開始并為每個(gè)方案執(zhí)行適當(dāng)?shù)拇a。GSM/CDMASMS和USSD傳入的運(yùn)營商消息(包括SMS和USSD)將根據(jù)正確對(duì)應(yīng)的MessageTypes觸發(fā)MobileOperatorNotification事件。只有這些類型具有EncodingType、MessageDataSize和Message。DataPlanThresholdReached默認(rèn)情況下,此消息類型處于禁用狀態(tài)。必須通過使用設(shè)置元數(shù)據(jù)指定
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>有關(guān)其他詳細(xì)信息,請參閱\h提供移動(dòng)寬帶元數(shù)據(jù)。除了以下兩種情況,當(dāng)本地?cái)?shù)據(jù)計(jì)數(shù)器評(píng)估自上次事件發(fā)生后在移動(dòng)寬帶接口上的使用量(發(fā)送和接收的字節(jié))達(dá)到5%的變化時(shí),將使用此MessageType生成事件:當(dāng)連接到家庭網(wǎng)絡(luò)(非漫游)時(shí),如果未指定數(shù)據(jù)計(jì)劃限制,則每使用100MB本地?cái)?shù)據(jù)觸發(fā)此事件一次。當(dāng)連接到漫游網(wǎng)絡(luò)時(shí),數(shù)據(jù)計(jì)劃限制將不適用,并且每使用5MB本地?cái)?shù)據(jù)觸發(fā)此事件一次。Windows8中的本地?cái)?shù)據(jù)計(jì)數(shù)器以1分鐘的頻率進(jìn)行更新;在上面描述的所有情況下,最多每分鐘生成此事件一次。必須注意的是,盡管可將此信息視為良好的初級(jí)指導(dǎo)值,但Windows無法將未計(jì)費(fèi)流量或共享同一數(shù)據(jù)限制(例如,家庭計(jì)劃或SIM對(duì)換)的其他設(shè)備上的使用量也計(jì)算在內(nèi)。運(yùn)營商應(yīng)用僅應(yīng)將本地?cái)?shù)據(jù)計(jì)數(shù)器用于自上次與運(yùn)營商所有的計(jì)費(fèi)系統(tǒng)同步后粗略估計(jì)使用量。對(duì)于已使用的數(shù)據(jù)使用量,應(yīng)將計(jì)費(fèi)系統(tǒng)提供的信息視為權(quán)威信息。DataPlanReset在計(jì)劃重置日期當(dāng)日,DUSM將用戶的當(dāng)前本地?cái)?shù)據(jù)使用量重置為零。DataPlanDeleted ProfileConnected和ProfileDisconnected當(dāng)Windows連接管理器連接到運(yùn)營商體驗(yàn)元數(shù)據(jù)提供的網(wǎng)絡(luò)配置文件時(shí),將生成具有這些MessageTypes的MobileOperatorNotification事件。此事件將在每次連接和斷開連接時(shí)觸發(fā),其中包括睡眠/恢復(fù)后的初始連接。\hRegisteredRoaming和RegisteredHome當(dāng)Windows連接管理器注冊到報(bào)告為漫游的網(wǎng)絡(luò)時(shí),將生成具有這些
MessageTypes的MobileOperatorNotification事件。此事件將在每次注冊時(shí)觸發(fā),其中包括睡眠/恢復(fù)后的初始注冊。應(yīng)用會(huì)僅在用戶在漫游網(wǎng)絡(luò)上注冊時(shí)和在用戶返回其所屬網(wǎng)絡(luò)時(shí)通知該用戶。由于此事件在每次注冊時(shí)觸發(fā),因此該應(yīng)用負(fù)責(zé)在應(yīng)用的會(huì)話數(shù)據(jù)中跟蹤以前注冊的狀態(tài)。通過元數(shù)據(jù)注冊MobileOperatorNotification事件通常情況下,應(yīng)用必須由用戶至少運(yùn)行一次才可通過系統(tǒng)事件代理注冊工作項(xiàng)。但是,由于完成關(guān)鍵移動(dòng)寬帶方案需要使用MobileOperatorNotification事件,因此此事件通過移動(dòng)寬帶服務(wù)元數(shù)據(jù)與移動(dòng)寬帶應(yīng)用相關(guān)聯(lián)。在服務(wù)元數(shù)據(jù)中,添加以下條目:\Package\SoftwareInformation\SoftwareInfo.xml<DeviceCompanionApplications> <Package> <Applications> <ApplicationId="MyOperatorNotification"/><DeviceNotificationHandlers><DeviceNotificationHandlerEventID="MobileOperatorNotificationHandler"EventAsset="backgroundtask.js"/></DeviceNotificationHandlers></Applications> </Package></DeviceCompanionApplications>如果Metro風(fēng)格應(yīng)用為C#應(yīng)用,則事件資產(chǎn)必須指向?qū)崿F(xiàn)backgroundtask接口的運(yùn)行時(shí)類。<DeviceNotificationHandlers><DeviceNotificationHandlerEventID="MobileOperatorNotificationHandler"EventAsset="MNOMessageBackground.OperatorNotification"/>下載元數(shù)據(jù)和應(yīng)用時(shí),設(shè)備設(shè)置管理器通過系統(tǒng)事件代理注冊相應(yīng)的工作項(xiàng)之后,應(yīng)用才可運(yùn)行一次。在元數(shù)據(jù)中更改后臺(tái)任務(wù)注冊如果在更新版本的Metro風(fēng)格應(yīng)用中更改后臺(tái)任務(wù)入口點(diǎn),也需要更改元數(shù)據(jù)中的DeviceNotificationHandler。雖然最終用戶需要在Windows應(yīng)用商店中手動(dòng)更新Metro風(fēng)格應(yīng)用,但是
會(huì)在Windows8電腦上自動(dòng)更新元數(shù)據(jù)。開發(fā)人員應(yīng)避免在元數(shù)據(jù)中更改
DeviceNotificationHandler后臺(tái)任務(wù)注冊。如果需要進(jìn)行更改,則元數(shù)據(jù)應(yīng)包含對(duì)所有受支持版本的Metro風(fēng)格應(yīng)用中使用的所有不同后臺(tái)任務(wù)入口點(diǎn)的引用,以便為尚未手動(dòng)更新Metro風(fēng)格應(yīng)用的最終用戶保留功能。在設(shè)置XML中定義篩選規(guī)則Windows使用來自運(yùn)營商的元數(shù)據(jù)信息來自定義Windows8的各個(gè)方面,其中包括提供數(shù)據(jù)以設(shè)置電腦。設(shè)置XML用于指定自定義篩選規(guī)則以區(qū)分運(yùn)營商SMS與USSD通知。有關(guān)討論的元數(shù)據(jù)和設(shè)置的詳細(xì)信息,請參閱\h提供移動(dòng)寬帶元數(shù)據(jù)。Windows接受來自運(yùn)營商的基于XML的設(shè)置文件。設(shè)置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>將文本消息標(biāo)識(shí)為運(yùn)營商消息的規(guī)則可在此XML中定義。允許的發(fā)件人:“Sender”特性用于指定允許通知從其發(fā)出的保留發(fā)件人地址。(此數(shù)字必須與SMS消息中接收到的發(fā)件人編號(hào)精確匹配,其中包括國際格式)。模式:用于標(biāo)識(shí)和可選地從文字消息中提取數(shù)據(jù)字段的正則表達(dá)式。要匹配來自某個(gè)發(fā)件人的所有消息,請使用模式[^]*更多信息可在\h提供移動(dòng)寬帶元數(shù)據(jù)中找到。開發(fā)處理MobileOperatorNotification事件的應(yīng)用最佳做法關(guān)于后臺(tái)事件的處理,應(yīng)遵守以下最佳做法:請勿注冊你無法對(duì)其采取操作的后臺(tái)事件。處理這些事件將不必要地占用應(yīng)用程序配額。請勿在接收到后臺(tái)事件時(shí)執(zhí)行大量處理。請考慮將處理推遲到下次應(yīng)用啟動(dòng)時(shí)。請考慮顯示toast通知和更新磁貼以響應(yīng)后臺(tái)事件??梢詥?dòng)Metro風(fēng)格應(yīng)用來處理后臺(tái)事件負(fù)載。有關(guān)Windows8中后臺(tái)事件模型的詳細(xì)信息,請參閱\h后臺(tái)任務(wù)簡介。第1步:后臺(tái)任務(wù)合約聲明若要使Windows可以識(shí)別移動(dòng)運(yùn)營商的Metro風(fēng)格設(shè)備應(yīng)用提供的后臺(tái)任務(wù)體驗(yàn),該應(yīng)用必須聲明它提供了系統(tǒng)功能的擴(kuò)展。若要在VisualStudio11項(xiàng)目的package.appxmanifest文件中做出聲明,請遵循以下步驟:在MicrosoftVisualStudio2021中,在解決方案資源管理器中雙擊你的項(xiàng)目的package.appxmanifest文件。在“聲明”選項(xiàng)卡中,從“可用聲明”中選擇“后臺(tái)任務(wù)”,然后單擊“添加”。在“屬性”下輸入應(yīng)用信息。對(duì)于使用JavaScript和HTML的Metro風(fēng)格設(shè)備應(yīng)用,在應(yīng)用程序設(shè)置的StartPage字段中輸入在應(yīng)用中處理后臺(tái)任務(wù)的文件名(例如backgroundtask.js)。對(duì)于“支持的任務(wù)類型”,請選擇“系統(tǒng)事件”。下圖顯示了采用C#的此過程:下圖顯示了采用JavaScript的此過程:假如操作正確,當(dāng)使用Notepad打開package.appxmanifest時(shí),會(huì)看到以下代碼:<Applications><ApplicationId=…>......<ExtensionCategory="windows.backgroundTasks"StartPage="backgroundtask.js"><BackgroundTasks><TaskType="systemEvent"/></BackgroundTasks></Extension>......</Application></Applications>第2步:后臺(tái)任務(wù)處理程序如果應(yīng)用提供移動(dòng)運(yùn)營商通知聲明,則必須提供用于該后臺(tái)任務(wù)激活的處理程序。該處理程序?qū)囊韵挛恢弥蝎@取移動(dòng)運(yùn)營商網(wǎng)絡(luò)帳戶ID和事件數(shù)據(jù):
(Windows.Networking.NetworkOperators.NetworkOperator
NotificationEventDetails)。由于后臺(tái)任務(wù)支持的唯一UI為Toast,因此后臺(tái)任務(wù)處理程序可以顯示Toast或?qū)etworkOperatorNotificationEventDetails保存到本地存儲(chǔ)中。以下代碼示例顯示了可在接收到新的管理SMS通知時(shí)運(yùn)行的后臺(tái)任務(wù)。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通知有關(guān)toast通知和磁貼更新體驗(yàn)設(shè)計(jì)指南,請參閱\h移動(dòng)運(yùn)營商應(yīng)用的用戶體驗(yàn)設(shè)計(jì)。為了顯示toast通知,應(yīng)用需要在.appxmanifest的“通知”部分中指定
“ToastCapable”。以下代碼表明已在package.appxmanifest文件中設(shè)置了“ToastCapable”(如果使用記事本查看該文件的話)。<Applications><ApplicationId=…><VisualElementsToastCapable="true"…......</Application></Applications>以下代碼展示如何使用JavaScript在后臺(tái)任務(wù)處理程序中顯示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);}使用本地存儲(chǔ)后臺(tái)任務(wù)可以使用本地存儲(chǔ)來保存從后臺(tái)事件中獲取的消息,以便應(yīng)用可以在稍后使用該信息。以下代碼展示了如何使用本地存儲(chǔ)來存儲(chǔ)消息。////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;以下代碼展示了如何在應(yīng)用中檢索后臺(tái)任務(wù)處理程序存儲(chǔ)的消息。varsettings=Windows.Storage.ApplicationData.current.localSettings;varkeyMessage="BA5857FA-DE2C-4A4A-BEF2-49D8B4130A39";varoperatorMessage=settings.values[keyMessage];第3步:處理激活事件如果后臺(tái)任務(wù)處理程序顯示Toast,則可以通過點(diǎn)擊Toast來啟動(dòng)應(yīng)用。如果
toast設(shè)置了參數(shù),則將通過detail.arguments將其傳遞給應(yīng)用。以下代碼展示了如何使用JavaScript附加事件處理程序和確定應(yīng)用上下文。WinJS.Application.addEventListener("activated",activated;false);functionactivated(eventArgs){if(eventArgs.detail.kind===Windows.ApplicationModel.Activation.ActivationKind.launch){if(!eventArgs.detail.arguments){//InitializelogicfortheStartexperiencehere.}else{//InitializelogicfortheNotificationexperiencehere.}}}有關(guān)詳細(xì)信息,請參閱\h后臺(tái)任務(wù)簡介。第4步:處理后臺(tái)任務(wù)完成處理程序在后臺(tái)任務(wù)完成時(shí),前臺(tái)應(yīng)用也可以注冊要通知的完成處理程序。在后臺(tái)任務(wù)的“運(yùn)行”方法中發(fā)生的完成狀態(tài)或任何例外將傳遞到前臺(tái)應(yīng)用中的完成處理程序中。如果應(yīng)用在任務(wù)完成時(shí)已掛起,則下次應(yīng)用恢復(fù)時(shí)將接收到完成通知。如果應(yīng)用已處于“已終止”狀態(tài),則不會(huì)接收到完成通知。如果后臺(tái)任務(wù)需要保留其運(yùn)行成功的信息,則它必須使用狀態(tài)管理器或其他方法保留該信息,例如當(dāng)應(yīng)用恢復(fù)“正在運(yùn)行”狀態(tài)時(shí)可以讀取的文件。盡管移動(dòng)運(yùn)營商后臺(tái)事件可由系統(tǒng)為應(yīng)用自動(dòng)注冊,但如果應(yīng)用希望注冊到后臺(tái)完成或進(jìn)度處理程序,則該應(yīng)用仍需要至少運(yùn)行一次。以下代碼展示了如何將事件處理程序附加到后臺(tái)事件中。有關(guān)后臺(tái)任務(wù)進(jìn)度報(bào)告和完成處理程序的詳細(xì)信息,請參閱后臺(tái)任務(wù)簡介。注意:在Windows8ConsumerPreview中,事件名稱可能為空。作為一種解決方法,將任務(wù)名稱與“”進(jìn)行比較。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ù)據(jù)分析以注冊后臺(tái)任務(wù)開發(fā)人員可通過在桌面的“設(shè)備和打印機(jī)”窗口中按F5鍵(或右鍵單擊并選擇“刷新”),手動(dòng)觸發(fā)Windows8以分析服務(wù)元數(shù)據(jù)并注冊后臺(tái)任務(wù)。僅當(dāng)部署應(yīng)用時(shí),通過服務(wù)元數(shù)據(jù)分析進(jìn)行后臺(tái)任務(wù)注冊才會(huì)成功。驗(yàn)證是否已正確注冊后臺(tái)任務(wù)開發(fā)人員可通過查看ApplicationandServicesLogs\Microsoft\Windows\
DeviceSetupManager下的事件日志,驗(yàn)證設(shè)備設(shè)置管理器(DSM)是否已正確分析服務(wù)元數(shù)據(jù)。打開“事件查看器”。在“開始”頁上,鍵入“事件查看器”并在“搜索”窗格中選擇設(shè)置。單擊“查看事件日志”。在菜單選項(xiàng)卡上,選擇“查看”,然后選擇“顯示分析和調(diào)試日志”。瀏覽到ApplicationsandServicesLogs\Microsoft\Windows\
DeviceSetupManager。\h驗(yàn)證是否已成功應(yīng)用設(shè)置元數(shù)據(jù)設(shè)置文件中的CarrierId和體驗(yàn)元數(shù)據(jù)中的服務(wù)編號(hào)之間不匹配驗(yàn)證系統(tǒng)事件代理是否正在執(zhí)行后臺(tái)任務(wù)開發(fā)人員可通過檢查事件查看器,驗(yàn)證Windows是否正在生成
MobileOperatorNotification事件并且事件代理正在執(zhí)行應(yīng)用的后臺(tái)任務(wù)。
默認(rèn)情況下,對(duì)這些事件的記錄處于禁用狀態(tài),可通過以下步驟啟用:打開“事件查看器”。在“開始”頁上,鍵入“事件查看器”并在“搜索”窗格中選擇設(shè)置。單擊“查看事件日志”。瀏覽到ApplicationsandServicesLogs\Microsoft\Windows\
BackgroundTaskInfrastructure。右鍵單擊“診斷”日志并選擇“啟用日志”。如果未正在執(zhí)行后臺(tái)任務(wù),請首先驗(yàn)證在服務(wù)元數(shù)據(jù)中指定的你的后臺(tái)任務(wù)的名稱是否與你的程序包的AppXManifest.xml文件中的名稱相匹配。然后,
在部署應(yīng)用并插入移動(dòng)寬帶設(shè)備后,驗(yàn)證是否已觸發(fā)對(duì)服務(wù)元數(shù)據(jù)的分析。驗(yàn)證Windows是否正在接收SMS和USSD開發(fā)人員可通過在事件查看器中檢查SmsRouter事件來驗(yàn)證Windows是否正在接收SMS和USSD通知。未將收到的短信檢測為運(yùn)營商通知如果未將收到的SMS檢測為運(yùn)營商通知,請?jiān)趲粼O(shè)置元數(shù)據(jù)中驗(yàn)證SMS管理通知的自定義篩選規(guī)則。有關(guān)詳細(xì)信息,請參閱\h提供移動(dòng)寬帶元數(shù)據(jù)。尤其是,如果指定發(fā)件人號(hào)碼,請驗(yàn)證指定的號(hào)碼格式匹配通過SMSAPI收到的消息中的格式。若要驗(yàn)證這已正確匹配,請將模式臨時(shí)更改為“[^]*”,以匹配來自此發(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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年春季學(xué)期技術(shù)學(xué)院教務(wù)計(jì)劃
- 小學(xué)二年級(jí)綜合實(shí)踐勞動(dòng)教育教學(xué)計(jì)劃
- 高校護(hù)理教學(xué)要點(diǎn)與實(shí)踐
- 環(huán)保企業(yè)2025年度財(cái)務(wù)計(jì)劃
- 企業(yè)員工緊急救護(hù)培訓(xùn)
- 廣鐵高級(jí)工練習(xí)測試題附答案
- 書法課程設(shè)置與教學(xué)安排計(jì)劃
- 混合痔護(hù)理診斷
- 2019-2025年一級(jí)建造師之一建水利水電工程實(shí)務(wù)通關(guān)提分題庫(考點(diǎn)梳理)
- 醫(yī)療項(xiàng)目進(jìn)度控制方案及措施探討
- 2025年沈陽汽車城開發(fā)建設(shè)集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 田徑理論考試復(fù)習(xí)題庫300題(含各題型)
- 泛海三江JB-QGL-9000、JB-QTL-9000、JB-QBL-9000火災(zāi)報(bào)警控制器
- 員工團(tuán)建就餐合同
- 電氣工程及其自動(dòng)化畢業(yè)設(shè)計(jì) 基于PLC的噴涂機(jī)器人控制系統(tǒng)的設(shè)計(jì)
- 滑雪培訓(xùn)服務(wù)合同
- 肌肉注射課件(共45張課件)
- 工程經(jīng)濟(jì)學(xué)(青島理工大學(xué))知到智慧樹章節(jié)測試課后答案2024年秋青島理工大學(xué)
- 2025年國家電網(wǎng)有限公司招聘筆試參考題庫含答案解析
- 民事起訴狀(物業(yè)服務(wù)合同糾紛)示范文本
- 管理會(huì)計(jì)理論與實(shí)務(wù)知到智慧樹章節(jié)測試課后答案2024年秋上海大學(xué)
評(píng)論
0/150
提交評(píng)論