Skip to main content

Authenticated Downloads

Pass custom headers to download protected files using the requestOptions parameter.

await ExpoQuickLook.previewFile({
uri: 'https://api.example.com/documents/123/download',
requestOptions: {
headers: {
Authorization: `Bearer ${token}`,
},
},
});

Custom Headers

The requestOptions.headers field accepts any Record<string, string>. Common use cases:

// Bearer token
requestOptions: {
headers: {
Authorization: `Bearer ${accessToken}`,
},
}

// API key
requestOptions: {
headers: {
'X-API-Key': apiKey,
},
}

// Multiple headers
requestOptions: {
headers: {
Authorization: `Bearer ${token}`,
'X-Request-ID': requestId,
},
}

Handling Auth Errors

When authentication fails (401/403), the promise rejects with an HTTP error:

try {
await ExpoQuickLook.previewFile({
uri: 'https://api.example.com/documents/123',
requestOptions: {
headers: { Authorization: `Bearer ${token}` },
},
});
} catch (error) {
if (error.message.includes('401')) {
// Token expired — refresh and retry
const newToken = await refreshToken();
await ExpoQuickLook.previewFile({
uri: 'https://api.example.com/documents/123',
requestOptions: {
headers: { Authorization: `Bearer ${newToken}` },
},
});
}
}

Multi-File Preview with Auth

Authentication headers also work with previewFiles on iOS:

await ExpoQuickLook.previewFiles({
uris: [
'https://api.example.com/documents/1',
'https://api.example.com/documents/2',
],
requestOptions: {
headers: { Authorization: `Bearer ${token}` },
},
});

The same headers are used for all files in the list.