{"id":9615,"date":"2024-12-19T21:39:12","date_gmt":"2024-12-19T12:39:12","guid":{"rendered":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=9615"},"modified":"2024-12-30T14:47:38","modified_gmt":"2024-12-30T05:47:38","slug":"%ea%b5%ac%ea%b8%80-%eb%a1%9c%ea%b7%b8%ec%9d%b8","status":"publish","type":"post","link":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=9615","title":{"rendered":"\uc548\ub4dc\ub85c\uc774\ub4dc \uc571\uc5d0\uc11c \uad6c\uae00 \ub85c\uadf8\uc778 \uc5f0\ub3d9\ud558\uae30"},"content":{"rendered":"<h1>\uc548\ub4dc\ub85c\uc774\ub4dc \uc571\uc5d0\uc11c \uad6c\uae00 \ub85c\uadf8\uc778 \uc5f0\ub3d9\ud558\uae30<\/h1>\n<p><a href=\"https:\/\/velog.io\/@duridudu\/%EC%9D%BC%EC%9D%BC%EC%9D%B4-androidkotlin-%EA%B5%AC%EA%B8%80-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0\">\ucc38\uc870<\/a><\/p>\n<h2>Google Firebase Console<\/h2>\n<p><a href=\"https:\/\/console.firebase.google.com\/\">https:\/\/console.firebase.google.com\/<\/a><\/p>\n<p>\ud504\ub85c\uc81d\ud2b8 \uc124\uc815 &gt; \uc77c\ubc18 &gt; SHA-1 \uc124\uc815 (\ub0b4 \ud504\ub85c\uc81d\ud2b8\uc758 SHA-1 \uac00\uc838\uc640\uc11c \uc800\uc7a5)<\/p>\n<p><a href=\"https:\/\/holika.tistory.com\/entry\/Android-%ED%8C%81-SHA1-SHA-256-%ED%99%95%EC%9D%B8%ED%95%98%EB%8A%94-%EB%B2%95%EA%B3%BC-signingReport-gradle%EC%9D%B4-%EC%97%86%EC%9D%84-%EB%95%8C-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95\">SHA1, SHA-256 \ud655\uc778\ud558\ub294 \ubc95\uacfc signingReport gradle\uc774 \uc5c6\uc744 \ub54c \ud574\uacb0 \ubc29\ubc95<\/a><\/p>\n<p>Authentication &gt; Google \ub85c\uadf8\uc778 \ucd94\uac00 \uc124\uc815<\/p>\n<p><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/wp-content\/uploads\/2024\/12\/2024-12-19-01.png\"><img decoding=\"async\" src=\"https:\/\/www.skyer9.pe.kr\/wordpress\/wp-content\/uploads\/2024\/12\/2024-12-19-01.png\" alt=\"\" \/><\/a><\/p>\n<p>google-services.json \uc5d0 \uc544\ub798\uc640 \uac19\uc740 \ub0b4\uc6a9\uc774 \uc788\uc5b4\uc57c \ud55c\ub2e4.<\/p>\n<pre><code class=\"language-json\">      &quot;oauth_client&quot;: [\n        {\n          &quot;client_id&quot;: &quot;XXXXXXXXXXXXX.apps.googleusercontent.com&quot;,\n          &quot;client_type&quot;: 1,\n          &quot;android_info&quot;: {\n            &quot;package_name&quot;: &quot;XXXXXXXXXXX&quot;,\n            &quot;certificate_hash&quot;: &quot;XXXXXXXXXXXXXX&quot;\n          }\n        },\n        {\n          &quot;client_id&quot;: &quot;XXXXXXXXXXXXXX.apps.googleusercontent.com&quot;,\n          &quot;client_type&quot;: 3\n        }\n      ],<\/code><\/pre>\n<p>\ucd5c\uc2e0 \ubc84\uc804\uc758 google-services.json\uc744 app \ud3f4\ub354\uc5d0 \uac31\uc2e0<\/p>\n<p>\ud14c\uc2a4\ud2b8 \ud6c4 \uad6c\uae00 \ud50c\ub808\uc774\uc5d0\uc11c \uc124\uce58\ud55c \uc571\uc758 \uacbd\uc6b0,<br \/>\n\uad6c\uae00\uc774 \uc81c\uacf5\ud558\ub294 \uc11c\uba85\ud0a4\ub97c \ub4f1\ub85d\ud574 \uc8fc\uc5b4\uc57c \ud55c\ub2e4.<\/p>\n<p><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/wp-content\/uploads\/2024\/12\/2024-12-30-01.png\"><img decoding=\"async\" src=\"https:\/\/www.skyer9.pe.kr\/wordpress\/wp-content\/uploads\/2024\/12\/2024-12-30-01.png\" alt=\"\" \/><\/a><\/p>\n<h2>Google Cloud Console<\/h2>\n<p><a href=\"https:\/\/console.cloud.google.com\/apis\/\">https:\/\/console.cloud.google.com\/apis\/<\/a><\/p>\n<p>OAuth \ub3d9\uc758 \ud654\uba74 \uc791\uc131<br \/>\nOAuth 2.0 \ud074\ub77c\uc774\uc5b8\ud2b8 ID \ucd94\uac00<br \/>\n(\uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 O)<br \/>\n(android X)<\/p>\n<p>\uc660\uc9c0&#8230; <code>Authentication &gt; Google \ub85c\uadf8\uc778 \ucd94\uac00 \uc124\uc815<\/code> \ubd80\ubd84\uc774 \uc774\uac78 \ud55c \ud6c4\uc5d0 \ud574\uc57c \ud560\ub4ef&#8230;<\/p>\n<h2>\uc571 \ub2e8\uc704 gradle<\/h2>\n<pre><code class=\"language-groovy\">plugins {\n    \/\/ ......\n    id(&quot;com.google.gms.google-services&quot;)\n}\n\ndependencies {\n    \/\/ ......\n    implementation &quot;androidx.credentials:credentials:1.3.0&quot;\n    implementation &quot;androidx.credentials:credentials-play-services-auth:1.3.0&quot;\n    implementation libs.googleid\n\n    implementation &#039;com.google.gms:google-services:4.4.2&#039;\n    implementation &#039;com.google.firebase:firebase-auth:23.1.0&#039;\n    implementation platform(&#039;com.google.firebase:firebase-bom:32.0.0&#039;)\n    implementation &#039;com.google.android.gms:play-services-auth:21.3.0&#039;\n}<\/code><\/pre>\n<h2>\ud504\ub85c\uc81d\ud2b8 \ub2e8\uc704 gradle<\/h2>\n<pre><code class=\"language-groovy\">buildscript {\n    repositories {\n        google()\n        mavenCentral()\n    }\n}\n\nplugins {\n    alias(libs.plugins.android.application) apply false\n    id(&quot;com.google.gms.google-services&quot;) version &quot;4.4.2&quot; apply false\n}<\/code><\/pre>\n<h2>\ucf54\ub4dc \uc791\uc131<\/h2>\n<pre><code class=\"language-java\">    private void setupLogin() {\n        credentialManager = CredentialManager.create(this);\n        findViewById(R.id.sign_in_button).setOnClickListener(v -&gt; signIn());\n    }\n\n    private void signIn() {\n        GetCredentialRequest request = new GetCredentialRequest.Builder()\n                .addCredentialOption(new GetGoogleIdOption.Builder()\n                        .setServerClientId(getString(R.string.default_web_client_id))\n                        .build())\n                .build();\n\n        credentialManager.getCredential(\n                this,\n                request,\n                new Continuation&lt;GetCredentialResponse&gt;() {\n                    @NonNull\n                    @Override\n                    public CoroutineContext getContext() {\n                        return EmptyCoroutineContext.INSTANCE;\n                    }\n\n                    @Override\n                    public void resumeWith(@NonNull Object result) {\n                        try {\n                            if (result instanceof GetCredentialResponse) {\n                                GetCredentialResponse response = (GetCredentialResponse) result;\n                                if (response.getCredential() instanceof GoogleIdTokenCredential) {\n                                    GoogleIdTokenCredential credential =\n                                            (GoogleIdTokenCredential) response.getCredential();\n                                    String idToken = credential.getIdToken();\n                                    String id = credential.getId();\n\n                                    runOnUiThread(() -&gt; {\n                                        Log.d(TAG, &quot;ID Token: &quot; + idToken);\n                                        Log.d(TAG, &quot;Email: &quot; + id);\n                                        Toast.makeText(MainActivity.this,\n                                                &quot;Google Sign-In Successful\\nEmail: &quot; + id,\n                                                Toast.LENGTH_SHORT).show();\n                                    });\n                                }\n                            }\n                        } catch (Exception e) {\n                            runOnUiThread(() -&gt; {\n                                Log.e(TAG, &quot;Google Sign-In Failed: &quot; + e.getMessage());\n                                Toast.makeText(MainActivity.this, &quot;Google Sign-In Failed&quot;,\n                                        Toast.LENGTH_SHORT).show();\n                            });\n                        }\n                    }\n                }\n        );\n    }<\/code><\/pre>\n<p>\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uc815\uc774 \ub41c \uacbd\uc6b0, R.string.default_web_client_id \uac00 \uc624\ub958\uc5c6\uc774 \uc778\uc2dd\ub41c\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uc548\ub4dc\ub85c\uc774\ub4dc \uc571\uc5d0\uc11c \uad6c\uae00 \ub85c\uadf8\uc778 \uc5f0\ub3d9\ud558\uae30 \ucc38\uc870 Google Firebase Console https:\/\/console.firebase.google.com\/ \ud504\ub85c\uc81d\ud2b8 \uc124\uc815 &gt; \uc77c\ubc18 &gt; SHA-1 \uc124\uc815 (\ub0b4 \ud504\ub85c\uc81d\ud2b8\uc758 SHA-1 \uac00\uc838\uc640\uc11c \uc800\uc7a5) SHA1, SHA-256 \ud655\uc778\ud558\ub294 \ubc95\uacfc signingReport gradle\uc774 \uc5c6\uc744 \ub54c \ud574\uacb0 \ubc29\ubc95 Authentication &gt; Google \ub85c\uadf8\uc778 \ucd94\uac00 \uc124\uc815 google-services.json \uc5d0 \uc544\ub798\uc640 \uac19\uc740 \ub0b4\uc6a9\uc774 \uc788\uc5b4\uc57c \ud55c\ub2e4. &quot;oauth_client&quot;: [ { &quot;client_id&quot;: &quot;XXXXXXXXXXXXX.apps.googleusercontent.com&quot;, &quot;client_type&quot;: 1, &quot;android_info&quot;: { &quot;package_name&quot;:\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=9615\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[32],"tags":[],"class_list":["post-9615","post","type-post","status-publish","format-standard","hentry","category-android"],"_links":{"self":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/9615","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9615"}],"version-history":[{"count":10,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/9615\/revisions"}],"predecessor-version":[{"id":9632,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/9615\/revisions\/9632"}],"wp:attachment":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9615"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=9615"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=9615"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}