devblogs.microsoft.com Open in urlscan Pro
2a02:26f0:7100:9ac::2f1e  Public Scan

Submitted URL: https://click.email.microsoftemail.com/?qs=e1f5211ca8f8f94be8e0807b2d9f22afcb04e33049224337439c91ea81130d6446152fd8d7130306f646b138dd8f...
Effective URL: https://devblogs.microsoft.com/microsoft365dev/building-immersive-experiences-with-microsoft-mesh/?ocid=aid3046724&utm_issue=20...
Submission: On November 17 via manual from KH — Scanned from DE

Form analysis 4 forms found in the DOM

Name: searchFormGET /search

<form class="c-search" autocomplete="off" id="searchForm" name="searchForm" role="search" action="/search" method="GET"
  data-seautosuggest="{&quot;queryParams&quot;:{&quot;market&quot;:&quot;en-us&quot;,&quot;clientId&quot;:&quot;7F27B536-CF6B-4C65-8638-A0F8CBDFCA65&quot;,&quot;sources&quot;:&quot;Microsoft-Terms,Iris-Products,DCatAll-Products&quot;,&quot;filter&quot;:&quot;+ClientType:StoreWeb&quot;,&quot;counts&quot;:&quot;5,1,5&quot;},&quot;familyNames&quot;:{&quot;Apps&quot;:&quot;App&quot;,&quot;Books&quot;:&quot;Book&quot;,&quot;Bundles&quot;:&quot;Bundle&quot;,&quot;Devices&quot;:&quot;Device&quot;,&quot;Fees&quot;:&quot;Fee&quot;,&quot;Games&quot;:&quot;Game&quot;,&quot;MusicAlbums&quot;:&quot;Album&quot;,&quot;MusicTracks&quot;:&quot;Song&quot;,&quot;MusicVideos&quot;:&quot;Video&quot;,&quot;MusicArtists&quot;:&quot;Artist&quot;,&quot;OperatingSystem&quot;:&quot;Operating System&quot;,&quot;Software&quot;:&quot;Software&quot;,&quot;Movies&quot;:&quot;Movie&quot;,&quot;TV&quot;:&quot;TV&quot;,&quot;CSV&quot;:&quot;Gift Card&quot;,&quot;VideoActor&quot;:&quot;Actor&quot;}}"
  data-seautosuggestapi="https://www.microsoft.com/msstoreapiprod/api/autosuggest"
  data-m="{&quot;cN&quot;:&quot;GlobalNav_Search_cont&quot;,&quot;cT&quot;:&quot;Container&quot;,&quot;id&quot;:&quot;c1c9c3m1r1a1&quot;,&quot;sN&quot;:1,&quot;aN&quot;:&quot;c9c3m1r1a1&quot;}" aria-expanded="false">
  <input id="cli_shellHeaderSearchInput" aria-label="Search Expanded" aria-autocomplete="list" aria-expanded="false" aria-controls="universal-header-search-auto-suggest-transparent" aria-owns="universal-header-search-auto-suggest-ul" type="search"
    name="query" role="combobox" placeholder="Search" data-m="{&quot;cN&quot;:&quot;SearchBox_nav&quot;,&quot;id&quot;:&quot;n1c1c9c3m1r1a1&quot;,&quot;sN&quot;:1,&quot;aN&quot;:&quot;c1c9c3m1r1a1&quot;}" data-toggle="tooltip" data-placement="right"
    title="" data-original-title="Search">
  <input type="hidden" name="blog" value="/microsoft365dev/" data-m="{&quot;cN&quot;:&quot;HiddenInput_nav&quot;,&quot;id&quot;:&quot;n2c1c9c3m1r1a1&quot;,&quot;sN&quot;:2,&quot;aN&quot;:&quot;c1c9c3m1r1a1&quot;}">
  <button id="search" aria-label="Search" class="c-glyph" data-m="{&quot;cN&quot;:&quot;Search_nav&quot;,&quot;id&quot;:&quot;n3c1c9c3m1r1a1&quot;,&quot;sN&quot;:3,&quot;aN&quot;:&quot;c1c9c3m1r1a1&quot;}" data-bi-mto="true" aria-expanded="false"
    disabled="disabled">
    <span role="presentation">Search</span>
    <span role="tooltip" class="c-uhf-tooltip c-uhf-search-tooltip">Search</span>
  </button>
  <div class="m-auto-suggest" id="universal-header-search-auto-suggest-transparent" role="group">
    <ul class="c-menu" id="universal-header-search-auto-suggest-ul" aria-label="Search Suggestions" aria-hidden="true" data-bi-dnt="true" data-bi-mto="true" data-js-auto-suggest-position="default" role="listbox" data-tel="jsll"
      data-m="{&quot;cN&quot;:&quot;search suggestions_cont&quot;,&quot;cT&quot;:&quot;Container&quot;,&quot;id&quot;:&quot;c4c1c9c3m1r1a1&quot;,&quot;sN&quot;:4,&quot;aN&quot;:&quot;c1c9c3m1r1a1&quot;}"></ul>
    <ul class="c-menu f-auto-suggest-no-results" aria-hidden="true" data-js-auto-suggest-postion="default" data-js-auto-suggest-position="default" role="listbox">
      <li class="c-menu-item"> <span tabindex="-1">No results</span></li>
    </ul>
  </div>
</form>

POST https://devblogs.microsoft.com/microsoft365dev?na=s

<form method="post" action="https://devblogs.microsoft.com/microsoft365dev?na=s" onsubmit="return newsletter_check(this)">
  <input type="hidden" name="nlang" value="">
  <div class="col-8 tnp-field tnp-field-email pull-left" style="margin-right:13px;width: 300px;margin-left: 30px;"><input style="border: 1px solid #CED4DA;background-color:#FFF;height: 34px;font-size: 14px;" class="tnp-email x-hidden-focus"
      type="email" name="ne" placeholder="Enter your email" required=""></div>
  <div style="padding:0 10px;" class="tnp-field tnp-field-button"><input class="tnp-submit x-hidden-focus" type="submit" value="Subscribe">
    <div style="clear: both;"></div>
    <div class="tnp-field tnp-privacy-field"><label style="font-size: 14px;font-weight: normal;">By subscribing you agree to our <a href="https://docs.microsoft.com/en-us/collaborate/terms-of-use" target="_blank">Terms of Use</a> and
        <a href="https://privacy.microsoft.com/en-us/privacystatement" target="_blank">Privacy Policy</a></label></div>
  </div>
</form>

<form id="wp-link" tabindex="-1">
  <input type="hidden" id="_ajax_linking_nonce" name="_ajax_linking_nonce" value="f3b3c649a3">
  <h1 id="link-modal-title">Insert/edit link</h1>
  <button type="button" id="wp-link-close"><span class="screen-reader-text"> Close </span></button>
  <div id="link-selector">
    <div id="link-options">
      <p class="howto" id="wplink-enter-url">Enter the destination URL</p>
      <div>
        <label><span>URL</span>
          <input id="wp-link-url" type="text" aria-describedby="wplink-enter-url"></label>
      </div>
      <div class="wp-link-text-field">
        <label><span>Link Text</span>
          <input id="wp-link-text" type="text"></label>
      </div>
      <div class="link-target">
        <label><span></span>
          <input type="checkbox" id="wp-link-target"> Open link in a new tab</label>
      </div>
    </div>
    <p class="howto" id="wplink-link-existing-content">Or link to existing content</p>
    <div id="search-panel">
      <div class="link-search-wrapper">
        <label>
          <span class="search-label">Search</span>
          <input type="search" id="wp-link-search" class="link-search-field" autocomplete="off" aria-describedby="wplink-link-existing-content">
          <span class="spinner"></span>
        </label>
      </div>
      <div id="search-results" class="query-results" tabindex="0">
        <ul></ul>
        <div class="river-waiting">
          <span class="spinner"></span>
        </div>
      </div>
      <div id="most-recent-results" class="query-results" tabindex="0">
        <div class="query-notice" id="query-notice-message">
          <em class="query-notice-default">No search term specified. Showing recent items.</em>
          <em class="query-notice-hint screen-reader-text"> Search or use up and down arrow keys to select an item. </em>
        </div>
        <ul></ul>
        <div class="river-waiting">
          <span class="spinner"></span>
        </div>
      </div>
    </div>
  </div>
  <div class="submitbox">
    <div id="wp-link-cancel">
      <button type="button" class="button">Cancel</button>
    </div>
    <div id="wp-link-update">
      <input type="submit" value="Add Link" class="button button-primary" id="wp-link-submit" name="wp-link-submit">
    </div>
  </div>
</form>

#

<form id="myForm" action="#">
  <div class="modal-body">
    <div class="form-group">
      <label for="code-text">Paste your code snippet</label>
      <textarea class="form-control" id="code-text" style="height: 150px;"></textarea>
    </div>
  </div>
  <div class="modal-footer">
    <button type="button" onclick="myCodeCancelFunction()" class="btn btn-primary" data-dismiss="modal">Cancel</button>
    <button type="button" onclick="myCodeFunction()" class="btn btn-primary">Ok</button>
  </div>
</form>

Text Content

We use optional cookies to improve your experience on our websites, such as
through social media connections, and to display personalized advertising based
on your online activity. If you reject optional cookies, only cookies necessary
to provide you the services will be used. You may change your selection by
clicking “Manage Cookies” at the bottom of the page. Privacy Statement
Third-Party Cookies

Accept Reject Manage cookies

Skip to main content
Microsoft
Microsoft 365 Platform
Microsoft 365 Platform
Microsoft 365 Platform
 * Home
 * DevBlogs
 * Developer
    * Visual Studio
    * Visual Studio Code
    * Visual Studio for Mac
    * DevOps
    * Windows Developer
    * Developer support
    * ISE Developer
    * Engineering@Microsoft
    * Azure SDK
    * IoT
    * Command Line
    * Perf and Diagnostics
    * Dr. International
    * Notification Hubs
    * Math in Office
    * React Native

 * Technology
    * DirectX
    * PIX
    * Semantic Kernel
    * SurfaceDuo
    * Startups
    * Sustainable Engineering
    * Windows AI Platform

 * Languages
    * C++
    * C#
    * F#
    * Visual Basic
    * TypeScript
    * PowerShell Community
    * PowerShell Team
    * Python
    * Q#
    * JavaScript
    * Java
    * Java Blog in Chinese

 * .NET
    * All .NET posts
    * .NET MAUI
    * ASP.NET Core
    * Blazor
    * Entity Framework
    * ML.NET
    * NuGet
    * Servicing
    * Xamarin
    * .NET Blog in Chinese

 * Platform Development
    * #ifdef Windows
    * Azure Depth Platform
    * Azure Government
    * Azure VM Runtime Team
    * Bing Dev Center
    * Microsoft Edge Dev
    * Microsoft Azure
    * Microsoft 365 Developer
    * Microsoft Entra Identity Developer Blog
    * Old New Thing
    * Power Platform
    * Windows MIDI and Music dev
    * Windows Search Platform

 * Data Development
    * Azure Cosmos DB
    * Azure Data Studio
    * Azure SQL Database
    * OData
    * Revolutions R
    * SQL Server Data Tools

 * More

Theme
 * Light
 * Dark

Login
Search Search
 * No results

Cancel
Email Subscriptions are here!

Get notified in your email when a new post is published to this blog

Subscribe
Close


BUILDING IMMERSIVE EXPERIENCES WITH MICROSOFT MESH

Tyler Adams



October 5th, 20231 3

Microsoft Mesh, now in public preview, is a new 3D immersive experience for the
workplace, helping virtual meetings and events feel more like face-to-face
connections. Now you can bring your 3D world building skills to the global
workforce, helping users connect like never before. With Mesh toolkit you can
create fully customized, multi-user 3D experiences – giving you a powerful,
imaginative medium for addressing business needs and delighting users.



At a time when companies are re-imagining the way employees come together, Mesh
adds a new dimension to the solution space, with innovations that help
organizations manage the opportunities and challenges of the distributed
workplace. Immersive experiences are uniquely suited to facilitate deeper human
connections across physical distance, visualizing models and simulations,
envisioning spaces that are difficult to access, and immersing people in stories
that capture the imagination. With Mesh, organizations can elevate team
building, training, product demos, collaboration, social connections, and more.

Mesh toolkit makes tapping into the value of immersive technologies easier than
ever by reducing time to launch and lowering the barriers to achieve security
and scale delivering experiences customized to your business requirements. In
Microsoft Mesh, the immersive content you create is experienced by users on a
desktop PC or in VR. Mesh does the heavy lifting to enable engagement in 3D
environments by handling the avatar system, Spatial Audio, and multi-user
synchronization. Development, iteration, performance optimization and publishing
are facilitated through the Mesh toolkit. The toolkit supports Unity so you can
build environments in a familiar way and leverage existing scenes and assets to
build experiences in Mesh. You can also enrich your experiences by adding
interactive content, inserting logic, integrating with business data, or
infusing AI – all with physics and interaction tools that you can leverage
out-of-the-box.

Start your Mesh development journey now and read on to learn how it will be
easier, faster, safer, and even more fun to bring your visions to life.


WHAT CAN I EXPECT FROM MESH?



MULTI-USER EXPERIENCES STAY IN SYNC AND GIVE USERS A SENSE OF BEING TOGETHER


Mesh handles many of the biggest challenges to giving people a sense of
co-presence in immersive spaces. Mesh is multi-user by default, receiving input
from all users and applying changes to all clients so users stay in sync and can
share an experience together. Spatial Audio enables a rich audio landscape that
matches the directionality of sound in the physical world so participants can
sense where others are in the 3D space and hear the virtual world around them.
This helps participants feel fully immersed and enables multiple discussions and
side conversations to happen in the same place at the same time.

Mesh’s avatar system is highly customizable so users can represent themselves
the way they want when connecting with others. Avatars are tied to a user’s
existing work identity through Azure Active Directory (AAD) so there’s no need
to create separate credentials. In fact, the same avatar system is used in
Microsoft Teams so hundreds of millions of global users have an easy onramp to
set up and get familiar with using their avatars.


ENTERPRISE-GRADE SECURITY AND PRIVACY BUILT ON MICROSOFT 365


Mesh was built from the ground up for use in enterprises scenarios so it can
support immersive solutions in the places where people work. Security, privacy,
and access are handled similarly to other business applications in the Microsoft
365 admin center giving you flexible control of company data. There is no need
for installations outside of a company’s typical requirements, and users never
need to leave the corporate network.


IMMERSIVE EXPERIENCES RUN ON PCS, VR HEADSETS, OR BOTH


Currently, Mesh can be experienced on desktop PCs and Meta Quest VR headsets.
Depending on your business need, you may want a higher-resolution scene that is
optimized for powerful PCs. Or you could build scenes optimized for Quest VR
devices and choose to add PC as well. In the latter case, all users can interact
seamlessly in an event no matter which hardware platform they use. This
flexibility can also eliminate or reduce the need to equip users with new
hardware, lessening the overall investment for exploring immersive solutions.


CONTENT AND ANIMATIONS YOU BUILD INTEGRATE WITH THE EVENT ORGANIZER’S WORKFLOW


Immersive environments you upload to Mesh can be made available for use in
events like all-hands meetings, showcases, training sessions or team building
activities. You enhance event organizers’ ability to deliver powerful
interactive experiences by exposing content and animations they can activate
during a live event. Event organizers can play, pause, loop and stop content
during events so that each production is unique and expertly timed.


RICH TOOLS AMPLIFY YOUR CREATIVITY AND MEET THE NEEDS OF THE BUSINESS


Take a look at some of the capabilities offered in the Mesh toolkit that make it
easier to build, iterate, optimize and publish rich immersive experiences:


ADD NATURAL INTERACTIVITY WITH MESH VISUAL SCRIPTING


Add interactivity, connect triggers to actions and insert custom logic to your
scene with Mesh visual scripting. Visual scripting runs client-side to support
simple interactivity without writing code letting you build custom low-latency
effects. It also works without a server deployment, making it simple to get
started.

Mesh visual scripting is based on Unity visual scripting, and includes features
designed for Mesh development. With it, you can create industry-standard Unity
visual script graphs, which run in the Mesh Visual Scripting execution
environment. The execution environment works behind the scenes, tracking and
synchronizing local property changes across clients to ensure a consistent
shared experience. Sandboxing protects users from illicit attempts to access
sensitive local data or read or write arbitrary remote data on other clients.




ACCESS YOUR DATA AND THE POWER OF .NET WITH MESH CLOUD SCRIPTING.


Introduce live backend data from your company or public sources, infuse AI, or
add complex logic with Mesh cloud scripting. The scripts you write in C# are
.NET apps and can call any .NET API, access NuGet libraries, and leverage
best-in-class tools to power your experiences.

Cloud scripts are written against the Mesh API and run on your cloud server so
updates happen quickly and accurately across all participants. The server
delivers an authoritative version of the scene so changes are mirrored
consistently to all clients and mapped directly to the Unity scene. This method
allows for code reviews, diffs, history inspection, Git integration, access to
external assemblies, and easy debugging at runtime.

Both visual scripting and cloud scripting work on their own or in combination
with one another in Mesh.


ENABLE ENGAGING, DYNAMIC CONTENT WITH MESH PHYSICS


Mesh Physics provides a productive workflow for creators and a high quality
experience for users. Mesh Physics is based on local authoritative simulation,
which results in a very simple architecture. There’s no need for server-side
logic or special logic on the clients. Most importantly, this approach results
in a very responsive and low-latency experience for each player interacting with
their environment, even when connected to a high-latency network.

With the Mesh Physics system, you can make your creations act in the realistic –
or fantastic – manner that is consistent with your concept. Use Mesh Physics to
control how gravity and other forces affect objects by making them bouncy or
sticky. Allow users to grab and hold objects, teleport them, or make them
explode. Add physics to your interactive experiences and games and inject
limitless interactivity, creativity, and fun for participants.




BRING RICH WEB CONTENT INTO YOUR 3D ENVIRONMENTS WITH WEB SLATES.


Add one or more Web Slates to a scene to view dynamic dashboards, web pages,
photos and videos. Drag and drop the WebSlate prefab, and then use scripting to
connect your maps, diagrams, and data to the surrounding environment. With
built-in input support, users can interact with web content intuitively across
devices without extra development time.




ENSURE HIGH PERFORMANCE WITH OPTIMIZED ENVIRONMENTS DESIGNED FOR MESH


Create assets for use in Mesh using familiar 3D modeling software such as Maya,
3DS Max, Cinema 4D, ZBrush or Blender. Our detailed design guidelines will set
you up for success with examples and guidance built from experience on topics
such as project structure, modeling, texturing, lighting, and post processing.
Graphics tools included in the Mesh toolkit provide code, shaders, assets, and
samples to help improve the visual fidelity of environments while staying within
performance budgets.

The content performance analyzer catches performance bottlenecks during
authoring by identifying content optimization opportunities and automatically
correcting them. The visual profiler validates performance at runtime by
monitoring draw calls and CPU/GPU usage. Leveraging these tools to optimize
performance will accelerate downloads, increase user comfort, and even improve
battery life and fidelity—all without adding significantly to your dev time or
affecting security.




ACCELERATE ITERATION WITH MULTI-USER SIMULATION


Get an approximate preview of what your content will look and feel like when it
runs in the Mesh app using Unity Play Mode. This greatly speeds up the iteration
cycle during content development, allowing you to debug the logic of interactive
content using built-in Unity tools. Play Mode can run multiple clients within
the same process; thus allowing a single developer to easily get a first
impression of multi-user scenarios in a convenient split screen view.


PUBLISH TO MESH HASSLE-FREE DIRECTLY FROM UNITY


Once your scene is ready in the Unity editor, you are just a few clicks away
from publishing to Mesh. You’ll use Mesh toolkit to save it as an environment in
your Microsoft 365 tenant. Event organizers who have been granted access can
create an Event based on your environment and invite participants to come and
share the experience.




GET STARTED TODAY


The best way to learn about creating with Mesh is to dive in. The Mesh toolkit
is free to download and will provide all the packages you need to start
building. Create a new project from scratch, port an existing project built with
Unity, or kick off with one of the many practical samples included in the Mesh
toolkit.

The Mesh 101 sample is a great place to start. It includes a pre-built Unity
project and step-by-step tutorial that will show you how to add Mesh features
and create an interactive experience. Developed for those with intermediate to
advanced Unity skills, the tutorial will give you hands-on experience setting up
your dev environment, adding interactivity with Mesh scripting, and triggering
animations with Mesh physics. You’ll be able to see your progress and simulate
the multi-user experience in Unity Play Mode.

Anyone can build with the Mesh toolkit but to upload interactive environments
and explore them with others, all participants need a Teams Premium license. If
you and your users do not yet have Teams Premium, you can get started with a
30-day trial.



 


HERE ARE SOME OF THE RESOURCES WE THINK YOU’LL FIND MOST USEFUL:


 * Start your Mesh development journey.
 * Learn step-by-step with the Mesh 101 sample and tutorial.
 * Subscribe to the Microsoft 365 Developer channel to see new video content as
   it is added to the Mesh development playlist.
 * Get updates on Mesh development, learn about new content and webinars, or
   connect with our team by subscribing to our Discussion Space on Microsoft
   Community Hub.

Thank you for being part of the Mesh journey. We can’t wait to see what you
create with Mesh!

Follow us on X | @Microsoft365Dev for the latest news and updates





TYLER ADAMS

Follow


Posted in Microsoft 365 DeveloperTagged Mesh toolkit Microsoft Mesh


READ NEXT

OData property changes to Microsoft Graph callRecords change notifications
This post provides a final notification and confirmation of the upcoming
breaking change that will occur the week of October 30, 2023 for the callRecords
API in Microsoft Graph.
Matthew McGrath
October 13, 2023
0 comment
Teams Toolkit update – October 2023
This update brings searchability to the sample gallery, improvements to sample
contribution, and the capability to create message extensions using your APIs.
John Miller
October 17, 2023
0 comment


1 COMMENT


LEAVE A COMMENTCANCEL REPLY

Log in to join the discussion.

 * Jeremy Bell October 6, 2023 7:58 pm 0
   collapse this comment copy link to this comment
   
   
   Sounds great, but I’m not touching Unity after the pricing fiasco. Any chance
   we’ll see Godot support in the future?
   
   Log in to Vote or Reply
   

TOPICS

 * Microsoft Graph
 * Microsoft Teams
 * Office Add-ins
 * SharePoint Framework
 * Microsoft 365 Developer
 * Microsoft identity platform
 * Microsoft Viva
 * Adaptive Cards
 * SharePoint
 * Power Platform
 * Fluid Framework
 * Copilot for Microsoft 365

EXPLORE MICROSOFT 365 PLATFORM LEARNING PATHS

Learn new skills to develop on the Microsoft 365 platform. Explore our learning
paths.



Get started ->

JOIN THE MICROSOFT 365 DEVELOPER PROGRAM TODAY!

Get a free sandbox, tools, and other resources you need to build solutions for
the Microsoft 365 platform.



Join now ->


STAY INFORMED

By subscribing you agree to our Terms of Use and Privacy Policy

 * 
 * 
 * 






INSERT/EDIT LINK

Close

Enter the destination URL

URL
Link Text
Open link in a new tab

Or link to existing content

Search

No search term specified. Showing recent items. Search or use up and down arrow
keys to select an item.

Cancel


CODE BLOCK

×
Paste your code snippet
Cancel Ok

Feedback

What's new
 * Surface Laptop Studio 2
 * Surface Laptop Go 3
 * Surface Pro 9
 * Surface Laptop 5
 * Surface Studio 2+
 * Copilot in Windows
 * Microsoft 365
 * Windows 11 apps

Microsoft Store
 * Account profile
 * Download Center
 * Microsoft Store support
 * Returns
 * Order tracking
 * Certified Refurbished
 * Microsoft Store Promise
 * Flexible Payments

Education
 * Microsoft in education
 * Devices for education
 * Microsoft Teams for Education
 * Microsoft 365 Education
 * How to buy for your school
 * Educator training and development
 * Deals for students and parents
 * Azure for students

Business
 * Microsoft Cloud
 * Microsoft Security
 * Dynamics 365
 * Microsoft 365
 * Microsoft Power Platform
 * Microsoft Teams
 * Microsoft Industry
 * Small Business

Developer & IT
 * Azure
 * Developer Center
 * Documentation
 * Microsoft Learn
 * Microsoft Tech Community
 * Azure Marketplace
 * AppSource
 * Visual Studio

Company
 * Careers
 * About Microsoft
 * Company news
 * Privacy at Microsoft
 * Investors
 * Diversity and inclusion
 * Accessibility
 * Sustainability

California Consumer Privacy Act (CCPA) Opt-Out Icon Your Privacy Choices
California Consumer Privacy Act (CCPA) Opt-Out Icon Your Privacy Choices
 * Sitemap
 * Contact Microsoft
 * Privacy
 * Manage cookies
 * Terms of use
 * Trademarks
 * Safety & eco
 * Recycling
 * About our ads
 * © Microsoft 2023

Notifications