<!--
{
  "documentType" : "article",
  "framework" : "NetworkExtension",
  "identifier" : "/documentation/NetworkExtension/local-push-connectivity",
  "metadataVersion" : "0.1.0",
  "role" : "collectionGroup",
  "title" : "Local push connectivity"
}
-->

# Local push connectivity

Provide functionality similar to Apple Push Notification Service when access to the wider internet is unavailable.

## Discussion

Use the Local Push Connectivity API to maintain a persistent network connection to a server to alert users to Voice-over-IP (VoIP) calls and other messages. Local Push Connectivity is appropriate for use cases where an iOS device operates on a local, restricted network that doesn’t have access to APNs. The App Push Provider extension functions like a local network replacement for APNs; use it primarily to send small messages and alerts to users.

Local Push Connectivity has two components:

- [`NEAppPushManager`](/documentation/NetworkExtension/NEAppPushManager) is a programmatic interface for configuring the Local Push Connectivity extension. Your app creates [`NEAppPushManager`](/documentation/NetworkExtension/NEAppPushManager) instances to indicate on which Wi-Fi networks the extension runs. You also need to set the [`delegate`](/documentation/NetworkExtension/NEAppPushManager/delegate) of the [`NEAppPushManager`](/documentation/NetworkExtension/NEAppPushManager) so the iOS app can handle incoming calls reported by the extension.
- [`NEAppPushProvider`](/documentation/NetworkExtension/NEAppPushProvider) is a type you subclass to create and maintain a persistent network connection to your server. When a user’s iOS device joins a Wi-Fi network that has an SSID matching a configured SSID in your [`NEAppPushManager`](/documentation/NetworkExtension/NEAppPushManager) instance, the system launches your app extension and instantiates the [`NEAppPushProvider`](/documentation/NetworkExtension/NEAppPushProvider) subclass within that app extension. The framework calls your provider’s [`start(completionHandler:)`](/documentation/NetworkExtension/NEAppPushProvider/start(completionHandler:)), which is your cue to establish a connection to the server. The [`NEAppPushManager`](/documentation/NetworkExtension/NEAppPushManager) continues to run in the background, as long as the device joins the matching SSID. When your server notifies your [`NEAppPushProvider`](/documentation/NetworkExtension/NEAppPushProvider) of an incoming message or call, the provider alerts the user. Create this alert through either a local notification or by calling the [`reportIncomingCall(userInfo:)`](/documentation/NetworkExtension/NEAppPushProvider/reportIncomingCall(userInfo:)) method that allows the parent iOS app to trigger <doc://com.apple.documentation/documentation/CallKit>.

> Important:
> To use the Local Push Connectivity API, your app must have the <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.networking.networkextension> with the `app-push-provider` value. Request this entitlement from the [Entitlement Request Page](https://developer.apple.com/contact/request/local-push-connectivity). After you receive the entitlement, apply it to both your app target and your provider extension target.

### Supporting APNs and local push connectivity in one app

An app can use both Local Push Connectivity and Apple Push Notification Service. Typically, you use Local Push Connectivity in a restricted network environment, and use APNs in an unrestricted network. Think of Local Push Connectivity as your private network replacement for APNs, and therefore limit your functionality within the push provider extension to delivering local notifications and CallKit alerts to users.

Your server determines whether to use Local Push Connectivity or APNs:

- If the server has a viable connection of the type that’s established by the client’s [`NEAppPushProvider`](/documentation/NetworkExtension/NEAppPushProvider), send the notification over that connection. The push provider extension acknowledges receipt of any message it receives over the connection.
- If the server doesn’t have an active connection to the [`NEAppPushProvider`](/documentation/NetworkExtension/NEAppPushProvider), or if the extension fails to acknowledge a message sent by the server, use APNs.

## Topics

### Essentials

[`NEAppPushManager`](/documentation/NetworkExtension/NEAppPushManager)

An object that configures a push provider and manages its life cycle.

[`NEAppPushProvider`](/documentation/NetworkExtension/NEAppPushProvider)

An object that creates and maintains a persistent network connection to a local push server.

[Maintaining a Reliable Network Connection](/documentation/NetworkExtension/maintaining-a-reliable-network-connection)

Implement your Local Push Connectivity app to ensure delivery of notifications.

[Receiving Voice and Text Communications on a Local Network](/documentation/NetworkExtension/receiving-voice-and-text-communications-on-a-local-network)

Provide voice and text communication on a local network isolated from Apple Push Notification service by adopting Local Push Connectivity.

### Essentials

[`NEAppPushManager`](/documentation/NetworkExtension/NEAppPushManager)

An object that configures a push provider and manages its life cycle.

[`NEAppPushProvider`](/documentation/NetworkExtension/NEAppPushProvider)

An object that creates and maintains a persistent network connection to a local push server.

[Maintaining a Reliable Network Connection](/documentation/NetworkExtension/maintaining-a-reliable-network-connection)

Implement your Local Push Connectivity app to ensure delivery of notifications.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)