앱에서 카카오톡 플러스친구를 웹뷰나 브라우저를 이용하지 않고 바로 카카오톡앱으로 띄우기
- URL scheme 을 이용
- URL scheme?
“http://”, “ftp://”, “market://”과 같은 문자열을 url scheme이라 부릅니다. url scheme을 통해 앱이 실행되는 방식은 다음과 같습니다.
- 웹페이지에서 하이퍼링크 클릭 시 url scheme이 system에 전달됨
- system에서 전달된 url scheme을 보고 실행 가능한 앱이 있는지 확인
- 해당 url scheme을 받을 수 있는 앱이 있다면 앱을 실행시키며 이 url을 함께 전달
- 앱이 실행되면서 url에 포함된 내용을 참조해서 특정 기능을 수행함
리소스에 어떻게 요청, 접근할 것인지를 명시함.
안드로이드에서는 intent scheme(custom url)을 사용할 수 있다.
package, action, category, component, scheme 등을 지정해서 만들 수 있는 것 같다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val url ="intent://plusfriend/talk/chat/@지그재그#Intent;scheme=kakaoplus;package=com.kakao.talk;end"
if (url != null && url.startsWith("intent://")) {
try {
val intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME)
Log.e("TAGG","$intent")
//Intent { act=android.intent.action.VIEW //데이터의 URL로 가장 적절한 액티비티를 호출하는 액션
//dat=kakaoplus://plusfriend/talk/chat/@지그재그 //kakaoplus: 가 scheme이고, 카카오톡이 미리 커스텀해놓은 스킴이다.
//pkg=com.kakao.talk } //패키지네임
val existPackage = intent.getPackage()?.let { this.packageManager.getLaunchIntentForPackage(it) }
//안드로이드는 packageManager이 폰에 깔린 패키지(앱)을 관리한다.
//앱에 intent의 패키지 (즉, 카카오톡)이 깔려있는지 확인하는 코드
//카카오톡이 깔려 있으면 패키지(카카오톡)실행 & 지그재그 플친 오픈
if (existPackage != null) {
startActivity(this, intent,null)
}
//키키오톡이 깔려 있지 않으면 마켓에서 카카오톡 검색
else {
val marketIntent = Intent(Intent.ACTION_VIEW);
marketIntent.data = Uri.parse("market://details?id=" + intent.getPackage()) //스토어에서 카카오톡을 검색하도록 하는 intent
startActivity(this, marketIntent,null);
}
return
} catch (e: Exception) {
e.printStackTrace()
}
} else if (url != null && url.startsWith("market://")) {
try {
val intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
if (intent != null) {
startActivity(this,intent,null);
}
return ;
} catch (e: URISyntaxException) {
e.printStackTrace();
}
}
}
//안드로이드 11 이상부터는 이 코드를 manifest에 넣어줘야한다고 한다.
//https://developer.android.com/about/versions/11/privacy/package-visibility?hl=ko
<queries>
<package android:name="com.kakao.talk" />
</queries>
삽질 :
https://pf.kakao.com/_xexkxcxkl
위 링크는 브랜디 카카오톡 플러스친구 링크이다.
처음에는 intent scheme 'intent://plusfriend/talk/chat/@지그재그' 중 @뒤에 '_xexkxcxkl'<<이것을 넣어야 하는 줄 알았다. 저게 카카오에서 부여한 채널별 아이디 인 줄 알았음.
근데 저게 아니라 카카오톡에서 실제로 고객이 검색할 때 사용하는 이름 즉, 한글로 '브랜디', '지그재그' 이걸 입력하는 거였다. 🥲