chahinebrini
822053e11e
feat(calls): CallKit/ConnectionService + VoIP-PushKit + EU-Ringback
Caller/Callee UX:
- lib/ringback.ts + assets/sounds/ringback_eu.mp3 (EU 425Hz Festnetz-Tone)
- stores/call.ts: stopRingback bei connected, hangup-reasons, logCallToChat fix
- locales: 'Wird angerufen…' statt 'Ruft an…'
CallKit (iOS) + ConnectionService (Android):
- lib/callkit.ts: setupCallKeep, displayIncomingCall, startOutgoingCall, reportConnected/Ended (appName 'ReBreak-Audio', includesCallsInRecents=false für DSGVO/DiGA)
- hooks/useCallKeepEvents.ts: native answer/end/mute → useCallStore-Actions
- stores/call.ts: CallKit-Aufrufe an allen lifecycle-Punkten
- app.config.ts: @config-plugins/react-native-callkeep + UIBackgroundModes voip/audio + Android-Telecom-Perms
VoIP-PushKit Backend:
- services/voip-push.ts: @parse/node-apn Provider mit .p12 (Topic org.rebreak.app.voip)
- services/push.ts sendCallRingPush: feuert beide Pfade (VoIP iOS + Expo Android/Fallback)
- prisma: push_tokens.voip_token Column + Migration 20260604
- api/users/me/push-token: optional voipToken im Body
- Env (Infisical): APNS_VOIP_P12_PATH/PASSWORD/TOPIC/PRODUCTION
Push-tap routing + cold-start handling:
- app/_layout.tsx: type:'call' Push → useCallStore.receiveIncoming + /call
Docs: ops/CALLKIT_SETUP.md (Apple-Portal-Steps für VoIP-Cert)
2026-06-04 09:27:13 +02:00
..
2026-05-06 07:13:43 +02:00
2026-05-06 07:13:43 +02:00
2026-05-06 07:13:43 +02:00
2026-05-06 07:13:43 +02:00
2026-05-06 07:13:43 +02:00
2026-05-06 07:13:43 +02:00
2026-05-06 07:13:43 +02:00
2026-05-06 07:13:43 +02:00
2026-05-06 07:13:43 +02:00
2026-05-06 07:13:43 +02:00
2026-05-07 21:14:06 +02:00
2026-05-08 22:30:03 +02:00
2026-05-08 19:31:28 +02:00
2026-05-09 23:48:11 +02:00
2026-05-09 22:28:07 +02:00
2026-05-09 15:55:28 +02:00
2026-05-09 15:48:35 +02:00
2026-05-09 15:48:35 +02:00
2026-05-09 16:28:36 +02:00
2026-05-11 04:06:49 +02:00
2026-05-11 04:40:32 +02:00
2026-05-11 17:19:37 +02:00
2026-05-11 16:23:02 +02:00
2026-05-13 16:35:18 +02:00
2026-05-13 19:13:24 +02:00
2026-05-13 16:35:18 +02:00
2026-05-13 19:06:01 +02:00
2026-05-13 21:04:14 +02:00
2026-05-14 22:05:35 +02:00
2026-05-14 22:05:35 +02:00
2026-05-15 21:16:05 +02:00
2026-05-15 22:41:17 +02:00
2026-05-16 21:00:20 +02:00
2026-05-16 01:53:03 +02:00
2026-05-16 10:04:34 +02:00
2026-05-16 00:29:35 +02:00
2026-05-16 02:24:42 +02:00
2026-05-16 08:50:04 +02:00
2026-05-17 15:52:53 +02:00
2026-05-17 23:48:25 +02:00
2026-05-17 19:05:37 +02:00
2026-05-18 06:23:08 +02:00
2026-05-17 22:39:18 +02:00
2026-05-22 20:05:44 +02:00
2026-05-22 21:09:00 +02:00
2026-05-26 00:46:44 +02:00
2026-05-28 16:09:58 +02:00
2026-05-30 08:16:45 +02:00
2026-05-30 10:56:39 +02:00
2026-05-30 11:18:32 +02:00
2026-06-01 04:34:34 +02:00
2026-06-01 02:36:28 +02:00
2026-06-03 21:14:31 +02:00
2026-06-03 10:57:29 +02:00
2026-06-04 09:27:13 +02:00
2026-06-02 09:15:19 +02:00
2026-06-03 00:18:24 +02:00
2026-05-06 07:13:43 +02:00
2026-05-06 07:13:43 +02:00
2026-05-06 07:13:43 +02:00
2026-05-06 07:13:43 +02:00
2026-05-06 07:13:43 +02:00
2026-05-25 07:11:47 +02:00
2026-05-06 07:13:43 +02:00
2026-05-06 07:13:43 +02:00