Aioapns
An efficient APNs Client Library for Python/asyncio
Install / Use
/learn @Fatal1ty/AioapnsREADME
aioapns - An efficient APNs Client Library for Python/asyncio
.. image:: https://github.com/Fatal1ty/aioapns/workflows/tests/badge.svg :target: https://github.com/Fatal1ty/aioapns/actions
.. image:: https://img.shields.io/pypi/v/aioapns.svg :target: https://pypi.python.org/pypi/aioapns
.. image:: https://img.shields.io/pypi/pyversions/aioapns.svg :target: https://pypi.python.org/pypi/aioapns/
.. image:: https://img.shields.io/badge/License-Apache%202.0-blue.svg :target: https://opensource.org/licenses/Apache-2.0
aioapns is a library designed specifically for sending push-notifications to iOS devices
via Apple Push Notification Service. aioapns provides an efficient client through
asynchronous HTTP2 protocol for use with Python's asyncio
framework.
aioapns requires Python 3.8 or later.
Performance
In my testing aioapns allows you to send on average 1.3k notifications per second on a single core.
Features
- Internal connection pool which adapts to the current load
- Support for certificate and token based connections
- Ability to set TTL (time to live) for notifications
- Ability to set priority for notifications
- Ability to set collapse-key for notifications
- Ability to use production or development APNs server
- Support for basic HTTP-Proxies
Installation
Use pip to install::
$ pip install aioapns
Basic Usage
.. code-block:: python
import asyncio
from uuid import uuid4
from aioapns import APNs, NotificationRequest, PushType
async def run():
apns_cert_client = APNs(
client_cert='/path/to/apns-cert.pem',
use_sandbox=False,
)
with read('/path/to/apns-key.p8') as key:
apns_key_client = APNs(
key=key,
key_id='<KEY_ID>',
team_id='<TEAM_ID>',
topic='<APNS_TOPIC>', # Bundle ID
use_sandbox=False,
)
request = NotificationRequest(
device_token='<DEVICE_TOKEN>',
message = {
"aps": {
"alert": "Hello from APNs",
"badge": "1",
}
},
notification_id=str(uuid4()), # optional
time_to_live=3, # optional
push_type=PushType.ALERT, # optional
)
await apns_cert_client.send_notification(request)
await apns_key_client.send_notification(request)
loop = asyncio.get_event_loop()
loop.run_until_complete(run())
License
aioapns is developed and distributed under the Apache 2.0 license.
Related Skills
node-connect
343.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
claude-opus-4-5-migration
90.0kMigrate prompts and code from Claude Sonnet 4.0, Sonnet 4.5, or Opus 4.1 to Opus 4.5
frontend-design
90.0kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
model-usage
343.1kUse CodexBar CLI local cost usage to summarize per-model usage for Codex or Claude, including the current (most recent) model or a full model breakdown. Trigger when asked for model-level usage/cost data from codexbar, or when you need a scriptable per-model summary from codexbar cost JSON.
