Building a Universal Print connector
This article contains pointers to resources as well as information to help ISVs build a Universal Print connector.
For background information about the connector, please see the Universal Print connector overview.
Client ID registration
Client ID registration is the step required setting up your Azure Active Directory identity to communicate with Universal Print. Please see Printer client ID registration. The article describes client ID registration for printers that have Universal Print support in their firmware. It applies to the connector since the connector acts on behalf of printers that don't have that such capability in their firmware.
Please see the section 4 "Model" of the IPP Shared Infrastructure Extensions spec (IPP-Infra). This document will be referred to later in this article.
In the case of Universal Print
- The Universal Print IPP Service acts as the "IPP Infrastructure Printer". To retrieve the URI for the IPP service endpoint, refer to the printService resource type in the Microsoft Graph API.
- The connector acts as the "IPP Proxy".
The connector performs a number of tasks on behalf of the printers installed on it. This section includes the information required to implement those connector tasks.
Please see connector printer registration for background information.
The printer registration flow is described in the Universal Print printer registration.
At the end of the printer registration process, a certificate is generated for the printer. This certificate is used to authenticate all subsequent requests sent to Universal Print on behalf of the printer (see Getting a printer token). Store the certificate securely!
Updating printer description attributes
Please refer to the IPP Proxy task called "Startup" in the sequence diagram on page 20 in the IPP-Infra spec for context.
List of supported printer description attributes
For documentation of acceptable values for these attributes, please refer to https://www.iana.org/assignments/ipp-registrations/ipp-registrations.xhtml.
Microsoft custom connector attributes
|microsoft-universal-print-connector-app-version||Text with language||Connector metadata used for identifying the connector when troubleshooting information is collected. It is included in printer's Update-Output-Device-Attributes operation.|
|microsoft-universal-print-connector-operating-system||Text with language||Connector metadata used for identifying the connector when troubleshooting information is collected. It is included in printer's Update-Output-Device-Attributes operation.|
|microsoft-universal-printer-driver-name||Text with language||Used by the connector/printer to identify the printer driver used by the printer. It is included in printer's Update-Output-Device-Attributes operation.|
|microsoft-universal-printer-driver-version||Text with language||Used by the Connector/Printer to identify the printer driver version used by the printer. It is included in printer's Update-Output-Device-Attributes operation.|
|microsoft-output-device-job-state-message||Text without language||Used by the Connector/Printer to specify an extended error message when a print job fails. It is included when the printer calls the UpdateJobStatus operation. This can include an underlying error code, exception stack/message, or non-PII details that help troubleshoot the job failure.|
Setting up notification for printers
The connector does most of its communication with Universal Print through the Universal Print Notification Service. Through the notification mechanism, the connector can receive events about actions it needs to take on behalf of printers (e.g. fetch a pending print job).
The 'ippget' notification mechanism described in RFC 3996 is the way to setup an event-based notification channel with Universal Print. Without such a channel, the connector must continuously send requests to the Universal Print Notification Service (i.e. have a poll-based notification channel) to retrieve event data.
To get the URI for the Notification Service endpoint, refer to the printService resource type in the Microsoft Graph API.
Please refer to the flow starting from IPP Proxy task called "Retrieve Job from Infrastructure Printer" in the sequence diagram on page 20 in the IPP-Infra spec.
Refer to Page 20 in the IPP Spec (follow the sequence diagram from Get Jobs onwards).
Please refer to Delete printer in the Microsoft Graph API.