View in English

  • 打开菜单 关闭菜单
  • Apple Developer
搜索
关闭搜索
  • Apple Developer
  • 新闻
  • 探索
  • 设计
  • 开发
  • 分发
  • 支持
  • 账户
在“”范围内搜索。

快捷链接

5 快捷链接

视频

打开菜单 关闭菜单
  • 专题
  • 相关主题
  • 所有视频
  • 关于

返回 WWDC25

大多数浏览器和
Developer App 均支持流媒体播放。

  • 简介
  • 概要
  • 转写文稿
  • “钱包”的新功能

    了解“钱包”中的最新功能和改进。我们将介绍如何以惊艳的全新设计更新你的登机牌,并探索适用于多场次活动门票的新功能。我们还将讨论有助于你将凭证无缝添加到“钱包”中的 API 更新。

    章节

    • 0:00 - Introduction
    • 0:51 - Add upcoming events to tickets
    • 7:08 - Upgrade your boarding passes
    • 16:18 - Automatically add passes

    资源

    • Human Interface Guidelines: Wallet
    • PassKit (Apple Pay and Wallet)
      • 高清视频
      • 标清视频

    相关视频

    WWDC25

    • Apple Pay 的新功能

    WWDC24

    • “钱包”和 Apple Pay 的新功能
  • 搜索此视频…

    Hi, and welcome to What’s new in Wallet. I'm Pavel, an engineer on the Wallet team. In today’s session, I’ll walk you through the new features coming to Wallet this year, and how to adopt them for your passes. First, I’ll demonstrate how to add upcoming event information to your tickets, giving ticket holders easy access to all the events covered by their ticket. Then, I’ll show you how to upgrade your boarding passes with a brand new design that provides passengers with all the flight information they need throughout their journey. And to finish up, I’ll demonstrate how to use a new PKPassLibrary API that lets your iOS app automatically add passes to Wallet after a one-time authorization prompt.

    We have a lot to cover, so let’s jump right into upcoming events.

    Last year, Wallet introduced Poster Event Tickets that use semantic tags to power a brand new design that provides useful context about an event, with a link to Maps for directions to the venue, and an Event Guide that shows rich details about the event and additional services in your app. This year, Poster Event Tickets will support Upcoming Events, allowing for easy access to multiple events using just one ticket.

    Tapping an upcoming event opens a detail screen that mirrors the structure of a Poster Event Ticket. This screen can be configured with new artwork for the event, venue information, a full event guide, and other information specific to this event.

    Upcoming events leverage the Poster Event Ticket semantics introduced in iOS 18. For an overview of how these semantics work, I encourage you to watch the “What’s new in Wallet & Apple Pay” session from WWDC24.

    Now I’ll show you how to configure an upcoming event in your pass.json. Upcoming events are defined in a new “upcomingPassInformation” array that contains all of the events Wallet should show in the upcoming events list.

    For each object in the “upcomingPassInformation” array, set its type to “event” and include a unique identifier, a display name for the event, and the event’s date.

    These fields are prominently displayed on the details screen for this upcoming event.

    The upcoming event object follows the same structure that’s used for building a Poster Event Ticket.

    Include a “semantics” object for information about the event and “additionalInfoFields” or “backFields” for custom properties that aren't covered by semantics.

    A new “URLs” object groups all of the actions related to this event, and an “images” object configures the images associated with the event. Let me show you how these objects configure the UI for an upcoming event. Starting at the top of the upcoming event screen, Wallet displays a header image that represents the event.

    By default, the pass’s background image is displayed here. But you can add a custom “headerImage” to the upcoming event by specifying the URL where the image can be found.

    Keep in mind that upcoming events appear on iOS and watchOS devices, so it’s a good idea to provide separate images for different display scales, so that Wallet can select the best fit for the device it’s being viewed on.

    Below the header, a tile displays the “venueName” and allows the ticket holder to view this venue in Maps. This leverages the same semantic structure used for passes. In my upcoming events semantics object, I’ve added the venue information using the “venueName”, “venuePlaceID”, and “venueLocation” semantics.

    This semantics object is where I should add all semantics that describe this event, such as performers or seating information, enabling Wallet to surface those details in the relevant spots. For example, since I added seats for this upcoming event, Wallet lists them right on the details screen.

    Some semantics like venue name and seats are displayed prominently on this screen. Most others, populate the upcoming event guide, which works the same way as the pass event guide introduced in iOS 18.

    The upcoming event guide is specifically for this upcoming event and gets populated by the contents of the upcoming event object. Event guides can be configured to show buttons for quick access to common actions, Weather tile that uses my event’s location semantics, a venue map, and other relevant semantics.

    To set the URLs displayed here, I populate the URLs object in the upcoming event with the actions I want to show for that event.

    In this case, I’ve provided a different set of URLs from the ones I show in my pass event guide. Remember that the upcoming event has the same structure as the pass, but doesn’t reuse the properties I defined for the pass. If I want my upcoming event guide and pass event guide to show the same URLs, I have to include the same values in my upcoming event object.

    The venue map for upcoming events can be configured by specifying the URLs to fetch the image from, just like I demonstrated for the header image earlier. By default, Wallet will not reuse the venue map from the pass event guide.

    However, I can reuse the same venue map by setting the “reuseExisting” property to true. Note that if I don’t provide URLs or set “reuseExisting” to true, Wallet will not display a venue map for my upcoming event.

    Upcoming events are a great way to keep ticket holders informed of every event they can attend using their ticket.

    As you explore adding upcoming events to your tickets, remember that they use the same structure as the event ticket. So a great place to start is by considering how each semantic and URL you provide on the pass should change for the upcoming event.

    Wallet's documentation is a great resource to discover all the ways you can customize your tickets and upcoming events. You don’t have to define all upcoming events when you first create the pass. If you want to add upcoming events over time, send a pass update with the new upcoming events. The “isActive” property in your upcoming event lets Wallet know when the event is relevant, so it's important to update it at the start and end of events. If an event gets canceled or is no longer relevant to the ticket holder, consider removing it from your pass.json.

    This ensures the upcoming event list only shows relevant and up-to-date information. Now, let’s take a look at the upgraded boarding passes launching this year and how you can take advantage of all the new features. Wallet boarding passes have helped millions of passengers navigate through airport security and board their flights. This year, boarding passes are getting a major upgrade with a new design that’s more dynamic and configurable than ever before. Upgraded boarding passes integrate with Apple’s flight service and stay up to date automatically so you don't have to update passes for every gate change or delay.

    And there’s a brand new live activity that provides easy access to key flight information and keeps passengers informed throughout their journey.

    Live activities can even be shared via Messages, allowing friends and family to track the flight on their own devices.

    Flight tracking is built into all upgraded boarding passes. When a passenger adds an upgraded boarding pass, Wallet subscribes to updates about the flight’s status and notifies the passenger of any changes to their flight.

    These updates are propagated to both the boarding pass and live activity, so that passengers see up-to-date information about their flight on both surfaces.

    In addition to flight tracking, the new boarding passes also feature deeper system integrations, with Maps for directions to the airport and FindMy for tracking luggage. And a new airline services and upgrades section gives passengers even more information about their trip.

    Tapping into this section shows all the actions a passenger can take throughout their journey, along with a summary of information related to those actions. Let’s take a closer look at how these new features work and how you can configure them when you adopt upgraded boarding passes.

    Starting from the top of the boarding pass, the header displays the flight number and departure date. Upgraded boarding passes always show these fields here using semantics from your pass.json to identify the flight.

    Wallet uses the airlineCode, flightNumber, and originalDepartureDate semantics to start tracking the flight using Apple’s flight service as soon as the boarding pass is added. If this is a codeshare flight, it’s most common to provide the marketing airline code and flight number. If you want passengers to see the operating flight number, you're welcome to include that instead. Both options will allow Wallet to find the correct flight in Apple’s flight service. Wallet will automatically update the times displayed on the pass using the data from Apple’s flight service. If you send a pass update as well, make sure to use the currentDepartureDate or currentArrivalDate semantics. The original dates should not be updated unless the flight has officially been rescheduled. Coming back to the pass, the next section displays the city name, airport code, and gate times for departure and arrival.

    Your departure and arrival date semantics should specify the gate times because boarding time is displayed as a separate prominent field on the boarding pass and is based on the originalBoardingDate and currentBoardingDate semantics. When Wallet updates departure and arrival times, boarding time is also automatically updated to reflect the new departure time.

    When a pass is added or updated, Wallet compares your boarding time and departure time semantics to calculate a boarding duration.

    Then, when the departure time changes in Apple’s flight service, the boarding time displayed on the pass will automatically update to maintain the boarding duration calculated from your semantics. So if a flight is delayed by three hours, for example, the boarding time will also be pushed back by three hours. When you update the pass with a new currentBoardingDate, Wallet will recalculate the boarding duration and update the time on the boarding pass if needed.

    This is an example of how semantics give Wallet context about a flight but aren’t directly tied to the UI.

    Wallet prioritizes showing up-to-date information to passengers and uses your semantics to decide how the data displayed on the pass should update over time. Let’s take a look at how semantics power other parts of the upgraded boarding pass UI.

    Badges are a new feature that let passengers and gate agents quickly identify important information right on the pass. Some of the semantics you include in your pass.json will be displayed under the passenger’s name.

    Upgraded boarding passes support up to two rows of badges and show information such as the ticket fare class, carry-on eligibility, or accessibility requests the passenger may have.

    Wallet considers the semantics in your pass.json and lays out the appropriate set of badges automatically.

    And to help standardize common badges across airlines, upgraded boarding passes support IATA Special Service Request Codes via the “passengerServiceSSRs” semantic.

    The text for most badges is defined by Wallet, but we've added a few semantics that allow you to fully control the label for information that’s unique to your airline. Let's take a look at an example.

    In the semantics object, I’ve added the service animal and onboard wheelchair special service request codes using the “passengerServiceSSRs” semantic.

    Let’s add a couple of custom semantics as well, such as the ticket fare class and the passenger's airline status.

    When I bring up the boarding pass again, I see the new badges based on my semantics. Notice how the first two badges use the strings I provided, but the special service request codes show strings provided by Wallet.

    Badges are a great example of how Wallet uses semantics. In my code, I didn’t define an explicit badges object with each field. Instead, by providing the relevant context about the passenger, Wallet was able to create badges that prioritize the most important information. Using semantics this way allows Wallet to fit more information on the boarding pass without sacrificing usability. The new schema exposes the same set of semantics to all airlines to ensure passengers see a consistent experience every time they fly.

    I encourage you to check out our developer documentation to discover even more semantics you can provide for upgraded boarding passes.

    Now I want to show you how to configure the airline services and upgrade screen with actions that bring users back into your app. When you include URLs in your pass.json for actions like managing a ticket, purchasing in-flight Wi-Fi, or seat upgrades, Wallet populates the services and upgrade screen with buttons for those actions, along with any semantics that provide additional context about that action.

    URLs are defined as top-level properties in your pass.json.

    Upgraded boarding passes support a range of common actions passengers can take before, during, and after a flight.

    Include URLs for all of the actions you want passengers to see on their boarding pass, and set up your app to open directly to the screen that lets the user complete each action.

    And remember that Wallet shows additional context for each action, so make sure you fill out as many semantics as you can to provide a rich, complete experience on this screen.

    Let me demonstrate with another example.

    I can provide a “purchaseLoungeAccessURL” to display a button for purchasing a lounge pass. But that button looks a little lonely and could benefit from some more context. If I include the “airlineLoungePlaceID” semantic, Wallet will show a Maps preview of the lounge’s location. By providing that extra context, I greatly improved the user experience and made the UI feel complete.

    That was just a quick look at how the services and upgrades screen is configured. The key thing to remember is that Wallet uses URLs and semantics from your pass.json to build the UI.

    Our developer documentation goes into much more detail about all of the available semantics and URLs, so be sure to check it out and add all of the actions your app supports.

    Before wrapping up, I want to discuss device compatibility for upgraded boarding passes. All of the new features I’ve shown you are supported on devices running the latest versions of iOS and watchOS. The schema for upgraded boarding passes adds new properties without interfering with the existing boarding pass schema.

    Passengers might have devices running previous operating systems, where Wallet doesn’t use these new properties. So the best way to adopt upgraded boarding passes is to add semantics and URLs to your existing boarding passes, to give passengers a great experience no matter what operating system version they have.

    So far, I’ve shown you how to make event tickets and boarding passes more dynamic once they’re in Wallet. Now, I want to show you how to make adding these passes to Wallet feel seamless with a new PKPassLibrary API. Adding a pass to Wallet has always required user interaction. To add a pass to Wallet, your app can present an AddPassesViewController that shows a preview of the pass and requires an extra tap to add the pass. Alternatively, you can call the addPasses API on PKPassLibrary, which displays an alert before adding the pass to Wallet.

    These options are great for users who don’t frequently add passes to Wallet because it gives them full control over when the passes should be added. But you might have users who regularly add passes to Wallet from your app. Frequent flyers, for example, might add several boarding passes a week, and reviewing each one individually might not be valuable to them. New this year, you can request the background add passes capability, which prompts the user to allow your app to add passes to Wallet automatically.

    Then use the addPasses API, and your passes will be added in the background without additional prompts. Wallet will simply send a notification to alert the user that your app has added a pass. Adopting the new API is only a few lines of code. If you’ve ever requested permission to send push notifications, this will feel quite familiar. Here I have a SwiftUI view that shows an AddPassToWallet button. The first step is to request the background add passes capability. I’ll do that in the button’s completion handler to prompt the user after they add their next pass.

    This is an asynchronous call, so I wrap my code in a Task, and call requestAuthorization (for: .backgroundAddPasses) on PKPassLibrary.

    When the completion for my button runs, the system prompts the user to grant this capability to my app.

    Remember that this is a one-time prompt, so calling it after the user has already made a selection won't prompt them again.

    Now, let’s add some code to check our authorization and add the pass automatically.

    When my view loads, I can check my authorization status using the authorizationStatus (for capability:) on PKPassLibrary.

    Then if I’m authorized, I call PKPassLibrary.addPasses to add my pass.

    Note that this API accepts an array of passes, so I can add several passes at once. And that's all there is to it. With these few lines of code, my app is now able to add passes automatically. Let's recap how the new API works. Request the background add passes capability with the new requestAuthorization (for capability:) API. Remember that you can only request authorization once, so it’s a good idea to use this API when you’re confident that the user will accept.

    If you call this API more than once, it'll simply return your current status. After you request authorization, a new item will appear in the Settings app, allowing users to toggle this capability for your app at any time. You can check your current authorization without showing a prompt by calling authorizationStatus(for capability:) And to leverage the background add passes capability, use the addPasses API when you add passes to Wallet. And that’s what’s new in Wallet! The new features launching this year make event tickets and boarding passes more dynamic than ever and allow your iOS app to seamlessly integrate with Wallet. Take advantage of the new features by adopting the new properties in your boarding passes and event tickets.

    The documentation goes into much more detail, so be sure to check it out. Because these are new features, you’ll want to make sure you continue to support previous operating system versions to give customers a great experience regardless of the operating system version they’re on. And remember, we've got a great API that makes it convenient for frequent Wallet users to add their passes, so be sure to take advantage of the new background add passes capability whenever possible.

    Thanks for watching, and have a great WWDC.

    • 0:00 - Introduction
    • This year's Wallet updates include enhanced tickets with event info, redesigned boarding passes with flight details, and an API for automatic pass addition from iOS apps.

    • 0:51 - Add upcoming events to tickets
    • Enhanced poster event tickets now include support for upcoming events. This new feature allows people to access multiple events using a single ticket. Tapping on an upcoming event opens a detailed screen displaying event-specific artwork, venue information, a full event guide, and other relevant details. The upcoming event screen utilizes the same semantic structure introduced in iOS 18. Upcoming events can be dynamically added, updated, or removed from the pass as needed, ensuring people have the most relevant and up-to-date information for all their events on their iOS and watchOS devices.

    • 7:08 - Upgrade your boarding passes
    • The latest upgrade to Wallet boarding passes introduces a dynamic and configurable design that integrates seamlessly with Apple’s flight service. These passes automatically update in real time, eliminating the need for manual refreshes due to gate changes or delays. A new Live Activity feature provides continuous flight information, and people can share this information with friends and family using Messages. The passes also include built-in flight tracking, directions to the airport via Maps, and luggage tracking with FindMy. A new section offers airline services and upgrades, detailing available actions throughout the journey. The boarding pass displays essential flight details, such as flight number, departure and arrival dates and times, gate numbers, and boarding time, which all automatically adjust based on flight updates. Upgraded boarding passes in Wallet utilize semantics to automatically generate badges displaying important passenger information, such as ticket fare class, airline status, and special service requests, like service animals and onboard wheelchairs. Standard IATA codes are used for common requests, and airlines can customize labels for unique details. Wallet also populates a services and upgrade screen with buttons for actions like managing tickets, purchasing Wi-Fi, or seat upgrades, based on URLs provided in the 'pass.json' file. You can enhance additional context, such as lounge locations, by including relevant semantics. These new features are supported on the latest versions of iOS and watchOS. Airlines should add semantics and URLs to their existing boarding passes to provide a great experience for all passengers, regardless of their device's operating system version.

    • 16:18 - Automatically add passes
    • A new 'PKPassLibrary' API enables apps to request the ability to add passes to Wallet automatically for frequent users. This streamlines the process, eliminating the need for individual user interaction each time a pass is added. Apps can request this background capability to add passes from the person once, after which the system silently adds the pass to Wallet, with a notification sent to alert the person.

Developer Footer

  • 视频
  • WWDC25
  • “钱包”的新功能
  • 打开菜单 关闭菜单
    • iOS
    • iPadOS
    • macOS
    • Apple tvOS
    • visionOS
    • watchOS
    打开菜单 关闭菜单
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    打开菜单 关闭菜单
    • 辅助功能
    • 配件
    • App 扩展
    • App Store
    • 音频与视频 (英文)
    • 增强现实
    • 设计
    • 分发
    • 教育
    • 字体 (英文)
    • 游戏
    • 健康与健身
    • App 内购买项目
    • 本地化
    • 地图与位置
    • 机器学习
    • 开源资源 (英文)
    • 安全性
    • Safari 浏览器与网页 (英文)
    打开菜单 关闭菜单
    • 完整文档 (英文)
    • 部分主题文档 (简体中文)
    • 教程
    • 下载 (英文)
    • 论坛 (英文)
    • 视频
    打开菜单 关闭菜单
    • 支持文档
    • 联系我们
    • 错误报告
    • 系统状态 (英文)
    打开菜单 关闭菜单
    • Apple 开发者
    • App Store Connect
    • 证书、标识符和描述文件 (英文)
    • 反馈助理
    打开菜单 关闭菜单
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program (英文)
    • News Partner Program (英文)
    • Video Partner Program (英文)
    • 安全赏金计划 (英文)
    • Security Research Device Program (英文)
    打开菜单 关闭菜单
    • 与 Apple 会面交流
    • Apple Developer Center
    • App Store 大奖 (英文)
    • Apple 设计大奖
    • Apple Developer Academies (英文)
    • WWDC
    获取 Apple Developer App。
    版权所有 © 2025 Apple Inc. 保留所有权利。
    使用条款 隐私政策 协议和准则