Persona inquiries are usually presented fullscreen on iOS, but it is possible to launch inquiries inline using the SDK. The inline flow lets you embed the Persona Inquiry directly into your app’s navigation. Your app controls the presentation, navigation actions (back/cancel), and dismissal of Persona.
To launch an inquiry inline, build one via same builders as you normally would. Then call startInline() on the built Inquiry to get a PersonaInlineViewController. This viewController is detached from the view hierarchy. startInline() returns nil if the Inquiry has already been started or completed.
The inline view controller can be presented like any other UIViewController. How you present it depends on your app’s architecture.
By default, the SDK’s built-in navigation bar is hidden so that you can provide your own. Configure title and bar buttons on the view controller’s navigationItem:
When the user taps your back or cancel buttons, you can choose to forward the action to the inline view controller:
Inline Inquiries return results through the same InquiryDelegate protocol used by the modal flow. Implement it on the same object you passed as delegate: when constructing the Inquiry.
Unlike the fullscreen presentation flow, the inline flow is not automatically dismissed on completion. Your app is responsible for removing or popping the inline view controller from its container.
Because the SDK does not render its own navigation bar in the inline flow, your app needs to keep its buttons in sync with the SDK’s internal state if you wish to allow users to navigate within Persona’s flow. Inquiries can have complex states where the back and/or cancel actions are not available, and your UI should reflect this.
Implement PersonaInlineDelegate to receive navigation state updates and a one-time signal when the first step is ready to display:
By default there is a brief loading period before the first step renders. You can either show your own loading UI while the SDK initializes, or hold onto the inline view controller and only present it once onReady() is called to avoid a visible loading delay.
Use InquiryDelegate.inquiryEventOccurred(event:) to react to flow progression — for example, to update a progress indicator, breadcrumb, or analytics event as the user moves between steps.
pageChange.name is the step name you configured in your Inquiry Template, so the strings you compare against should match the step names from your own template (not the SDK’s internal step types). Flow completion is signaled by inquiryComplete, not by a pageChange event.