OneSignal을 사용하여 PushKit 토큰 등록 및 VoIP 인증서로 iOS에서 VoIP 푸시 알림을 전송하고, 통화 스타일 동작을 위한 Android 대안을 알아보세요.
VoIP 푸시 알림은 앱이 백그라운드 상태이거나 종료되어 있을 때도 수신 전화 알림을 받을 수 있게 해줍니다. Apple은 VoIP 푸시를 표준 푸시 알림과 다르게 처리합니다 — 별도의 인증서 유형, 별도의 토큰(PushKit을 통해), 그리고 다른 전달 규칙을 사용합니다.OneSignal은 VoIP 푸시 전송을 지원하지만, OneSignal SDK는 VoIP 토큰 등록을 처리하지 않습니다. 다음 작업은 직접 수행해야 합니다:
VoIP 푸시는 OneSignal API에서 아무런 오류 없이 실패할 수 있습니다. 다음 체크리스트를 확인하세요:
샌드박스/개발 빌드를 사용하고 있나요? Create User API를 통해 토큰을 등록할 때 반드시 "test_type": 1을 포함해야 합니다. 이를 생략하면 토큰이 프로덕션으로 등록되고, Apple이 푸시를 거부하여 자동으로 실패합니다.
올바른 인증서를 업로드했나요? VoIP OneSignal 앱은 표준 APNs 푸시 인증서가 아닌 **VoIP Services Certificate(.p12)**를 사용해야 합니다. Keychain Access에서 두 인증서가 유사하게 보일 수 있으므로 인증서 이름이 “VoIP Services”로 시작하는지 확인하세요.
올바른 OneSignal 앱으로 전송하고 있나요? 전송 요청의 app_id는 기본 푸시 앱이 아닌 VoIP 앱이어야 합니다. REST API Key도 VoIP 앱에서 가져와야 합니다.
VoIP 토큰이 유효한가요? 앱이 재설치되거나 기기가 복원될 때 토큰이 만료됩니다. 토큰이 64자의 소문자 16진수 문자열이고 최근에 등록되었는지 확인하세요.
앱이 reportNewIncomingVoIPPushPayload를 호출하나요? iOS 13부터 Apple은 VoIP 푸시를 수신했지만 CallKit에 통화를 보고하지 않는 앱을 종료합니다. 이것은 Apple의 요구 사항이며 OneSignal의 제한이 아닙니다.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"OneSignal Documentation","description":"OneSignal is a platform for sending push notifications, emails, in-app messages, and SMS campaigns via a single API, Journey Builder, and a dashboard.","colors":{"primary":"#3A3DB3","light":"#E54B4D","dark":"#3A3DB3"},"logo":{"light":"https://mintcdn.com/onesignal/yJcueeDCO7UpHnnY/logo/OneSignal-Logo.svg?fit=max\u0026auto=format\u0026n=yJcueeDCO7UpHnnY\u0026q=85\u0026s=1fcfb6fef6d820fd9d99c74850711107","dark":"https://mintcdn.com/onesignal/s4WC_KzLxf8ornqq/logo/OneSignal-Logo-White.svg?fit=max\u0026auto=format\u0026n=s4WC_KzLxf8ornqq\u0026q=85\u0026s=2573a53b5aea961e18c82b3af8f31925"},"favicon":"https://mintcdn.com/onesignal/SGduBFHpiRdg5l6h/favicon.ico?fit=max\u0026auto=format\u0026n=SGduBFHpiRdg5l6h\u0026q=85\u0026s=c0a99fadc0553c658a83741c5611cef4","api":{"examples":{"languages":["curl","typescript","python","php","go","ruby","java","csharp","rust"],"autogenerate":true}},"navbar":{"links":[{"href":"mailto:support@onesignal.com","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://dashboard.onesignal.com"}},"footer":{"socials":{"github":"https://github.com/OneSignal","linkedin":"https://linkedin.com/company/onesignal","youtube":"https://www.youtube.com/@onesignalofficial/playlists"}},"seo":{"metatags":{"apple-mobile-web-app-title":"OneSignal Docs"}},"fonts":{"family":"Nunito Sans"},"styling":{"eyebrows":"breadcrumbs","latex":true},"integrations":{"ga4":{"measurementId":"G-2DGWL0VYP5"},"posthog":{"apiKey":"phc_vZpvE0f5eyzcOt30FHer34yddVmNdo9kmlMVRBzLMtn","apiHost":"https://eu.i.posthog.com","sessionRecording":true}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"navigation":{"languages":[{"language":"en","href":"docs/en/home"},{"language":"cn","href":"docs/cn/home"},{"language":"ko","href":"docs/ko/home"},{"language":"ja","href":"docs/ja/home"},{"language":"tr","href":"docs/tr/home"},{"language":"pt-BR","href":"docs/pt-BR/home"},{"language":"es","href":"docs/es/home"},{"language":"fr","href":"docs/fr/home"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"onesignal","hasAudioNarration":false,"actualSubdomain":"onesignal","customDomains":["documentation.onesignal.com"],"gitSource":{"type":"github","owner":"onesignal","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af6169a2b24bfcd354977fe","clientVersion":"0.0.4117","searchFilterCounts":[{"language":"en","tag":"User Guides","count":204},{"language":"es","tag":"Guías del Usuario","count":178},{"language":"fr","tag":"Guides utilisateur","count":178},{"language":"ja","tag":"ユーザーガイド","count":178},{"language":"ko","tag":"사용자 가이드","count":178},{"language":"pt-BR","tag":"Guia do Usuário","count":178},{"language":"tr","tag":"Kullanıcı Kılavuzları","count":178},{"language":"cn","tag":"用户指南","count":176},{"language":"en","tag":"Message channels","count":90},{"language":"es","tag":"Canales de mensajería","count":84},{"language":"fr","tag":"Canaux de messagerie","count":84},{"language":"ja","tag":"メッセージングチャネル","count":84},{"language":"ko","tag":"메시지 채널","count":84},{"language":"pt-BR","tag":"Canais de mensagem","count":84},{"language":"tr","tag":"Mesaj kanalları","count":84},{"language":"cn","tag":"消息渠道","count":83},{"language":"default","tag":"API Reference","count":68},{"language":"default","tag":"API reference","count":64},{"language":"en","tag":"Analytics \u0026 Integrations","count":53},{"language":"es","tag":"Analítica \u0026 Integraciones","count":52},{"language":"fr","tag":"Analyses et intégrations","count":52},{"language":"ja","tag":"分析 \u0026 統合","count":52},{"language":"ko","tag":"분석 \u0026 통합","count":52},{"language":"pt-BR","tag":"Análises \u0026 Integrações","count":52},{"language":"tr","tag":"Analitik ve Entegrasyonlar","count":52},{"language":"cn","tag":"分析和集成","count":51},{"language":"cn","tag":"开发者指南","count":49},{"language":"es","tag":"Guías del desarrollador","count":49},{"language":"fr","tag":"Guides développeur","count":49},{"language":"ja","tag":"開発者ガイド","count":49},{"language":"ko","tag":"개발자 가이드","count":49},{"language":"tr","tag":"Geliştirici Kılavuzları","count":49},{"language":"pt-BR","tag":"Guia de desenvolvedor","count":48},{"language":"en","tag":"Developer Guides","count":47},{"language":"en","tag":"Integrations","count":37},{"language":"es","tag":"Integraciones","count":37},{"language":"fr","tag":"Intégrations","count":37},{"language":"ja","tag":"統合","count":37},{"language":"ko","tag":"통합","count":37},{"language":"pt-BR","tag":"Integrações","count":37},{"language":"tr","tag":"Entegrasyonlar","count":37},{"language":"cn","tag":"集成","count":36},{"language":"en","tag":"Tutorials","count":35},{"language":"cn","tag":"推送通知","count":31},{"language":"cn","tag":"OneSignal 作为目的地","count":31},{"language":"en","tag":"Push","count":31},{"language":"en","tag":"OneSignal as destination","count":31},{"language":"es","tag":"Push notificaciones","count":31},{"language":"es","tag":"OneSignal como destino","count":31},{"language":"fr","tag":"Push","count":31},{"language":"fr","tag":"OneSignal comme destination","count":31},{"language":"ja","tag":"プッシュ通知","count":31},{"language":"ja","tag":"OneSignal as 宛先","count":31},{"language":"ko","tag":"푸시","count":31},{"language":"ko","tag":"OneSignal을 데이터 목적지로 사용","count":31},{"language":"pt-BR","tag":"Push notificações","count":31},{"language":"pt-BR","tag":"OneSignal como destino","count":31},{"language":"tr","tag":"Anlık bildirimler","count":31},{"language":"tr","tag":"OneSignal hedef","count":31},{"language":"cn","tag":"移动SDK","count":26},{"language":"en","tag":"Mobile SDKs","count":26},{"language":"es","tag":"SDKs móviles","count":26},{"language":"fr","tag":"SDK mobiles","count":26},{"language":"ja","tag":"モバイルSDK","count":26},{"language":"ko","tag":"모바일 SDKs","count":26},{"language":"pt-BR","tag":"SDKs móveis","count":26},{"language":"tr","tag":"Mobil SDK'lar","count":26},{"language":"cn","tag":"教程","count":24},{"language":"es","tag":"Tutoriales","count":24},{"language":"fr","tag":"Tutoriels","count":24},{"language":"ja","tag":"チュートリアル","count":24},{"language":"ko","tag":"튜토리얼","count":24},{"language":"pt-BR","tag":"Tutoriais","count":24},{"language":"tr","tag":"Eğitimler","count":24},{"language":"cn","tag":"移动SDK设置","count":19},{"language":"en","tag":"Mobile SDK setup","count":19},{"language":"es","tag":"Configuración del SDK móvil","count":19},{"language":"fr","tag":"Configuration SDK mobile","count":19},{"language":"ja","tag":"モバイルSDKセットアップ","count":19},{"language":"ko","tag":"모바일 SDK 설정","count":19},{"language":"pt-BR","tag":"Configuração do SDK móvel","count":19},{"language":"tr","tag":"Mobil SDK kurulumu","count":19},{"language":"default","tag":"Messages","count":9},{"language":"default","tag":"Users","count":9},{"language":"default","tag":"Organization","count":9},{"language":"default","tag":"Journeys","count":8},{"language":"default","tag":"Deprecated","count":6},{"language":"default","tag":"Templates","count":6},{"language":"default","tag":"Subscriptions","count":6},{"language":"default","tag":"Segments","count":5}]},"assistantConfig":{"enableStarterQuestions":false,"deflection":{"enabled":true,"email":"support@onesignal.com","showHelpButton":true}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"docs/ko/voip-notifications","slug":"/docs/ko/voip-notifications","pageMetadata":{"title":"VoIP 푸시 알림","description":"OneSignal을 사용하여 PushKit 토큰 등록 및 VoIP 인증서로 iOS에서 VoIP 푸시 알림을 전송하고, 통화 스타일 동작을 위한 Android 대안을 알아보세요.","keywords":["VoIP push notifications","iOS VoIP","PushKit","VoIP token","VoIP Services Certificate","android call notification"],"href":"/docs/ko/voip-notifications"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"OneSignal을 사용하여 PushKit 토큰 등록 및 VoIP 인증서로 iOS에서 VoIP 푸시 알림을 전송하고, 통화 스타일 동작을 위한 Android 대안을 알아보세요.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,Card,CodeBlock,Columns,Frame,Heading,Info,Note,OptimizedImage,Step,Steps,Table,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Columns)_missingMdxReference(`Columns`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`VoIP 푸시 알림은 앱이 백그라운드 상태이거나 종료되어 있을 때도 수신 전화 알림을 받을 수 있게 해줍니다. Apple은 VoIP 푸시를 표준 푸시 알림과 다르게 처리합니다 — 별도의 인증서 유형, 별도의 토큰(PushKit을 통해), 그리고 다른 전달 규칙을 사용합니다.`}),`\n`,_jsxs(_components.p,{children:[`OneSignal은 VoIP 푸시 `,_jsx(_components.strong,{children:`전송`}),`을 지원하지만, OneSignal SDK는 VoIP 토큰 등록을 처리하지 `,_jsx(_components.strong,{children:`않습니다`}),`. 다음 작업은 직접 수행해야 합니다:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Apple PushKit을 사용하여 앱에서 VoIP 토큰 등록`}),`\n`,_jsx(_components.li,{children:`VoIP Services Certificate로 별도의 OneSignal 앱 생성`}),`\n`,_jsx(_components.li,{children:`OneSignal REST API를 통해 토큰 등록 및 푸시 전송`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`플랫폼-차이점`,children:`플랫폼 차이점`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`플랫폼`}),_jsx(_components.th,{children:`VoIP 푸시 지원 여부`}),_jsx(_components.th,{children:`작동 방식`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`iOS`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`Apple PushKit 및 VoIP APNs 인증서 사용`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Android`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`통화 스타일 동작을 시뮬레이션하기 위해 데이터 전용 푸시 사용`})]})]})]}),`\n`,_jsx(_components.p,{children:`크로스 플랫폼 통화 앱을 구축하는 경우 플랫폼별로 다른 접근 방식을 사용하게 됩니다.`}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`ios-voip-푸시-알림-전송`,children:`iOS: VoIP 푸시 알림 전송`}),`\n`,_jsx(_components.p,{children:`iOS에서 VoIP 알림은 Apple PushKit을 사용하며 표준 푸시 알림과 다른 특수 전달 규칙을 따릅니다. Apple이 VoIP 푸시를 다르게 처리하므로 OneSignal은 VoIP를 위한 별도의 앱 구성을 필요로 합니다.`}),`\n`,_jsxs(Warning,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`시작하기 전에`}),` — 가장 흔한 VoIP 설정 실수입니다:`]}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`VoIP용 별도 OneSignal 앱을 생성하지 않는 것.`}),` Apple은 VoIP에 다른 인증서 유형을 요구하므로 OneSignal은 VoIP 푸시를 전송하기 위한 전용 앱이 필요합니다. 기존 푸시 앱은 두 가지 모두에 사용할 수 없습니다.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`잘못된 인증서 업로드.`}),` **VoIP Services Certificate(.p12)**가 필요하며, 표준 APNs 푸시 인증서가 아닙니다. 잘못된 인증서를 사용하면 자동으로 전달 실패가 발생합니다.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`샌드박스에서 `,_jsx(_components.code,{children:`test_type`}),` 누락.`]}),` 개발 빌드로 테스트할 때는 토큰을 등록할 때 반드시 `,_jsx(_components.code,{children:`\"test_type\": 1`}),`을 포함해야 합니다. 이를 생략하면 API 호출은 성공하지만 푸시가 전달되지 않습니다.`]}),`\n`]})]}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`PushKit을 사용하여 VoIP 토큰 등록`,children:[_jsx(_components.p,{children:`Apple의 PushKit 프레임워크를 사용하여 VoIP 알림을 등록하고 VoIP 토큰을 받습니다.`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`앱에서 PushKit 구현`}),`\n`,_jsx(_components.li,{children:`Apple이 교체할 때 VoIP 토큰 저장 및 갱신`}),`\n`,_jsx(_components.li,{children:`Apple의 VoIP 정책을 면밀히 준수`}),`\n`]}),_jsxs(Accordion,{title:`예시: PushKit 델리게이트 구현`,id:`pushkit`,children:[_jsx(CodeBlock,{filename:``,numberOfLines:`14`,language:`swift`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`swift`,children:_jsxs(_components.code,{language:`swift`,numberOfLines:`14`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` PushKit`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` AppDelegate`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`NSObject`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`PKPushRegistryDelegate `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` func`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` registerForVoIPPushes`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`() {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` let`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` registry `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` PKPushRegistry`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`queue`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: .`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`main`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` registry.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`delegate`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` self`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` registry.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`desiredPushTypes`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`voIP`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` func`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` pushRegistry`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`_`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` registry`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: PKPushRegistry, `}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`didUpdatePushCredentials`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` credentials`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: PKPushCredentials, `}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` type`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: PKPushType) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` let`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` token `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` credentials.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`token`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`map`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`String`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`format`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"%02x\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`$0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) }.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`joined`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // 이 토큰을 OneSignal에 전달하세요 — 4단계 참조`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(Note,{children:`이것은 표준 Apple PushKit 코드입니다. OneSignal은 PushKit SDK를 제공하지 않습니다 — 토큰을 직접 등록하고 4단계에서 OneSignal에 전달합니다.`})]}),_jsx(_components.p,{children:`Apple 리소스:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://developer.apple.com/documentation/pushkit`,children:`PushKit 문서`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://developer.apple.com/documentation/pushkit/responding_to_voip_notifications_from_pushkit`,children:`VoIP 푸시에 응답`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://developer.apple.com/library/content/documentation/Performance/Conceptual/EnergyGuide-iOS/OptimizeVoIP.html`,children:`Apple의 VoIP 모범 사례`})}),`\n`]})]}),_jsxs(Step,{title:`VoIP용 별도 OneSignal 앱 생성`,children:[_jsxs(_components.p,{children:[`Apple VoIP 푸시는 표준 푸시 알림과 다른 인증서 유형을 필요로 합니다. 하나의 OneSignal 앱은 하나의 인증서 유형만 사용할 수 있으므로 `,_jsx(_components.strong,{children:`두 개의 별도 OneSignal 앱`}),`을 생성해야 합니다:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`기본 푸시 앱`}),`: 표준 푸시 알림에 APNs 인증서 사용`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`VoIP 푸시 앱`}),`: VoIP 전용 알림에 VoIP Services Certificate 사용`]}),`\n`]}),_jsxs(_components.p,{children:[`두 앱 모두 동일한 iOS 번들 ID를 사용해야 하며 동일한 네이티브 iOS 앱과 연결되어야 합니다. OneSignal SDK를 두 번 초기화할 필요는 `,_jsx(_components.strong,{children:`없습니다`}),` — VoIP 앱은 API를 통해 VoIP 푸시를 전송하는 서버 측에서만 사용됩니다.`]}),_jsxs(Note,{children:[`번들 ID(예: `,_jsx(_components.code,{children:`com.yourcompany.appname`}),`)는 Xcode에서 타겟의 `,_jsx(_components.strong,{children:`General`}),` 탭에서 확인할 수 있습니다.`]})]}),_jsxs(Step,{title:`VoIP Services Certificate 업로드`,children:[_jsx(_components.p,{children:`VoIP OneSignal 앱에서 **VoIP Services Certificate(.p12)**를 업로드합니다. 이것은 일반 알림에 사용하는 표준 APNs 푸시 인증서와 다른 인증서 유형입니다.`}),_jsx(_components.p,{children:`생성 방법:`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://developer.apple.com/account/resources/certificates/add`,children:`Apple Developer Portal`}),`로 이동합니다`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`VoIP Services Certificate`}),`를 선택합니다`]}),`\n`,_jsx(_components.li,{children:`안내에 따라 인증서를 생성하고 다운로드합니다`}),`\n`,_jsxs(_components.li,{children:[`Keychain Access에서 열고 `,_jsx(_components.code,{children:`.p12`}),` 파일로 내보냅니다`]}),`\n`,_jsxs(_components.li,{children:[`VoIP OneSignal 앱의 iOS 설정에 `,_jsx(_components.code,{children:`.p12`}),` 파일을 업로드합니다`]}),`\n`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`VoIP 앱에 표준 APNs 푸시 인증서를 업로드하지 `,_jsx(_components.strong,{children:`마세요`}),`. 잘못된 인증서 유형을 사용하면 API는 푸시 요청을 수락하지만 Apple이 이를 거부하여 알림이 전달되지 않습니다.`]})}),_jsx(Frame,{caption:`Keychain Access의 VoIP 인증서`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6101554-Screen_Shot_2020-04-26_at_1.07.52_PM.png?fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=5d19f1262fdf67d5185ed8d8b4743493`,alt:`macOS Keychain Access에 표시된 VoIP Services Certificate`,\"data-og-width\":`1868`,width:`1868`,\"data-og-height\":`1624`,height:`1624`,\"data-path\":`images/docs/6101554-Screen_Shot_2020-04-26_at_1.07.52_PM.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6101554-Screen_Shot_2020-04-26_at_1.07.52_PM.png?w=280\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=d57f41b5d7d08a261686c42154275181 280w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6101554-Screen_Shot_2020-04-26_at_1.07.52_PM.png?w=560\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=8dba61a8e30c0c831fdb26dda2c3dcdb 560w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6101554-Screen_Shot_2020-04-26_at_1.07.52_PM.png?w=840\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=d4d822861982c4795b5346fc84100991 840w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6101554-Screen_Shot_2020-04-26_at_1.07.52_PM.png?w=1100\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=be2dfa06d3400d8c94275769fcdc15b9 1100w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6101554-Screen_Shot_2020-04-26_at_1.07.52_PM.png?w=1650\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=fe3e85e100a8040fe7c8c1c4171358cc 1650w, https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/6101554-Screen_Shot_2020-04-26_at_1.07.52_PM.png?w=2500\u0026fit=max\u0026auto=format\u0026n=jFWn5xzleD8du3j6\u0026q=85\u0026s=7070b593a6f3809aca32feee7054c22d 2500w`})}),_jsx(Frame,{caption:`OneSignal 대시보드에 업로드된 VoIP 인증서`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/81a2fea-a2a2e71-Screenshot_2024-02-23_at_1.32.08_PM.png?fit=max\u0026auto=format\u0026n=0qspEXXeJ8zJbkJ-\u0026q=85\u0026s=6ee92a10fc3473c644880fa7517eb46b`,alt:`OneSignal 대시보드에 업로드된 VoIP Services Certificate`,\"data-og-width\":`466`,width:`466`,\"data-og-height\":`130`,height:`130`,\"data-path\":`images/docs/81a2fea-a2a2e71-Screenshot_2024-02-23_at_1.32.08_PM.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/81a2fea-a2a2e71-Screenshot_2024-02-23_at_1.32.08_PM.png?w=280\u0026fit=max\u0026auto=format\u0026n=0qspEXXeJ8zJbkJ-\u0026q=85\u0026s=95a3a2c83752c51d43c1716a35ea5fe0 280w, https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/81a2fea-a2a2e71-Screenshot_2024-02-23_at_1.32.08_PM.png?w=560\u0026fit=max\u0026auto=format\u0026n=0qspEXXeJ8zJbkJ-\u0026q=85\u0026s=bd44dde96a3d94780e6506beb6c7f4c0 560w, https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/81a2fea-a2a2e71-Screenshot_2024-02-23_at_1.32.08_PM.png?w=840\u0026fit=max\u0026auto=format\u0026n=0qspEXXeJ8zJbkJ-\u0026q=85\u0026s=6de341e128c37fee7dc4d1829068b574 840w, https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/81a2fea-a2a2e71-Screenshot_2024-02-23_at_1.32.08_PM.png?w=1100\u0026fit=max\u0026auto=format\u0026n=0qspEXXeJ8zJbkJ-\u0026q=85\u0026s=522fd6e38125b3223a941e37bc46811a 1100w, https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/81a2fea-a2a2e71-Screenshot_2024-02-23_at_1.32.08_PM.png?w=1650\u0026fit=max\u0026auto=format\u0026n=0qspEXXeJ8zJbkJ-\u0026q=85\u0026s=50555ec34cfc42ed15fb1babc9b78267 1650w, https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/81a2fea-a2a2e71-Screenshot_2024-02-23_at_1.32.08_PM.png?w=2500\u0026fit=max\u0026auto=format\u0026n=0qspEXXeJ8zJbkJ-\u0026q=85\u0026s=f492c4b3f1b74155ccb741eb94d9d6dc 2500w`})})]}),_jsxs(Step,{title:`OneSignal에 VoIP 토큰 등록`,children:[_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/reference/create-user`,children:`Create User`}),` API를 사용하여 VoIP OneSignal 앱에 VoIP 토큰을 등록합니다.`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`샌드박스/개발 빌드에는 `,_jsx(_components.code,{children:`\"test_type\": 1`}),`이 필요합니다.`]}),` 이 필드를 생략하면 API 호출은 성공하고 오류가 반환되지 않지만, Apple은 해당 토큰을 프로덕션으로 처리하여 전송된 모든 푸시를 자동으로 거부합니다.`]})}),_jsx(CodeBlock,{filename:``,numberOfLines:`16`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`16`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`curl --request POST \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --url https://api.onesignal.com/apps/YOUR_VOIP_APP_ID/users \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --header 'accept: application/json' \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --header 'content-type: application/json' \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --data '`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`{`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"subscriptions\": [`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"type\": \"iOSPush\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"token\": \"YOUR_VOIP_TOKEN\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"test_type\": 1`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`'`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsxs(Note,{children:[`유효한 VoIP 토큰은 64자의 소문자 16진수 문자열입니다(예: `,_jsx(_components.code,{children:`a1b2c3d4e5f6...`}),`). PushKit은 iOS 시뮬레이터에서 작동하지 않으므로 유효한 토큰을 얻으려면 실제 기기를 사용해야 합니다.`]}),_jsxs(_components.p,{children:[`나중에 토큰을 업데이트하려면 `,_jsx(_components.a,{href:`/reference/update-subscription`,children:`Update Subscription`}),` API를 사용하세요.`]})]}),_jsxs(Step,{title:`VoIP 알림 전송`,children:[_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/reference/create-message`,children:`Create Notification`}),` API를 다음 매개변수와 함께 사용합니다:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`\"apns_push_type_override\": \"voip\"`}),` — Apple에 이것이 VoIP 푸시임을 알립니다`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`app_id`}),` — VoIP 앱 ID`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`include_subscription_ids`}),` — 등록한 VoIP 구독 ID`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`contents`}),` 또는 `,_jsx(_components.code,{children:`content_available`}),` 중 하나가 필요합니다`]}),`\n`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`15`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`15`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`curl --include \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --request POST \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --header \"Content-Type: application/json; charset=utf-8\" \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --header \"Authorization: key YOUR_REST_API_KEY\" \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` --data-binary '{`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"app_id\": \"YOUR_VOIP_APP_ID\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"content_available\": true,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"data\": {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"your_custom_data\": \"your_custom_value\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"apns_push_type_override\": \"voip\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"include_subscription_ids\": [\"YOUR_VOIP_SUBSCRIPTION_ID\"]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`}' \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`https://api.onesignal.com/notifications`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})]}),_jsxs(Step,{title:`VoIP 설정 확인`,children:[_jsx(_components.p,{children:`다음 경우 iOS VoIP 통합이 올바르게 작동하는 것입니다:`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`VoIP 토큰이 `,_jsx(_components.strong,{children:`VoIP 앱`}),`에서 iOS 푸시 구독으로 표시됩니다`]}),`\n`,_jsxs(_components.li,{children:[`VoIP 푸시가 앱에서 `,_jsx(_components.a,{href:`https://developer.apple.com/documentation/pushkit/responding_to_voip_notifications_from_pushkit`,children:_jsx(_components.code,{children:`pushRegistry(_:didReceiveIncomingPushWith:for:completion:)`})}),`를 트리거합니다`]}),`\n`,_jsx(_components.li,{children:`앱이 종료되거나 백그라운드 상태일 때도 깨어납니다`}),`\n`]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`android-voip-스타일-동작-시뮬레이션`,children:`Android: VoIP 스타일 동작 시뮬레이션`}),`\n`,_jsx(_components.p,{children:`Android는 VoIP 푸시 알림을 지원하지 않습니다. Apple PushKit과 동등한 기능이 없습니다.`}),`\n`,_jsx(_components.p,{children:`대신 Android 통화 앱은 다음을 사용하여 VoIP 동작을 시뮬레이션합니다:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`데이터 전용 푸시 알림`}),`\n`,_jsx(_components.li,{children:`포그라운드 서비스`}),`\n`,_jsx(_components.li,{children:`맞춤형 통화 스타일 UI`}),`\n`]}),`\n`,_jsx(_components.p,{children:`OneSignal의 일반 Android 푸시 지원과 네이티브 Android API를 결합하여 이를 달성할 수 있습니다.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`권장 접근 방식:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`데이터 전용 알림 전송`}),`\n`,_jsxs(_components.li,{children:[`앱에서 다음과 같이 처리:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`포그라운드 서비스 시작`}),`\n`,_jsx(_components.li,{children:`통화 UI 액티비티 실행`}),`\n`,_jsx(_components.li,{children:`맞춤형 수신 통화 알림 표시`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`알림 렌더링을 가로채고 완전히 제어하려면 Android의 `,_jsx(_components.a,{href:`/docs/ko/service-extensions#notification-service-extension`,children:`Notification Service Extension`}),`을 사용하세요.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`유용한 리소스:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://developer.android.com/guide/topics/connectivity/telecom/selfManaged`,children:`Android 통화 앱 가이드`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://medium.com/@dcostalloyd90/show-incoming-voip-call-notification-and-open-activity-for-android-os-10-5aada2d4c1e4`,children:`수신 통화 UI 예제`})}),`\n`]}),`\n`,_jsxs(Info,{children:[`Android 설정은 `,_jsx(_components.strong,{children:`OneSignal 전용이 아닙니다`}),`. OneSignal은 푸시 페이로드만 전달하며 앱이 통화 동작을 처리합니다.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`자주-묻는-질문`,children:`자주 묻는 질문`}),`\n`,_jsx(Heading,{level:`3`,id:`확인된-배달이-voip에서-작동하나요`,children:`확인된 배달이 VoIP에서 작동하나요?`}),`\n`,_jsxs(_components.p,{children:[`아니요. `,_jsx(_components.a,{href:`/docs/ko/confirmed-delivery`,children:`확인된 배달`}),`은 VoIP 푸시에 대해 `,_jsx(_components.strong,{children:`추적되지 않습니다`}),`. 확인된 배달은 Notification Service Extension에 의존하는데, 이는 VoIP 알림에 대해 트리거되지 않습니다.`]}),`\n`,_jsx(_components.p,{children:`대신 네이티브 iOS PushKit 이벤트를 통해 수신을 추적하세요:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`swift`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`swift`,children:_jsxs(_components.code,{language:`swift`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`pushRegistry`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(_:`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`didReceiveIncomingPushWith:for:completion:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`이 이벤트는 기본 앱 타겟의 일부이며 별도의 확장 프로그램이 필요하지 않습니다. 자세한 내용은 `,_jsx(_components.a,{href:`https://developer.apple.com/documentation/pushkit/responding_to_voip_notifications_from_pushkit#3377587`,children:`Apple의 VoIP 문서`}),`를 참조하세요.`]}),`\n`,_jsx(Heading,{level:`3`,id:`onesignal-대시보드에서-voip-알림을-전송할-수-있나요`,children:`OneSignal 대시보드에서 VoIP 알림을 전송할 수 있나요?`}),`\n`,_jsxs(_components.p,{children:[`아니요. VoIP 알림은 `,_jsx(_components.code,{children:`\"apns_push_type_override\": \"voip\"`}),`와 함께 `,_jsx(_components.a,{href:`/reference/create-message`,children:`Create Notification`}),` API를 통해서만 전송해야 합니다. 대시보드는 이 매개변수를 지원하지 않습니다.`]}),`\n`,_jsx(Heading,{level:`3`,id:`voip-푸시가-자동으로-실패하는-이유는-무엇인가요`,children:`VoIP 푸시가 자동으로 실패하는 이유는 무엇인가요?`}),`\n`,_jsx(_components.p,{children:`VoIP 푸시는 OneSignal API에서 아무런 오류 없이 실패할 수 있습니다. 다음 체크리스트를 확인하세요:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`샌드박스/개발 빌드를 사용하고 있나요?`}),` Create User API를 통해 토큰을 등록할 때 반드시 `,_jsx(_components.code,{children:`\"test_type\": 1`}),`을 포함해야 합니다. 이를 생략하면 토큰이 프로덕션으로 등록되고, Apple이 푸시를 거부하여 자동으로 실패합니다.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`올바른 인증서를 업로드했나요?`}),` VoIP OneSignal 앱은 표준 APNs 푸시 인증서가 아닌 **VoIP Services Certificate(.p12)**를 사용해야 합니다. Keychain Access에서 두 인증서가 유사하게 보일 수 있으므로 인증서 이름이 “VoIP Services”로 시작하는지 확인하세요.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`올바른 OneSignal 앱으로 전송하고 있나요?`}),` 전송 요청의 `,_jsx(_components.code,{children:`app_id`}),`는 기본 푸시 앱이 아닌 `,_jsx(_components.strong,{children:`VoIP 앱`}),`이어야 합니다. `,_jsx(_components.code,{children:`REST API Key`}),`도 VoIP 앱에서 가져와야 합니다.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`VoIP 토큰이 유효한가요?`}),` 앱이 재설치되거나 기기가 복원될 때 토큰이 만료됩니다. 토큰이 64자의 소문자 16진수 문자열이고 최근에 등록되었는지 확인하세요.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`앱이 `,_jsx(_components.code,{children:`reportNewIncomingVoIPPushPayload`}),`를 호출하나요?`]}),` iOS 13부터 Apple은 VoIP 푸시를 수신했지만 CallKit에 통화를 보고하지 않는 앱을 `,_jsx(_components.strong,{children:`종료`}),`합니다. 이것은 Apple의 요구 사항이며 OneSignal의 제한이 아닙니다.`]}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`관련-페이지`,children:`관련 페이지`}),`\n`,_jsxs(Columns,{cols:2,children:[_jsx(Card,{title:`메시지 생성 API`,icon:`code`,href:`/reference/create-message`,children:_jsx(_components.p,{children:`REST API를 사용하여 프로그래밍 방식으로 푸시 알림을 전송합니다.`})}),_jsx(Card,{title:`확인된 배달`,icon:`circle-check`,href:`/docs/ko/confirmed-delivery`,children:_jsx(_components.p,{children:`지원되는 플랫폼에서 푸시 알림 전달 확인을 추적합니다.`})}),_jsx(Card,{title:`서비스 확장`,icon:`puzzle-piece`,href:`/docs/ko/service-extensions`,children:_jsx(_components.p,{children:`Notification Service Extension으로 알림 처리를 맞춤화합니다.`})}),_jsx(Card,{title:`사용자 생성 API`,icon:`user-plus`,href:`/reference/create-user`,children:_jsx(_components.p,{children:`OneSignal API로 사용자와 구독을 등록합니다.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"VoIP 푸시 알림","description":"OneSignal을 사용하여 PushKit 토큰 등록 및 VoIP 인증서로 iOS에서 VoIP 푸시 알림을 전송하고, 통화 스타일 동작을 위한 Android 대안을 알아보세요.","keywords":["VoIP push notifications","iOS VoIP","PushKit","VoIP token","VoIP Services Certificate","android call notification"],"href":"/docs/ko/voip-notifications"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"플랫폼 차이점","slug":"플랫폼-차이점","depth":3,"children":[]},{"title":"iOS: VoIP 푸시 알림 전송","slug":"ios-voip-푸시-알림-전송","depth":2,"children":[]},{"title":"Android: VoIP 스타일 동작 시뮬레이션","slug":"android-voip-스타일-동작-시뮬레이션","depth":2,"children":[]},{"title":"자주 묻는 질문","slug":"자주-묻는-질문","depth":2,"children":[{"title":"확인된 배달이 VoIP에서 작동하나요?","slug":"확인된-배달이-voip에서-작동하나요","depth":3,"children":[]},{"title":"OneSignal 대시보드에서 VoIP 알림을 전송할 수 있나요?","slug":"onesignal-대시보드에서-voip-알림을-전송할-수-있나요","depth":3,"children":[]},{"title":"VoIP 푸시가 자동으로 실패하는 이유는 무엇인가요?","slug":"voip-푸시가-자동으로-실패하는-이유는-무엇인가요","depth":3,"children":[]}]},{"title":"관련 페이지","slug":"관련-페이지","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/onesignal/e069c1b9f3157e14/hotjar-koala.js","/_mintlify/custom/onesignal/3e5d03885ab32f49/intercom.js","/_mintlify/custom/onesignal/dbb7af4794d1b586/munchkin-marketo.js"],"subdomain":"onesignal","siteName":"OneSignal Documentation","title":"VoIP 푸시 알림 - OneSignal Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/docs/en/voip-notifications","matchLevel":1},"cn":{"href":"/docs/cn/voip-notifications","matchLevel":1},"ko":{"href":"/docs/ko/voip-notifications","matchLevel":0},"ja":{"href":"/docs/ja/voip-notifications","matchLevel":1},"tr":{"href":"/docs/tr/voip-notifications","matchLevel":1},"pt-BR":{"href":"/docs/pt-BR/voip-notifications","matchLevel":1},"es":{"href":"/docs/es/voip-notifications","matchLevel":1},"fr":{"href":"/docs/fr/voip-notifications","matchLevel":1}}},"lastModified":"2026-11-12T18:23:42.312Z","originalFileLocation":"docs/ko/voip-notifications.mdx","locale":"ko"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"OneSignal을 사용하여 PushKit 토큰 등록 및 VoIP 인증서로 iOS에서 VoIP 푸시 알림을 전송하고, 통화 스타일 동작을 위한 Android 대안을 알아보세요.\">\u003cmeta data-mint-head name=\"application-name\" content=\"OneSignal Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"VoIP 푸시 알림 - OneSignal Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"OneSignal을 사용하여 PushKit 토큰 등록 및 VoIP 인증서로 iOS에서 VoIP 푸시 알림을 전송하고, 통화 스타일 동작을 위한 Android 대안을 알아보세요.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"OneSignal Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://documentation.onesignal.com/docs/ko/voip-notifications\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://onesignal.mintlify.site/_mintlify/api/og/v2?division=%EB%AA%A8%EB%B0%94%EC%9D%BC+%ED%91%B8%EC%8B%9C\u0026amp;title=VoIP+%ED%91%B8%EC%8B%9C+%EC%95%8C%EB%A6%BC\u0026amp;description=OneSignal%EC%9D%84+%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC+PushKit+%ED%86%A0%ED%81%B0+%EB%93%B1%EB%A1%9D+%EB%B0%8F+VoIP+%EC%9D%B8%EC%A6%9D%EC%84%9C%EB%A1%9C+iOS%EC%97%90%EC%84%9C+VoIP+%ED%91%B8%EC%8B%9C+%EC%95%8C%EB%A6%BC%EC%9D%84+%EC%A0%84%EC%86%A1%ED%95%98%EA%B3%A0%2C+%ED%86%B5%ED%99%94+%EC%8A%A4%ED%83%80%EC%9D%BC+%EB%8F%99%EC%9E%91%EC%9D%84+%EC%9C%84%ED%95%9C+Android+%EB%8C%80%EC%95%88%EC%9D%84+%EC%95%8C%EC%95%84%EB%B3%B4%EC%84%B8%EC%9A%94.\u0026amp;theme=12e705baa88dc8cc6d7a9877\u0026amp;signature=3100f93aebbbcd90aeae5497b3c123888d10964e4c184d241e16e89d0fd89f24\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"VoIP 푸시 알림 - OneSignal Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"OneSignal을 사용하여 PushKit 토큰 등록 및 VoIP 인증서로 iOS에서 VoIP 푸시 알림을 전송하고, 통화 스타일 동작을 위한 Android 대안을 알아보세요.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://onesignal.mintlify.site/_mintlify/api/og/v2?division=%EB%AA%A8%EB%B0%94%EC%9D%BC+%ED%91%B8%EC%8B%9C\u0026amp;title=VoIP+%ED%91%B8%EC%8B%9C+%EC%95%8C%EB%A6%BC\u0026amp;description=OneSignal%EC%9D%84+%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC+PushKit+%ED%86%A0%ED%81%B0+%EB%93%B1%EB%A1%9D+%EB%B0%8F+VoIP+%EC%9D%B8%EC%A6%9D%EC%84%9C%EB%A1%9C+iOS%EC%97%90%EC%84%9C+VoIP+%ED%91%B8%EC%8B%9C+%EC%95%8C%EB%A6%BC%EC%9D%84+%EC%A0%84%EC%86%A1%ED%95%98%EA%B3%A0%2C+%ED%86%B5%ED%99%94+%EC%8A%A4%ED%83%80%EC%9D%BC+%EB%8F%99%EC%9E%91%EC%9D%84+%EC%9C%84%ED%95%9C+Android+%EB%8C%80%EC%95%88%EC%9D%84+%EC%95%8C%EC%95%84%EB%B3%B4%EC%84%B8%EC%9A%94.\u0026amp;theme=12e705baa88dc8cc6d7a9877\u0026amp;signature=3100f93aebbbcd90aeae5497b3c123888d10964e4c184d241e16e89d0fd89f24\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"OneSignal Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3A3DB3\">\u003clink data-mint-head rel=\"canonical\" href=\"https://documentation.onesignal.com/docs/ko/voip-notifications\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/ko/voip-notifications.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ko\" href=\"https://documentation.onesignal.com/docs/ko/voip-notifications\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://documentation.onesignal.com/docs/en/voip-notifications\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"zh\" href=\"https://documentation.onesignal.com/docs/cn/voip-notifications\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ja\" href=\"https://documentation.onesignal.com/docs/ja/voip-notifications\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"tr\" href=\"https://documentation.onesignal.com/docs/tr/voip-notifications\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"pt-BR\" href=\"https://documentation.onesignal.com/docs/pt-BR/voip-notifications\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://documentation.onesignal.com/docs/es/voip-notifications\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"fr\" href=\"https://documentation.onesignal.com/docs/fr/voip-notifications\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://documentation.onesignal.com/docs/en/voip-notifications\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://documentation.onesignal.com/#organization\",\"name\":\"OneSignal Documentation\",\"url\":\"https://documentation.onesignal.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/onesignal/yJcueeDCO7UpHnnY/logo/OneSignal-Logo.svg?fit=max\u0026auto=format\u0026n=yJcueeDCO7UpHnnY\u0026q=85\u0026s=1fcfb6fef6d820fd9d99c74850711107\"}},{\"@type\":\"WebSite\",\"@id\":\"https://documentation.onesignal.com#website\",\"name\":\"OneSignal Documentation\",\"url\":\"https://documentation.onesignal.com\",\"publisher\":{\"@id\":\"https://documentation.onesignal.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://documentation.onesignal.com/docs/ko/voip-notifications#webpage\",\"url\":\"https://documentation.onesignal.com/docs/ko/voip-notifications\",\"name\":\"VoIP 푸시 알림\",\"description\":\"OneSignal을 사용하여 PushKit 토큰 등록 및 VoIP 인증서로 iOS에서 VoIP 푸시 알림을 전송하고, 통화 스타일 동작을 위한 Android 대안을 알아보세요.\",\"dateModified\":\"2026-11-12T18:23:42.312Z\",\"isPartOf\":{\"@id\":\"https://documentation.onesignal.com#website\"},\"breadcrumb\":{\"@id\":\"https://documentation.onesignal.com/docs/ko/voip-notifications#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://documentation.onesignal.com/docs/ko/voip-notifications#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"메시지 채널\",\"item\":\"https://documentation.onesignal.com/docs/ko/channel-setup\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"푸시\",\"item\":\"https://documentation.onesignal.com/docs/ko/push\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"모바일 푸시\",\"item\":\"https://documentation.onesignal.com/docs/ko/mobile-push-setup\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"VoIP 푸시 알림\",\"item\":\"https://documentation.onesignal.com/docs/ko/voip-notifications\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://documentation.onesignal.com/docs/ko/voip-notifications#article\",\"headline\":\"VoIP 푸시 알림\",\"name\":\"VoIP 푸시 알림\",\"description\":\"OneSignal을 사용하여 PushKit 토큰 등록 및 VoIP 인증서로 iOS에서 VoIP 푸시 알림을 전송하고, 통화 스타일 동작을 위한 Android 대안을 알아보세요.\",\"url\":\"https://documentation.onesignal.com/docs/ko/voip-notifications\",\"mainEntityOfPage\":{\"@id\":\"https://documentation.onesignal.com/docs/ko/voip-notifications#webpage\"},\"dateModified\":\"2026-11-12T18:23:42.312Z\",\"keywords\":\"VoIP push notifications, iOS VoIP, PushKit, VoIP token, VoIP Services Certificate, android call notification\",\"publisher\":{\"@id\":\"https://documentation.onesignal.com/#organization\"},\"isPartOf\":{\"@id\":\"https://documentation.onesignal.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"OneSignal Documentation\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"OneSignal Documentation\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/docs/ko/voip-notifications.md","siteName":"OneSignal Documentation","nav":{"global":null,"languages":[{"language":"en","pages":[{"title":"en","href":"/docs/en/voip-notifications"}]},{"language":"cn","pages":[{"title":"cn","href":"/docs/cn/voip-notifications"}]},{"language":"ko","tabs":[{"tab":"홈","pages":[{"title":"홈","href":"/docs/ko/home"}]},{"tab":"사용자 가이드","groups":[{"group":"시작하기 \u0026 설정","pages":[{"title":"OneSignal 시작하기","href":"/docs/ko/quickstart-guide"},{"group":"OneSignal 대시보드","pages":[{"title":"앱, 조직 및 계정","href":"/docs/ko/apps-organizations"},{"title":"팀 멤버","href":"/docs/ko/manage-team-members"},{"title":"키 및 ID","href":"/docs/ko/keys-and-ids"},{"title":"감사 로그","href":"/docs/ko/audit-logs"},{"title":"사용량 및 청구","href":"/docs/ko/billing-faq"},{"title":"비활성화된 앱 및 조직","href":"/docs/ko/disabled-apps"}]},{"title":"OneSignal로 마이그레이션","href":"/docs/ko/migrating-to-onesignal"}]},{"group":"메시지 채널","pages":[{"title":"채널 설정","href":"/docs/ko/channel-setup"},{"group":"푸시","pages":[{"title":"푸시 개요","href":"/docs/ko/push"},{"group":"모바일 푸시","pages":[{"title":"모바일 푸시 설정","href":"/docs/ko/mobile-push-setup"},{"title":"푸시 권한 요청","href":"/docs/ko/prompt-for-push-permissions"},{"title":"iOS 임시 푸시 알림","href":"/docs/ko/ios-provisional-push-notifications"},{"title":"Android 알림 카테고리","href":"/docs/ko/android-notification-categories"},{"title":"데이터 및 백그라운드 알림","description":"iOS 및 Android에서 가시적인 메시지 없이 데이터를 동기화하거나 백그라운드 작업을 트리거하는 사일런트 푸시 알림을 전송합니다.","href":"/docs/ko/data-notifications"},{"title":"VoIP 푸시 알림","href":"/docs/ko/voip-notifications"}]},{"group":"웹 푸시","pages":[{"title":"웹 푸시 설정","description":"OneSignal로 웹 푸시 알림을 설정하여 Chrome, Firefox, Safari, Edge에서 사용자를 재참여시키세요. 사이트, 프롬프트, 서비스 워커를 구성하세요.","href":"/docs/ko/web-push-setup"},{"title":"Web 권한 프롬프트","href":"/docs/ko/permission-requests"},{"title":"웹 푸시 FAQ","href":"/docs/ko/web-push-setup-faq"},{"title":"웹 푸시 브라우저 동작","href":"/docs/ko/browser-behavior-and-unsubscribes"},{"title":"Shopify 웹 푸시 통합","href":"/docs/ko/shopify"},{"title":"웹 푸시를 위한 OneSignal WordPress 플러그인 설정","href":"/docs/ko/wordpress"},{"title":"WordPress 문제 해결","href":"/docs/ko/troubleshooting-wordpress-web-push"}]},{"group":"푸시 기능","pages":[{"title":"알림 아이콘","href":"/docs/ko/notification-icons"},{"title":"알림 이미지 및 리치 미디어","href":"/docs/ko/rich-media"},{"title":"알림 사운드","href":"/docs/ko/notification-sounds"},{"title":"알림 배지","href":"/docs/ko/badges"},{"title":"푸시 알림용 액션 버튼","href":"/docs/ko/action-buttons"},{"title":"푸시 빈도 제한","href":"/docs/ko/frequency-capping"},{"title":"푸시 제한","href":"/docs/ko/throttling"},{"title":"iOS: 집중 모드 및 중단 수준","href":"/docs/ko/ios-focus-modes-and-interruption-levels"},{"title":"iOS: 관련성 점수","href":"/docs/ko/ios-relevance-score"}]},{"group":"푸시 분석 \u0026 문제 해결","pages":[{"title":"푸시 메시지 리포트","href":"/docs/ko/push-notification-message-reports"},{"title":"확인된 전달","href":"/docs/ko/confirmed-delivery"},{"title":"알림 CTR","href":"/docs/ko/notification-ctr"},{"title":"모바일 푸시: 알림이 표시되지 않거나 지연됨","href":"/docs/ko/notifications-show-successful-but-are-not-being-shown"},{"title":"Web push: 알림이 표시되지 않음","href":"/docs/ko/notifications-not-shown-web-push"},{"title":"알림 이미지가 표시되지 않음","href":"/docs/ko/notification-images-not-showing"},{"title":"중복 알림","href":"/docs/ko/duplicated-notifications"},{"title":"FCM 만료 토큰 FAQ","href":"/docs/ko/fcm-expired-token-faq"}]}]},{"group":"인앱 메시지","pages":[{"title":"인앱 개요","href":"/docs/ko/in-app-messages-setup"},{"title":"인앱 트리거","href":"/docs/ko/iam-triggers"},{"title":"인앱 클릭 작업","href":"/docs/ko/iam-click-actions"},{"group":"인앱 디자인","pages":[{"title":"드래그 앤 드롭으로 인앱 메시지 디자인하기","href":"/docs/ko/design-your-in-app-message"},{"title":"HTML로 인앱 메시지 디자인하기","href":"/docs/ko/design-your-in-app-message-with-html"},{"title":"인앱 메시지 템플릿 및 퀵스타트","href":"/docs/ko/in-app-html-templates"},{"title":"인앱 메시지 JavaScript API 레퍼런스","href":"/docs/ko/in-app-message-api"}]},{"title":"인앱 메시지 보고서","href":"/docs/ko/in-app-message-reports"},{"title":"인앱 문제 해결","href":"/docs/ko/in-app-message-troubleshooting"}]},{"group":"이메일","pages":[{"title":"이메일 개요","href":"/docs/ko/email-messaging"},{"group":"Email setup","pages":[{"title":"이메일 설정","href":"/docs/ko/email-setup"},{"title":"이메일 DNS 구성","href":"/docs/ko/email-dns-configuration"},{"title":"발신자","href":"/docs/ko/senders"},{"title":"트랜잭션 이메일","href":"/docs/ko/setup-transactional-emails"},{"title":"사용자 지정 이메일 수신 거부 페이지 만들기","href":"/docs/ko/create-custom-unsubscribe-page"}]},{"group":"이메일 전달 가능성","pages":[{"title":"이메일 메시지 보고서","href":"/docs/ko/email-message-reports"},{"title":"이메일 전달 가능성","href":"/docs/ko/email-deliverability"},{"title":"이메일 평판 모범 사례","href":"/docs/ko/email-reputation-best-practices"},{"title":"이메일 주소 유효성 검사","href":"/docs/ko/email-address-validation"},{"title":"이메일 준비 가이드","href":"/docs/ko/email-warm-up"},{"title":"Google Postmaster Tools","href":"/docs/ko/google-postmaster-tools"},{"title":"차단 목록","href":"/docs/ko/suppressions"},{"title":"이메일 문제 해결","href":"/docs/ko/email-troubleshooting"}]},{"group":"이메일 메시지","pages":[{"title":"드래그 앤 드롭으로 이메일 디자인하기","href":"/docs/ko/design-emails-with-drag-and-drop"},{"title":"HTML로 이메일 디자인하기","href":"/docs/ko/design-emails-with-html"},{"title":"이메일 구독 취소 링크 및 헤더","href":"/docs/ko/unsubscribe-links-email-subscriptions"},{"title":"이메일 템플릿 전달","href":"/docs/ko/email-template-forwarding"}]}]},{"group":"SMS 및 RCS","pages":[{"title":"SMS, MMS, RCS 개요","href":"/docs/ko/sms-messaging"},{"title":"Rich Communication Services (RCS)","href":"/docs/ko/rcs-messaging"},{"group":"SMS 설정","pages":[{"title":"SMS 설정","href":"/docs/ko/sms-setup"},{"title":"발신자 리소스 신청 및 국가별 요구사항","sidebarTitle":"발신자 리소스 신청","href":"/docs/ko/sms-registration-requirements"},{"title":"SMS 옵트인 및 수집","href":"/docs/ko/sms-opt-in-and-collection"},{"title":"SMS 동의 키워드 관리","href":"/docs/ko/sms-consent-keyword-management"},{"title":"SMS 키워드","href":"/docs/ko/keywords"}]},{"group":"SMS 메시지","pages":[{"title":"SMS 메시지 리포트","href":"/docs/ko/sms-message-reports"},{"title":"일회용 비밀번호(OTP)","sidebarTitle":"일회용 비밀번호","href":"/docs/ko/sms-verify"}]}]},{"group":"실시간 현황","pages":[{"title":"Live Activities","href":"/docs/ko/live-activities"},{"title":"Live Activities 분석","href":"/docs/ko/live-activities-analytics"}]},{"group":"기능","pages":[{"title":"A/B 테스팅","href":"/docs/ko/ab-testing"},{"title":"다국어 메시징","href":"/docs/ko/multi-language-messaging"},{"group":"메시지 개인화","pages":[{"title":"개인화","href":"/docs/ko/message-personalization"},{"title":"Liquid 구문 사용","href":"/docs/ko/using-liquid-syntax"},{"title":"데이터 피드","href":"/docs/ko/data-feeds"},{"title":"Custom Events로 개인화하기","href":"/docs/ko/personalization-custom-event"},{"title":"속성을 사용한 개인화","href":"/docs/ko/personalization-properties-and-tags"},{"title":"API custom_data로 메시지 개인화하기","href":"/docs/ko/personalization-api-custom-data"},{"title":"CSV를 사용한 동적 콘텐츠","href":"/docs/ko/dynamic-content"}]},{"group":"URL, 링크, 딥 링크","pages":[{"title":"URL, 링크 및 딥 링크","href":"/docs/ko/links"},{"title":"딥 링킹","href":"/docs/ko/deep-linking"},{"title":"이메일 구독 취소 링크 및 헤더","href":"/docs/ko/unsubscribe-links-email-subscriptions"}]},{"title":"리타겟팅 메시지","href":"/docs/ko/retargeting"},{"title":"템플릿","href":"/docs/ko/templates"},{"title":"레이블","href":"/docs/ko/labels"}]}]},{"group":"Journeys","pages":[{"title":"Journey 개요","href":"/docs/ko/journeys-overview"},{"group":"Journey 기능","pages":[{"title":"Journey 설정","href":"/docs/ko/journeys-settings"},{"title":"Journey 메시지","href":"/docs/ko/journeys-messages"},{"title":"Journey 액션","href":"/docs/ko/journeys-actions"},{"title":"Journey Webhook","href":"/docs/ko/journeys-webhook"},{"title":"Journey Webhook을 통해 WhatsApp 메시지 보내기","href":"/docs/ko/sending-whatsapp-messages-via-journey-webhooks"},{"title":"Journeys 관리","href":"/docs/ko/managing-journeys"},{"title":"Journey 분석","href":"/docs/ko/journeys-analytics"}]},{"title":"Journey 예시","href":"/docs/ko/journeys-examples"}]},{"group":"오디언스 \u0026 사용자 지정 이벤트","pages":[{"title":"세그먼트","href":"/docs/ko/segmentation"},{"group":"Users \u0026 Subscriptions","pages":[{"title":"사용자","href":"/docs/ko/users"},{"title":"구독","href":"/docs/ko/subscriptions"},{"title":"별칭","href":"/docs/ko/aliases"},{"title":"테스트 사용자","href":"/docs/ko/test-users"},{"title":"사용자 삭제","href":"/docs/ko/delete-users"}]},{"group":"사용자 지정 이벤트","pages":[{"title":"사용자 지정 이벤트","href":"/docs/ko/custom-events"},{"title":"사용자 지정 이벤트 저장 및 보존","href":"/docs/ko/custom-event-storage"}]},{"group":"태그","pages":[{"title":"태그","href":"/docs/ko/add-user-data-tags"},{"title":"태그: 시간 연산자","href":"/docs/ko/time-operators"}]},{"title":"가져오기","href":"/docs/ko/import"}]},{"group":"분석 \u0026 통합","pages":[{"group":"분석","pages":[{"title":"분석 개요","href":"/docs/ko/analytics-overview"},{"title":"목표","sidebarTitle":"목표","href":"/docs/ko/goals"},{"title":"템플릿 분석","href":"/docs/ko/template-analytics"},{"title":"데이터 내보내기","href":"/docs/ko/exporting-data"},{"title":"사용자 지정 Outcomes","href":"/docs/ko/custom-outcomes"},{"title":"전환 지표","href":"/docs/ko/conversion-metrics"},{"title":"참여 트렌드","href":"/docs/ko/engagement-analytics"},{"title":"구독 트렌드","href":"/docs/ko/subscription-trends"},{"group":"리텐션 지표","pages":[{"title":"리텐션 지표","href":"/docs/ko/retention-metrics"},{"title":"리텐션 곡선 해석","href":"/docs/ko/interpreting-retention-curves"}]},{"title":"지표 용어집","href":"/docs/ko/analytics-metrics-glossary"}]},{"group":"이벤트 스트림","pages":[{"title":"이벤트 스트림","href":"/docs/ko/event-streams"},{"title":"이벤트 스트림 데이터 참조","sidebarTitle":"이벤트 스트림 데이터","href":"/docs/ko/event-streams-data"},{"title":"인앱 메시지 이벤트 스트림","href":"/docs/ko/iam-event-streams"},{"title":"Event Streams와 Google Sheets 통합","href":"/docs/ko/google-sheets-integration-with-event-streams"}]},{"group":"통합","pages":[{"title":"통합 개요","href":"/docs/ko/integrations"},{"title":"데이터 웨어하우스, DMP 및 CRM 통합","href":"/docs/ko/database-dmp-crm-integration"},{"group":"OneSignal을 데이터 소스로 사용","pages":[{"title":"Amplitude","href":"/docs/ko/amplitude"},{"title":"Databricks","href":"/docs/ko/databricks"},{"title":"Google BigQuery","href":"/docs/ko/bigquery"},{"title":"Mixpanel","href":"/docs/ko/mixpanel"},{"title":"Snowflake","href":"/docs/ko/snowflake"},{"title":"Segment (Twilio)","href":"/docs/ko/segment-onesignal-integration"}]},{"group":"OneSignal을 데이터 목적지로 사용","pages":[{"title":"Adobe Audience Manager","href":"/docs/ko/adobe-audience-manager"},{"title":"AlloyDB","href":"/docs/ko/alloydb"},{"title":"Amazon Athena","href":"/docs/ko/amazon-athena"},{"title":"Amazon S3","href":"/docs/ko/s3"},{"title":"Amplitude","href":"/docs/ko/amplitude"},{"title":"Apache Kafka","href":"/docs/ko/kafka"},{"title":"Amazon Redshift","href":"/docs/ko/amazon-redshift"},{"title":"Azure Synapse","href":"/docs/ko/azure-synapse"},{"title":"ClickHouse","href":"/docs/ko/clickhouse"},{"title":"Confluent Cloud","href":"/docs/ko/confluent-cloud"},{"title":"Databricks","href":"/docs/ko/databricks"},{"title":"Elasticsearch","href":"/docs/ko/elasticsearch"},{"title":"Google BigQuery","href":"/docs/ko/bigquery"},{"title":"Google Cloud SQL","href":"/docs/ko/google-cloud-sql"},{"title":"Google Sheets","href":"/docs/ko/google-sheets"},{"title":"Greenplum","href":"/docs/ko/greenplum"},{"title":"HubSpot","href":"/docs/ko/hubspot"},{"title":"Materialize","href":"/docs/ko/materialize"},{"title":"Microsoft Fabric","href":"/docs/ko/microsoft-fabric"},{"title":"Mixpanel","href":"/docs/ko/mixpanel"},{"title":"MotherDuck","href":"/docs/ko/motherduck"},{"title":"MySQL","href":"/docs/ko/mysql"},{"title":"PostgreSQL","href":"/docs/ko/postgresql"},{"title":"Pub/Sub","href":"/docs/ko/google-pubsub"},{"title":"SingleStore","href":"/docs/ko/singlestore"},{"title":"Snowflake","href":"/docs/ko/snowflake"},{"title":"SQL Server","href":"/docs/ko/sql-server"},{"title":"Starburst Enterprise","href":"/docs/ko/starburst-enterprise"},{"title":"Starburst Galaxy","href":"/docs/ko/starburst-galaxy"},{"title":"Trino","href":"/docs/ko/trino"},{"title":"Segment (Twilio)","href":"/docs/ko/segment-onesignal-integration"}]},{"group":"소비자 추적","pages":[{"title":"RevenueCat","href":"/docs/ko/revenuecat"},{"title":"Adjust","href":"/docs/ko/adjust"},{"title":"BlueConic","href":"/docs/ko/blueconic"}]},{"title":"OneSignal과 통합 구축: 파트너 가이드","href":"/docs/ko/building-an-integration-with-onesignal-partner-guide"}]}]},{"group":"개인 정보 보호 \u0026 보안","pages":[{"group":"보안 자격 증명","pages":[{"title":"SOC 2 Type II","href":"/docs/ko/soc-2-type-ii"},{"title":"ISO 27001","href":"/docs/ko/iso27001"},{"title":"HIPAA","href":"/docs/ko/hipaa"}]},{"group":"데이터 개인 정보 보호 \u0026 규정 준수","pages":[{"title":"GDPR 및 개인 권리","href":"/docs/ko/gdpr-compliance"},{"title":"EU-US 데이터 개인 정보 보호 프레임워크","href":"/docs/ko/eu-us-data-privacy-framework"},{"title":"이메일 규정 준수","href":"/docs/ko/email-compliance"},{"title":"SMS 규제 준수","href":"/docs/ko/sms-regulatory-compliance"},{"title":"Apple 앱 개인정보 보호 요구 사항","href":"/docs/ko/apple-app-privacy-requirements"},{"title":"Google Play 데이터 보안 요구 사항","href":"/docs/ko/google-play-data-safety-requirements"},{"title":"데이터 수집 및 보안 FAQ","href":"/docs/ko/data-questions"},{"title":"OneSignal SDK가 수집하는 데이터","href":"/docs/ko/data-collected-by-the-onesignal-sdk"},{"title":"개인 데이터 처리","href":"/docs/ko/handling-personal-data"}]},{"group":"인증 및 보안","pages":[{"title":"2단계 인증","href":"/docs/ko/2-step-authentication"},{"title":"Single Sign-On (SSO)","href":"/docs/ko/sso"}]}]}]},{"tab":"개발자 가이드","pages":[{"title":"개발자 가이드","href":"/docs/ko/developers"}]},{"tab":"튜토리얼","pages":[{"title":"튜토리얼","href":"/docs/ko/tutorials"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/reference/rest-api-overview"}]},{"tab":"Release Notes","pages":[{"title":"Release Notes","href":"/release-notes/changelog"}]}],"global":{"anchors":[{"anchor":"Blog","icon":"newspaper","href":"https://onesignal.com/blog"},{"anchor":"GitHub","icon":"github","href":"https://github.com/OneSignal"},{"anchor":"YouTube","icon":"youtube","href":"https://www.youtube.com/@onesignalofficial/playlists"}]}},{"language":"ja","pages":[{"title":"ja","href":"/docs/ja/voip-notifications"}]},{"language":"tr","pages":[{"title":"tr","href":"/docs/tr/voip-notifications"}]},{"language":"pt-BR","pages":[{"title":"pt-BR","href":"/docs/pt-BR/voip-notifications"}]},{"language":"es","pages":[{"title":"es","href":"/docs/es/voip-notifications"}]},{"language":"fr","pages":[{"title":"fr","href":"/docs/fr/voip-notifications"}]}]},"basePath":"","title":"VoIP 푸시 알림 - OneSignal Documentation","buildId":"dpl_41S5Z2jG9QnfDRwN1KZrLdBwj7DM","deploymentId":"dpl_41S5Z2jG9QnfDRwN1KZrLdBwj7DM","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-rZ_6yn08.js","DynamicMarkdown-D3RQ-fEj.js","zoom-image-lightbox-CMHgNu49.js","lightbox-handle-r17bVUz3.js"]}