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-06-01 04:30:20 +02:00
2026-06-04 09:27:13 +02:00
2026-05-13 23:23:45 +02:00
2026-06-04 09:27:13 +02:00
2026-05-30 09:14:32 +02:00
2026-05-31 07:33:06 +02:00
2026-05-10 23:59:25 +02:00
2026-05-30 09:14:32 +02:00
2026-06-01 04:30:20 +02:00
2026-05-15 23:31:26 +02:00
2026-05-20 04:49:11 +02:00
2026-05-30 09:14:32 +02:00
2026-05-12 21:47:18 +02:00
2026-05-20 04:49:11 +02:00
2026-05-12 19:41:56 +02:00
2026-05-06 07:13:43 +02:00
2026-05-15 23:31:26 +02:00
2026-05-06 07:13:43 +02:00
2026-05-30 09:14:32 +02:00
2026-05-11 15:43:10 +02:00
2026-06-01 02:36:28 +02:00
2026-06-01 02:36:28 +02:00
2026-06-01 02:36:28 +02:00
2026-06-02 01:59:26 +02:00
2026-05-06 07:13:43 +02:00
2026-05-17 23:59:56 +02:00
2026-05-18 08:06:47 +02:00
2026-05-06 07:13:43 +02:00
2026-05-06 07:13:43 +02:00
2026-05-10 23:59:25 +02:00
2026-05-17 21:58:05 +02:00
2026-05-13 16:15:54 +02:00
2026-05-30 09:14:32 +02:00
2026-05-20 04:49:11 +02:00
2026-05-21 18:09:42 +02:00
2026-05-11 15:43:10 +02:00
2026-05-20 03:51:33 +02:00
2026-06-03 09:57:27 +02:00
2026-05-09 14:51:02 +02:00
2026-05-30 11:18:51 +02:00
2026-05-17 19:05:37 +02:00
2026-06-01 04:30:20 +02:00
2026-05-09 17:54:34 +02:00
2026-05-30 09:14:32 +02:00
2026-05-13 23:23:45 +02:00
2026-05-09 14:51:02 +02:00
2026-05-11 15:43:10 +02:00
2026-05-20 04:49:11 +02:00
2026-05-11 15:43:10 +02:00