카카오에서 제공하는 콜백은 3가지가 있습니다. 알림을 받아 파일로 로그를 남기는 부분만 예제를 작성했습니다.
* 연결 끊기 알림 : developers.kakao.com/docs/latest/ko/reference/callback#unlink-callback
* 카카오톡 채널 관계 알림 : developers.kakao.com/docs/latest/ko/reference/callback#channel-callback
* 카카오링크 전송 성공 알림 : developers.kakao.com/docs/latest/ko/reference/callback#kakaolink-callback
연결 끊기 알림
설정 위치 : 내 애플리케이션>제품 설정>카카오 로그인>연결 끊기
연결 끊기 알림은 탈퇴 처리 및 정보 삭제를 요청하는 것이므로, 처리 후 성공 응답을 보내야 합니다.
public function unlinkCallBack(){
$this->unlinkhasAccess();
//탈퇴처리 추가
echo json_encode(array('result_code'=>200, 'result'=>'success'));
}
public function unlinkhasAccess(){
//Write action to txt log
$log = "/REMOTE_ADDR: ".$_SERVER['REMOTE_ADDR'].
"/user_id: ".$_GET["user_id"].
"/referrer_type: ".$_GET["referrer_type"].PHP_EOL;
file_put_contents('./unlinkCallBack_log_'.date("j.n.Y").'.txt', $log, FILE_APPEND);
}
카카오톡 채널 관계 알림
설정 위치 : 내 애플리케이션>제품 설정>카카오톡 채널
카카오톡 채널 관계 알림은 사용자의 카카오톡 채널 추가 상태를 최신 정보로 갱신할 수 있습니다.
전달 받는 파라메터 중 id_type은 app_user_id와 id_type가 있고 차이는 정보 제공 동의 여부입니다.
("내 애플리케이션>제품 설정>카카오 로그인>동의항목"의 plusfriends 입니다.)
- 정보 제공 동의 했을때 채널 관계 알림을 받으면 app_user_id
- 동의 안했을때 채널관계 알림을 받으면 open_id
서비스하시는 앱에 가입되지 않은 사용자가 채널에 가입하여 알림을 받은 경우도 open_id가 전달됩니다.
public function callback(){
$json = file_get_contents('php://input');
$data = json_decode($json);
$this->hasAccess($data);
echo json_encode(array('result_code'=>200, 'result'=>'success'));
}
public function hasAccess($data){
$log = "/REMOTE_ADDR: ".$_SERVER['REMOTE_ADDR'].
"/event: ".$data->event.
"/id: ".$data->id.
"/id_type: ".$data->id_type.
"/plus_friend_public_id: ".$data->plus_friend_public_id.
"/plus_friend_uuid: ".$data->plus_friend_uuid.
"/updated_at: ".$data->updated_at.PHP_EOL;
file_put_contents('./channel_callback_log_'.date("j.n.Y").'.txt', $log, FILE_APPEND);
}
카카오링크 전송 성공 알림
설정 위치 : 내 애플리케이션>제품 설정>카카오링크
카카오링크 전송 성공 알림은 메시지가 성공적으로 전달된 경우, 콜백 URL로 알려주는 기능입니다.
콜백을 받으려면 링크 메시지를 발송 시, "serverCallbackArgs" 항목을 추가해야합니다.
var test = Kakao.Link.createDefaultButton({
container: '#CONTAINER_ID',
objectType: 'feed',
content: {
title: '제목',
description: '내용',
imageUrl: 'https://test.com/img.jpg',
link: {
mobileWebUrl: "https://test.com",
webUrl: "https://test.com"
}
},
serverCallbackArgs: '{"callback":"link"}',
buttons: [{
title: "버튼",
link: {
webUrl: "https://test.com",
mobileWebUrl: "https://test.com"
}
}]
});
public function linkCallBack(){
$this->linkhasAccess();
echo json_encode(array('result_code'=>200, 'result'=>'success'));
}
public function linkhasAccess(){
$log = "/REMOTE_ADDR: ".$_SERVER['REMOTE_ADDR'].PHP_EOL;
file_put_contents('./linkCallBack_log_'.date("j.n.Y").'.txt', $log, FILE_APPEND);
}
추가
PHP에서 주소 라우팅
.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
index.php
<?php
require(__DIR__ . '/api/common/route.php');
Route::init($_SERVER['REQUEST_URI']);
?>
route.php
<?php
class Route {
public static function init($reqUri){
if(Route::isAPI($reqUri)){
Route::routeApi($reqUri);
}
else{
Route::routeReact($reqUri);
}
}
private static function isAPI($reqUri){
if(strlen($reqUri)<4) return false;
return substr($reqUri,0,4) == '/api' ? true : false;
}
private static function routeApi($reqUri){
$url = preg_split('#/#', $reqUri);
require($url[1].'/'.$url[2].'/controller/'.$url[3].'Controller.php');
Response::jsonheader();
$ctr_name = $url[3].'Controller';
$ctr = new $ctr_name();
if( isset( $url[4] )){
$fullName = $url[4];
$searchName = '?';
$pos = strpos($fullName, $searchName);
if($pos === false) {
$functionName = $url[4];
} else {
$functionName = explode( '?', $url[4]);
$functionName = $functionName[0];
}
$ctr->{$functionName}();
}
else{
$ctr->defaultMethod();
}
}
private static function routeReact($reqUri){
require('index.html');
}
}
?>
/api/kakao/channel/linkCallBack 형태로 호출 시,
/api/kakao/controller/channelController.php 의 linkCallBack함수 호출
'카카오 REST API & SDK > 공통 사항' 카테고리의 다른 글
CORS(Cross-Origin Resource Sharing) 에러에 관해 (0) | 2021.05.21 |
---|---|
앱 연결이 끊겨요, 앱 유저 ID가 바뀝니다. (0) | 2021.05.07 |
각종 언어별/환경별 인코딩 예제 - 한글 깨짐 처리 (0) | 2021.03.16 |
Android - Release Key Hash (릴리즈 키해시) 조회 하기 (2) | 2021.01.20 |
사이트 도메인 등록 수 제한 및 도메인 추가 등록 (0) | 2021.01.19 |
댓글