์ฐ์ Kakao Developer์์ ์ฑ์ ๋ง๋ค๊ณ ํ์ฑํ์ค์ , ํด์ํค์ ๋ ฅ ๋ฑ ๋ชจ๋ ์ค๋น๋ฅผ ๋๋๋ค๊ณ ์น์.
(์นด์นด์ค ์ฌ์ฉ์ ์ ๋ณด ๋์๋ฅผ ํ์ ๋๋ ์ ํ์ผ๋ก ์ค์ ํ๋ ๊ฒ์ ์ ๋ง ์ค์ํ๋ค. ์ด๊ฑธ ํ์ธ ์ํ๊ณ ์ฝ๋๋ง ๊ณ์ ๊ณ ์น๋ค๊ฐ ๊ฑฐ์ ์ผ์ฃผ์ผ์ ๊ณ ์ํ๋ค. ์ฌ์ฉ์์ ๋ณด ๋์ ์ค์ ๊ณผ ๋ก๊ทธ์ธ ํ์ฑํ๋ ์ ๋ง ํ์๋ค.)
์ด์ ์๋๋ก์ด๋ ์คํ๋์ค์ ์ ๋ ฅํ ์ฝ๋๋ค์ด๋ค.
<AndroidManifest.xml>
//application ๋ฐ์
<uses-permission android:name="android.permission.INTERNET" /> //์ธํฐ๋ท ์ฌ์ฉ๊ถํ ์ค์
//application ์์
<meta-data
android:name="com.kakao.sdk.AppKey"
android:value="@string/kakao_app_key" />
<build.gradle(;app)>
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
// ์นด์นด์คํก SDK ์ถ๊ฐ
implementation group: project.KAKAO_SDK_GROUP, name: 'usermgmt', version: project.KAKAO_SDK_VERSION
// ์นด์นด์ค ๋ก๊ทธ์ธ
implementation group: 'com.kakao.sdk', name: 'usermgmt', version: '1.30.0'
// ์นด์นด์คํก
implementation group: 'com.kakao.sdk', name: 'kakaotalk', version: '1.30.0'
// ์นด์นด์ค์คํ ๋ฆฌ
implementation group: 'com.kakao.sdk', name: 'kakaostory', version: '1.30.0'
// ์นด์นด์ค๋งํฌ
implementation group: 'com.kakao.sdk', name: 'kakaolink', version: '1.30.0'
// ์นด์นด์ค๋ด๋น
implementation group: 'com.kakao.sdk', name: 'kakaonavi', version: '1.30.0'
}
<build.gradle(ํ๋ก์ ํธ ์ด๋ฆ)>
allprojects {
repositories {
google()
jcenter()
maven{
url "https://maven.google.com"
}
maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/' }
}
}
<resํด๋ ์์ strings.xml ์ถ๊ฐ>
<resources>
//์นด์นด์ค ์ฑ ํค
<string name="app_name">์นด์นด์ค๋๋ฒจ๋กํผ์ ๋ฑ๋กํ ์ฑ์ด๋ฆ ์ ๊ธฐ</string>
<string name="kakao_app_key">์นด์นด์ค๋๋ฒจ๋กํผ์์ ํ์ธํ ๋ค์ดํฐ๋ธ์ฑํค ์ ๊ธฐ</string>
</resources>
์์ ๊ณผ์ ์ ์ ๋ง์ณค๋ค๋ฉด import com.kakao.~ ๊ฐ ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
์๋์ ์ฝ๋๋ ๋ด๊ฐ ๋ง๋ ๋ก๊ทธ์ธ ์์์ด๋ค.
๋๋ ์นด์นด์ค ๋ฒํผ์ ์ง์ ๋์์ธ ํ๊ณ ์ถ์ด ๋ฐ๋ก ๋ฒํผ์ ๋ง๋ค์๋ค.
<LoginActivity.xml>
<com.kakao.usermgmt.LoginButton
android:id="@+id/btn_kakao_login"
android:layout_width="19dp"
android:layout_height="wrap_content"
android:visibility="gone" />
์์ ์ฝ๋๊ฐ ์นด์นด์ค์์ ์ ๊ณตํ๋ ๋ฒํผ์ด๋ค. ๋๋ ์ด ๋ฒํผ์ ๋ฎ๊ณ ์๋์ฒ๋ผ ์๋ก ์ปค์คํ ํด๋ณด์๋ค.
<Button
android:id="@+id/btn_custom_login"
android:layout_width="187dp"
android:layout_height="41dp"
android:layout_gravity="center"
android:background="@drawable/buttonstyle"
android:text="์นด์นด์คํก์ผ๋ก ๊ฐํธ ๋ก๊ทธ์ธ"
android:textColor="#000000" />
์นด์นด์ค์์ ์ ๊ณตํ ๋ฒํผ์ ์ฌ์ฉํ์ง ์์๊ธฐ ๋๋ฌธ์ ์ธ์ ์ ์ง์ ์ด์ด์ฃผ์๋ค.
<LoginActivity.java>
public class LoginActivity extends AppCompatActivity {
private Button btn_custom_login;
private Button btn_custom_logout;
private SessionCallback sessionCallback = new SessionCallback();
private String nickname,email;
Session session;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
btn_custom_login = (Button) findViewById(R.id.btn_custom_login);
btn_custom_logout = (Button) findViewById(R.id.btn_custom_logout);
//๋ก๊ทธ์ธ ๋ฒํผ
btn_custom_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
session = Session.getCurrentSession();
session.addCallback(sessionCallback);
session.open(AuthType.KAKAO_LOGIN_ALL, LoginActivity.this);
}
});
//๋ก๊ทธ์์ ๋ฒํผ
btn_custom_logout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
UserManagement.getInstance()
.requestLogout(new LogoutResponseCallback() {
@Override
public void onCompleteLogout() {
Toast.makeText(LoginActivity.this, "๋ก๊ทธ์์ ๋์์ต๋๋ค.", Toast.LENGTH_SHORT).show();
}
});
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
// ์ธ์
์ฝ๋ฐฑ ์ญ์
Session.getCurrentSession().removeCallback(sessionCallback);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
// ์นด์นด์คํก|์คํ ๋ฆฌ ๊ฐํธ๋ก๊ทธ์ธ ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ SDK๋ก ์ ๋ฌ
if (Session.getCurrentSession().handleActivityResult(requestCode, resultCode, data)) {
return;
}
super.onActivityResult(requestCode, resultCode, data);
}
//์ฝ๋ฐฑ ๋ด๋ถ ํด๋์ค
private class SessionCallback implements ISessionCallback {
// ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ ์ํ
@Override
public void onSessionOpened() {
requestMe();
}
// ๋ก๊ทธ์ธ์ ์คํจํ ์ํ
@Override
public void onSessionOpenFailed(KakaoException exception) {
Log.e("SessionCallback :: ", "onSessionOpenFailed : " + exception.getMessage());
}
// ์ฌ์ฉ์ ์ ๋ณด ์์ฒญ
public void requestMe() {
UserManagement.getInstance()
.me(new MeV2ResponseCallback() {
@Override
public void onSessionClosed(ErrorResult errorResult) {
Log.e("KAKAO_API", "์ธ์
์ด ๋ซํ ์์: " + errorResult);
}
@Override
public void onFailure(ErrorResult errorResult) {
Log.e("KAKAO_API", "์ฌ์ฉ์ ์ ๋ณด ์์ฒญ ์คํจ: " + errorResult);
}
//์ฌ์ฉ์ ์ ๋ณด ์์ฒญ์ ์ฑ๊ณตํ ๊ฒฝ์ฐ
@Override
public void onSuccess(MeV2Response result) {
Log.i("KAKAO_API", "์ฌ์ฉ์ ์์ด๋: " + result.getId());
UserAccount kakaoAccount = result.getKakaoAccount();
if (kakaoAccount != null) {
// ์ด๋ฉ์ผ
email = kakaoAccount.getEmail();
if (email != null) {
Log.i("KAKAO_API", "email: " + email);
} else if (kakaoAccount.emailNeedsAgreement() == OptionalBoolean.TRUE) {
// ๋์ ์์ฒญ ํ ์ด๋ฉ์ผ ํ๋ ๊ฐ๋ฅ
// ๋จ, ์ ํ ๋์๋ก ์ค์ ๋์ด ์๋ค๋ฉด ์๋น์ค ์ด์ฉ ์๋๋ฆฌ์ค ์์์ ๋ฐ๋์ ํ์ํ ๊ฒฝ์ฐ์๋ง ์์ฒญํด์ผ ํฉ๋๋ค.
} else {
// ์ด๋ฉ์ผ ํ๋ ๋ถ๊ฐ
}
// ํ๋กํ
Profile profile = kakaoAccount.getProfile();
if (profile != null) {
Log.d("KAKAO_API", "nickname: " + profile.getNickname());
Log.d("KAKAO_API", "profile image: " + profile.getProfileImageUrl());
Log.d("KAKAO_API", "thumbnail image: " + profile.getThumbnailImageUrl());
nickname=profile.getNickname();
} else if (kakaoAccount.profileNeedsAgreement() == OptionalBoolean.TRUE) {
// ๋์ ์์ฒญ ํ ํ๋กํ ์ ๋ณด ํ๋ ๊ฐ๋ฅ
} else {
// ํ๋กํ ํ๋ ๋ถ๊ฐ
}
redirectSignupActivity();
}
}});
}
}
protected void redirectSignupActivity() { //์ธ์
์ฐ๊ฒฐ ์ฑ๊ณต ์ profileActivity๋ก ๋๊น
ArrayList<String> profile=new ArrayList<>();
profile.add(nickname);
profile.add(email);
Intent intent = new Intent(this, HomeActivity.class);
intent.putExtra("profile",profile);
startActivity(intent);
finish();
}
}
'ANDROID' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋๋ก์ด๋] ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋ (sqlite) (0) | 2020.08.06 |
---|---|
[์๋๋ก์ด๋] intent ์ฌ๋ฌ ๊ฐ์ ๊ฐ ๋๊ธฐ๋ ๋ฐฉ๋ฒ (0) | 2020.08.03 |
[์๋๋ก์ด๋] SharedPreference ์ฌ์ฉ๋ฒ (ํ์ฌ ๋ฐ์ดํฐ ์ ์ฅ/์ฑ ์ค์ ๋ง๋ค ๋ ์ ์ฉ) (0) | 2020.08.02 |
[์๋๋ก์ด๋] ListView ์ฌ์ฉ๋ฒ (0) | 2020.08.02 |
[์๋๋ก์ด๋] ๋ก๊ทธ์ธ ์ฐ๋ HashKey ์ป๋ ๋ฐฉ๋ฒ (0) | 2020.08.02 |