Xbox LIVE Games 35 Countries 2 1 Billion
Xbox LIVE Games
35 Countries 2. 1 Billion hours played per month More than 6. 3 Billion achievements granted 35 Million Users 176, 802, 201, 383 Gamer Points have been scored
Xbox LIVE on Windows
Identity Your Great Content Multiplayer Music Achievements Television Leaderboards Movies Avatars Real Time Counting Service Friends Roaming Storage Beacons
Xbox LIVE on Windows 8 A Complete Development Platform Comprehensive, Proven Xbox LIVE Feature Set ü Multiplayer ü Achievements & Gamerscore ü Avatars ü Friends List & Community ü Roaming Save State ü Title Managed Storage ü Beacons ü Avatar Awards
Xbox LIVE on Windows 8 A Complete Development Platform Comprehensive, Proven Xbox LIVE Feature Set Xbox LIVE SDK for Windows Metro Style Game Development ü Enhanced cloud-based anti-piracy ü Supporting choice of development technology ü Notifications and Presence ü Up and running in days
Xbox LIVE on Windows 8 A Complete Development Platform Comprehensive, Proven Xbox LIVE Feature Set Xbox LIVE SDK for Windows Metro Style Game Development Differentiated Experiences For Your Application Xbox LIVE Experiences on Windows 8 The Xbox LIVE on Windows App will be available in all countries that are Xbox LIVE-enabled Xbox LIVE branded Designed for cross-device game development
The Xbox LIVE on Windows Developer Platform
Xbox LIVE on Windows Developer Platform Xbox LIVE Services Xbox LIVE on Windows Runtime Developer Tools Ingestion & Certification Marketplace Distribution Your Games and Apps
Xbox LIVE Services Overview Your Games and Apps REST Xbox LIVE Services • • • User Profile & Settings Presence Avatars Friends Achievements Avatar Awardables • • • Leaderboards Multiplayer Text Messaging Roaming Game State Beacons Real Time Counting Service REST Xbox LIVE on Windows Runtime
What are REST-ful Services? • RESTful Services REST stands for Representational State Transfer It is not a standard or a RFC, rather it is an architectural style that leverages HTTP(s) protocol • Each unique URI is a representation of a resource • APIs based on four http verbs: GET, PUT, POST, DELETE to manipulate the resources defined by the URI • Responses can use XML or JSON • • • Java. Script Object Notation (JSON) • A lightweight text-based human readable open standard designed for data interchange
Xbox LIVE Service REST API Overview 2011 https: //services. xboxlive. com Aggregation (Real Time counting Service) Leaderboards Friends Matchmaking, Messaging & Session Storage Progress User
Reading Achievements Example Read an achievement from the current user Http Request https: //services. xboxlive. com/users/xuid(1234567890)/progress/achievements? skip. Items=1&max. Items=3 JSON { "achievements": [{ "description": "Won a Pro Takedown. ", "flags": 1245192, "gamerscore": 10, "id": 2, "image. Id": 2, "is. Secret": false, "locked. Description": "Win a Pro Takedown. ", "name": "Took Down a Pro", "platform": 1, "sequence": 2, "time. Unlocked": "2004 -02 -20 T 19: 42: 13. 0200000", "title. Id": 1297287442, "type": 1, "unlocked. Online": true }, …
The Xbox LIVE on Windows Runtime Microsoft. Xbox Social. Network Matchmaking. Service Multiplayer. Session User Leaderboard. Service Storage. Service Property Bags Internal Security, Caching, Offline
Design and Call Pattern A new Namespace using Microsoft. Xbox; private void Read. Profile() User object encapsulates all user management complexity { IUser signed. In. User = new User(); Async interfaces IAsync. Operation<IUser. Profile> async. Profile = signed. In. User. Get. Profile. Async(); async. Profile. Completed = new Async. Operation. Completed. Handler<IUser. Profile>(Get. Profile. Complete); async. Profile. Start(); Use Delegates to handle callbacks } private void Get. Profile. Complete(IAsync. Operation<IUser. Profile> p. Async) { IUser. Profile profile = p. Async. Get. Results(); this. motto = profile. Motto; } Handle returned data – Property Bag in most cases
Reading Profile data (C++) #using <Microsoft. Xbox. winmd> using namespace Microsoft: : Xbox; void Main. Page: : Get. User. Profile() { Microsoft: : Xbox: : IUser ^user = ref new Microsoft: : Xbox: : User(); auto operation = user->Get. Profile. Async(); operation->Completed = ref new Async. Operation. Completed. Handler<IUser. Profile^>(this, &Main. Page: : Handle. User. Profile. Complete); operation->Start(); } void Main. Page: : Handle. User. Profile. Complete( IAsync. Operation<IUser. Profile^>^ p. Async ) { HResult result = p. Async->Error. Code; IUser. Profile^ profile = p. Async->Get. Results(); if (profile != nullptr) { String^ tag = profile->Gamer. Tag; m_profile = tag; } }
Reading Profile data (Java. Script) var motto; var signed. In. User = new Microsoft. Xbox. User(); signed. In. User. get. Profile(). then( function get. Profile. Completed(profile) { motto = profile. motto; }
Reading Achievements IUser user = new User(); Most interfaces take In-Params to simplify query construction // Get list of achievements IAsync. Operation<IAchievement. Collection> async = user. Get. Achievements. For. Title. Async( title. Id, skip. Elements, top. Elements, unlocked. Only, Achievement. Sort. Type. Title. Id); async. Completed = new Async. Operation. Completed. Handler<IAchievement. Collection>(Get. Achievements. Complete); async. Start(); …
Multiplayer Posting A Matchmaking Request Multiplayer ‘goodies’ namespace using Microsoft. Xbox; using Microsoft. Xbox. Multiplayer; Init the Matchmaking service IMatchmaking. Service matchmaker = new Matchmaking. Service(); Add as many IMatch. Property skill = new Match. Property( "Skill", "Beginner", Match. Type. String); IMatch. Property score = new Match. Property( "Victories", "10", Match. Type. Integer); Match. Properties as you’d like Add the Match. Properties to the Match. Request, including match criteria IMatch. Request request = new Match. Request(); request. Match. Criteria. Equal. Add(skill ); Post the request. Match. Criteria. Less. Than. Add(score ); IAsync. Operation<IMatch. Request. Result> async. Operation = matchmaker. Post. Request. Async(request); async. Operation. Completed = new Async. Operation. Completed. Handler<IMatch. Request. Result>(Post. Request. Complete); async. Operation. Start();
Multiplayer Initiating A Session public void Post. Request. Complete(IAsync. Operation<IMatch. Request. Result> request. Async) A request can be long-lived, use the Request ID to poll for status { this. request = request. Async. Get. Results(); IAsync. Operation<IMatch. Request. Status> status. Operation = this. matchmaker. Get. Request. Status. Async( this. request. Request. Id); status. Operation. Completed = new Async. Operation. Completed. Handler<IMatch. Request. Status>(Get. Request. Status. Complete); status. Operation. Start(); } IMatch. Request. Status property bag represents the match request status public void Get. Request. Status. Complete(IAsync. Operation<IMatch. Request. Status> status. Async) { IMatch. Request. Status status = status. Async. Get. Results(); If a match was found Join current user to the returned Session. Id if (status. Status == Match. Status. Match. Found) { IAsync. Operation<IMultiplayer. Session> join. Operation = this. signed. In. User. Join. Multiplayer. Session. Async( status. Session. Id, 0, custom. User. Data); join. Operation. Completed = new Async. Operation. Completed. Handler<IMultiplayer. Session>(Join. Multiplayer. Session. Complete); join. Operation. Start(); }
Multiplayer Information Exchange private void Join. Multiplayer. Session. Complete (IAsync. Operation<IMultiplayer. Session> async) { Create a Random. Access. Stream to send data this. session = async. Get. Results(); between session members IRandom. Access. Stream data = this. Create. Data. Stream("e 4 e 5"); this. session. Post. Game. Message. Async(0, false, 0, data); } Post data to all session members
Xbox LIVE Developer Platform Interfaces Best Practices Xbox LIVE Service (REST) ü ü ü Designed for lightweight experiences Optimized for access from any device Always connected Async Multiplayer only Great for service-to-service integration Xbox LIVE on Windows Runtime ü ü ü ü Designed for full title development Offline or Online Enhanced cloud-based Anti-Piracy Multiplayer (Async and Sync Subnet and Internet) Up to 99 achievements Up to 1000 Gamer score Windows Notification Support Presence
Submit Concept Microsoft Review Agreement SDK Access http: //go. microsoft. com/fwlink/? Link. Id=228422
Review
• PLAT-751 T - 3 D Graphics in Metro Style Apps and Games • PLAT-752 T - Tuning GPU usage for any form factor • PLAT-754 T- From touch to gamepads: master player input in your Metro style game • PLAT-755 T - Compelling audio and video for Metro style games • TOOL-761 T - A lap around Direct. X game development tools • PLAT-766 T - Introduction to Direct. X for Metro style apps • PLAT-769 T - Achieving high performance 2 D graphics with Direct 2 D • PLAT-770 T - Create cool image effects with Direct 2 D
http: //developer. xboxlive. com • Game Submission: http: //go. microsoft. com/fwlink/? Link. Id=228422 • MSDN Direct. X Developer’s Center: http: //msdn. microsoft. com/directx
http: //forums. dev. windows. com http: //bldw. in/Session. Feedback
- Slides: 44