안녕하세요 초보 안드로이드 개발자 입니다.
안드로이드 스튜디오를 이용해 카카오링크 API를 사용해보려는데요
특정 이미지를 누르면 카카오 친구리스트가 뜨고, 준비해둔 메시지를 전송하려고 합니다.
여기에 나와있는대로
https://developers.kakao.com/docs/latest/ko/message/android-link#create-message
기본 템플릿으로 메시지 보내기를 따라해보고 있습니다만… 뭔가 잘못한것 같은데 뭔지 모르겠습니다 ㅠ
아래는 설명에 나온 GlobalApplication 에 SDK 초기화 부분이구요, sendKakaoMessage 함수를 열면 onCreate에 다 때려박으면 어찌 메시지는 보내지기는 합니다… 하지만 뭔가 이상하다는건 알고있습니다 Application에 구현하는게 아닌것 같아서요
해서 아래에 sendKakao 클래스를 만들었고, 특정 액티비티에서 이미지를 터지할시 리스너를 통해 작동시키려 합니다만
아래와 같은 오류메시지가 발생합니다
D/SendKakao: 카카오링크 보내기 성공 Intent
E/SendKakao: 카카오링크 보내기 실패
'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
메시지에 따르면, 아래 sendKakaoMessage 함수의 startActivity(linkResult.intent) 부분이 문제가 있다고 합니다만 잘 모르겠습니다 ㅠ
아래에 코드 부분 붙여두었습니다. 어제부터 계속 붙잡고 있던 문제라ㅠ 뭘 어떻게 해야할지 모르겠습니다. 알려주시면 감사하겠습니다.
class KakaoApplication : Application() {
val TAG : String = "KakaoApplication"
override fun onCreate() {
super.onCreate()
var context : Context = applicationContext
// kakao SDK 초기화
KakaoSdk.init(this, "c205ec19xxxxxxd5161xxxxxxxxx3d815" );
//sendKakaoMessage(context)
}
Activity.class
mIvKakaoTalk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//mSendKakao = new SendKakao();
//mSendKakao.sendKakaoMessage(mContext);
//Intent intent = new Intent(mContext, SendKakao.class);
//mContext.startActivity(intent);
}
});
SendKakao.calss
class SendKakao : AppCompatActivity() {
var TAG : String = "SendKakao"
fun sendKakaoMessage(context : Context) {
val defaultFeed = TextTemplate(
text = """
카카오링크는 카카오 플랫폼 서비스의 대표 기능으로써 사용자의 모바일 기기에 설치된 카카오 플랫폼과 연동하여 다양한 기능을 실행할 수 있습니다.
현재 이용할 수 있는 카카오링크는 다음과 같습니다.
카카오톡링크
카카오톡을 실행하여 사용자가 선택한 채팅방으로 메시지를 전송합니다.
카카오스토리링크
카카오스토리 글쓰기 화면으로 연결합니다.
""".trimIndent(),
link = Link(
webUrl = "https://developers.kakao.com",
mobileWebUrl = "https://developers.kakao.com"
)
)
// 피드 메시지 보내기
// 카카오톡 설치여부 확인
if (LinkClient.instance.isKakaoLinkAvailable(context)) {
// 카카오톡으로 카카오링크 공유 가능
LinkClient.instance.defaultTemplate(context, defaultFeed) { linkResult, error ->
if (error != null) {
Log.e(TAG, "카카오링크 보내기 실패", error)
}
else if (linkResult != null) {
Log.d(TAG, "카카오링크 보내기 성공 ${linkResult.intent}")
startActivity(linkResult.intent)
// 카카오링크 보내기에 성공했지만 아래 경고 메시지가 존재할 경우 일부 컨텐츠가 정상 동작하지 않을 수 있습니다.
Log.w(TAG, "Warning Msg: ${linkResult.warningMsg}")
Log.w(TAG, "Argument Msg: ${linkResult.argumentMsg}")
}
}
} else {
// 카카오톡 미설치: 웹 공유 사용 권장
// 웹 공유 예시 코드
val sharerUrl = WebSharerClient.instance.defaultTemplateUri(defaultFeed)
// CustomTabs으로 웹 브라우저 열기
// 1. CustomTabs으로 Chrome 브라우저 열기
try {
KakaoCustomTabsClient.openWithDefault(context, sharerUrl)
} catch(e: UnsupportedOperationException) {
// Chrome 브라우저가 없을 때 예외처리
}
// 2. CustomTabs으로 디바이스 기본 브라우저 열기
try {
KakaoCustomTabsClient.open(context, sharerUrl)
} catch (e: ActivityNotFoundException) {
// 인터넷 브라우저가 없을 때 예외처리
}
}
}
}