# Miscellaneous ## Minimum requirements When using the JavaScript SDK on desktop, we recommend using the latest browser version. The [Sinch RTC Reference Applications](https://github.com/sinch/rtc-reference-applications) (and the Sinch SDK) works on all major browsers currently available. However, the SDK relies on the W3C Push API to send push notifications, so the browser must support this API. For a detailed list of minimum version requirements for each browser, see: [link](https://developer.mozilla.org/en-US/docs/Web/API/Push_API). ### iOS restrictions To receive push messages on iOS, keep the following in mind: - Your application must run on Safari 16.4+. Other browsers on iOS run within a WebView, which does not support the Push API. - The application must run as a standalone app. This means you need to set the `"display": "standalone"` property in your app’s `manifest.json` file. Additionally, the user must add the app to the home screen and launch it from there. See how this is handled within our reference app. Search for `manifest.json` file and `isIOSBrowserNotInStandaloneMode()` check. - Browsers usually allow HTTP traffic for local development. This facilitates testing JavaScript applications locally, on desktop browsers. However, when testing on a mobile device connected via USB, localhost refers to the device itself and not the machine serving the web application. In this case, HTTPS is required to ensure that the mobile device and the browser can access the application hosted on desktop. For more information regarding Push API on iOS see [link](https://developer.apple.com/documentation/usernotifications/sending-web-push-notifications-in-web-apps-and-browsers). ### Permission prompt from user gesture In browsers other than Chrome, it is typically required that the first interaction with the Push API, which triggers a permission request, must be initiated by a user action (e.g., a user click). This interaction usually happens automatically when the SinchClient starts. As a result, in some cases, we cannot start the SinchClient automatically when the page loads. Instead, we must delay the process until the user performs some interaction. For a more detailed explanation and a working example of how to handle this issue, see how the `canAutoStart()` method is used in the reference app. ## Restrictions on user IDs User IDs **must not** be longer than **255** bytes, **must** only contain URL-safe characters, and be restricted to the following character set: ```text ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghjiklmnopqrstuvwxyz0123456789-_= ``` If you need to use *User IDs* containing characters outside the allowed set above, you could consider *base64*-encoding the raw *User IDs* using a URL-safe base64 alphabet as described in [https://tools.ietf.org/html/rfc4648#section-5](https://tools.ietf.org/html/rfc4648#section-5). Note how the allowed character set overlaps with the URL-safe base64 alphabet, but doesn't allow characters in the **non**-URL-safe alphabet, for example `/` (forward slash) and `+` (plus sign). ## Encryption export regulations Please check the Summary of U.S. Export Controls Applicable to Commercial Encryption Products and ensure that the application is registered for the Encryption Regulations, if applicable. It can be found under this [link](https://www.bis.doc.gov/index.php/policy-guidance/encryption). ## Statistics The Sinch SDK client uploads statistics to the Sinch servers at the end of a call, a call failure, or a similar event. The statistics are used for the monitoring of network status, call quality, and other aspects regarding the general quality of the service. Some of the information **is not** anonymous and may be associated with the User ID call participants. The statistics upload is done by the client in the background. ## Third-Party libraries and copyright notices All Third Party Libraries and Copyright notices: [Sinch Terms of Service](https://www.sinch.com/terms-of-service/).