{"id":16853180,"url":"https://github.com/devxoul/daumpostcode","last_synced_at":"2025-07-18T22:34:47.813Z","repository":{"id":43302713,"uuid":"394863035","full_name":"devxoul/daumpostcode","owner":"devxoul","description":"다음 우편번호 서비스를 별도의 패키지 설치 없이도 네이티브 앱에서 쉽게 사용할 수 있습니다.","archived":false,"fork":false,"pushed_at":"2021-08-11T09:06:10.000Z","size":14,"stargazers_count":16,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-18T10:21:18.113Z","etag":null,"topics":["daum-postcode","postcode"],"latest_commit_sha":null,"homepage":"https://postcode.pocketlesson.io","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devxoul.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-08-11T04:34:51.000Z","updated_at":"2024-06-11T05:38:36.000Z","dependencies_parsed_at":"2022-09-03T00:01:12.977Z","dependency_job_id":null,"html_url":"https://github.com/devxoul/daumpostcode","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/devxoul/daumpostcode","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devxoul%2Fdaumpostcode","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devxoul%2Fdaumpostcode/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devxoul%2Fdaumpostcode/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devxoul%2Fdaumpostcode/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devxoul","download_url":"https://codeload.github.com/devxoul/daumpostcode/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devxoul%2Fdaumpostcode/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265846885,"owners_count":23838160,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["daum-postcode","postcode"],"created_at":"2024-10-13T13:50:02.416Z","updated_at":"2025-07-18T22:34:47.784Z","avatar_url":"https://github.com/devxoul.png","language":"HTML","readme":"# Daum Postcode\n\n[다음 우편번호 서비스](https://postcode.map.daum.net/guide)를 별도의 패키지 설치 없이도 네이티브 앱에서 쉽게 사용할 수 있습니다.\n\n## 사용 방법\n\n1. 웹뷰를 사용해서 https://postcode.pocketlesson.io URL을 로드합니다.\n2. 로드된 웹뷰에서 주소를 선택하면 `postcode://` URL scheme과 `webkit.messageHandlers.postcode` 핸들러를 통해 메시지가 전달됩니다.\n\n## API\n\n### Query Parameters\n\n| 이름 | 설명 | 예시 |\n|---|---|---|\n| query | 검색어 (Optional) | `역삼로 180` |\n\n### Callback Data\n\n콜백은 두 가지 방식으로 제공됩니다.\n\n1. URL Scheme\n    `postcode://complete?\u003ckey\u003e=\u003cvalue\u003e\u0026...` 형태로 제공됩니다.\n2. Message Handler\n    `{key: value, ...}` 형태로 제공됩니다.\n\n자세한 데이터는 [다음 우편번호 서비스 문서](https://postcode.map.daum.net/guide#attributes)를 참고해 주세요.\n\n## 사용 예시\n\n### iOS\n\n#### URL Scheme\n\n```swift\nlet webView = WKWebView()\nwebView.navigationDelegate = self\n\nlet url = URL(string: \"https://postcode.pocketlesson.io\")!\nwebView.load(URLRequest(url: url))\n\nfunc webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -\u003e Void) {\n  switch navigationAction.request.url?.scheme {\n  case \"postcode\":\n    if let urlString = navigationAction.request.url?.absoluteString {\n      let components = URLComponents(string: urlString)\n      let address = components?.queryItems?.first { $0.name == \"address\" }?.value\n      let zonecode = components?.queryItems?.first { $0.name == \"zonecode\" }?.value\n      print(address) // e.g. 서울 강남구 역삼로 180\n      print(zonecode) // e.g. 06248\n    }\n    decisionHandler(.cancel)\n\n  default:\n    decisionHandler(.allow)\n  }\n}\n```\n\n#### Message Handler\n\n```swift\nlet webView = WKWebView()\nwebView.configuration.userContentController.add(PostcodeHandler(), name: \"postcode\")\n\nlet url = URL(string: \"https://postcode.pocketlesson.io\")!\nwebView.load(URLRequest(url: url))\n\nclass PostcodeHandler: NSObject, WKScriptMessageHandler {\n  func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {\n    guard let data = message.body as? [String: Any] else { return }\n    let address = data[\"address\"] as? String // e.g. 서울 강남구 역삼로 180\n    let zoneCode = data[\"zonecode\"] as? String // e.g. 06248\n  }\n}\n```\n\n### React Native\n\n#### URL Scheme\n\n```tsx\nconst parseQueryParams = () =\u003e {\n  const search = path.split('?')[1]\n  if (!search) {\n    return {}\n  }\n\n  let params: Record\u003cstring, string\u003e = {}\n\n  const items = search.split('\u0026')\n  items.forEach((item) =\u003e {\n    const [key, value] = item.split('=')\n    params[key] = decodeURIComponent(value)\n  })\n  return params\n}\n\nconst PostcodeSearchScreen = () =\u003e (\n  \u003cWebView\n    originWhitelist={['https://*', 'http://*', 'postcode://*']}\n    source={{ uri: 'https://postcode.pocketlesson.io' }}\n    startInLoadingState={true}\n    onShouldStartLoadWithRequest={(request) =\u003e {\n      if (request.url.startsWith('postcode://')) {\n        const data = parseQueryParams(request.url)\n\n        console.log(data?.address) // e.g. 서울 강남구 역삼로 180\n        console.log(data?.zonecode) // e.g. 06248\n        return false\n      }\n      return true\n    }}\n  /\u003e\n)\n```\n\n## 라이선스\n\n이 소스코드 저장소에 속한 코드는 MIT 라이선스를 따릅니다. 다음 우편번호 서비스와 관련한 소유권과 저작권은 카카오에 있습니다.\n\n로딩 인디케이터의 애니메이션은 [react-native-web](https://github.com/necolas/react-native-web)의 것을 사용했습니다.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevxoul%2Fdaumpostcode","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevxoul%2Fdaumpostcode","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevxoul%2Fdaumpostcode/lists"}