처음에 제가 만든 카카오 앱에 푸쉬를 날렸을때는 푸쉬가 왔었습니다 실제로 푸쉬기록이 남아있고요
그런데 그 앱에서 탈퇴한후 다시 가입하니 Firebase에서는 푸쉬가 보내지지만 RestAPI에서는 푸쉬가 보내지지 않습니다 .
“msg”: “push token for ( appId=143337, receiverUserId=49701319 ) does not exist.”,
“code”: -901 이런 에러를 뱉습니다. 사용자 id는 앱상에서도 등록되어 있습니다.
아마 사용자 id에 맞는 토큰을 KakaoSDK가 매칭해주지 않는 것 같습니다.
KakaoSDK는 자동으로 토큰하고 uuid를 연결해주는거 아닌가요? 만약 아니라면 저는 따로 설정해준것이 없는데 처음에는 어떻게 deviceid와 Token정보를 얻어온것인지 이해가 안됩니다.
GlobalApplication에서 KakaoSDK.init(new KakaoSDKAdapter());하면 충분한건가요?
그리고 천운으로 처음에 된것이라고 가정해도 어떻게 uuid와 firebase에서 받은 Token을 연결하는지 궁금합니다. KakaoApi를 사용해서 하고싶구요.
되던게 탈퇴했다고 되지않아서 귀신이 곡할 노릇입니다… 도움 부탁드립니다.
package com.example.haha.a123123;
import android.content.Context;
import android.os.Bundle;
import android.provider.Settings;
import android.telephony.TelephonyManager;
import android.util.Log;
import java.io.UnsupportedEncodingException;
import java.util.UUID;
import com.kakao.auth.ApiResponseCallback;
import com.kakao.auth.ApprovalType;
import com.kakao.auth.AuthType;
import com.kakao.auth.IApplicationConfig;
import com.kakao.auth.IPushConfig;
import com.kakao.auth.ISessionConfig;
import com.kakao.auth.KakaoAdapter;
import com.kakao.auth.Session;
import com.kakao.auth.network.response.ApiResponse;
import com.kakao.network.ErrorResult;
import com.kakao.push.PushService;
import com.kakao.push.PushToken;
import com.kakao.push.response.model.PushTokenInfo;
import com.kakao.util.helper.SharedPreferencesCache;
public class KakaoSDKAdapter extends KakaoAdapter {
private static final String PROPERTY_DEVICE_ID = null;
@Override
public IPushConfig getPushConfig() {
return new IPushConfig() {
/**
* [주의!] 아래 예제는 샘플앱에서 사용되는 것으로 기기정보 일부가 포함될 수 있습니다. 실제 릴리즈 되는 앱에서 사용하기 위해서는 사용자로부터 개인정보 취급에 대한 동의를 받으셔야 합니다.
*
* 한 사용자에게 여러 기기를 허용하기 위해 기기별 id가 필요하다.
* ANDROID_ID가 기기마다 다른 값을 준다고 보장할 수 없어, 보완된 로직이 포함되어 있다.
* @return 기기의 unique id
*/
public String getDeviceUUID() {
String deviceUUID;
Log.d("test","0");
final SharedPreferencesCache cache = Session.getCurrentSession().getAppCache();
final String id = cache.getString(PROPERTY_DEVICE_ID);
if (id != null) {
deviceUUID = id;
return deviceUUID;
} else {
UUID uuid = null;
Context context = getApplicationConfig().getApplicationContext();
final String androidId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
try {
if (!"9774d56d682e549c".equals(androidId)) {
uuid = UUID.nameUUIDFromBytes(androidId.getBytes("utf8"));
} else {
final String deviceId = ((TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE)).getDeviceId();
uuid = deviceId != null ? UUID.nameUUIDFromBytes(deviceId.getBytes("utf8")) : UUID.randomUUID();
}
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
Bundle bundle = new Bundle();
bundle.putString(PROPERTY_DEVICE_ID, uuid.toString());
cache.save(bundle);
deviceUUID = uuid.toString();
return deviceUUID;
}
}
@Override
public ApiResponseCallback<Integer> getTokenRegisterCallback() {
return new ApiResponseCallback<Integer>() {
@Override
public void onFailure(ErrorResult errorResult) {
// FCM 토큰 등록 실패 처리.
Log.d("test","1");
}
@Override
public void onSessionClosed(ErrorResult errorResult) {
// 현재 로그인이 되어 있지 않은 상태.
Log.d("test","2");
}
@Override
public void onNotSignedUp() {
// 앱에 카카오톡 계정으로 가입이 되어있지 않은 상태.
Log.d("test","3");
}
@Override
public void onSuccess(Integer result) {
// 성공적으로 토큰이 등록된 상태
Log.d("test","4");
}
};
}
};
}
@Override
public ISessionConfig getSessionConfig() {
return new ISessionConfig() {
@Override
public AuthType[] getAuthTypes() {
return new AuthType[]{AuthType.KAKAO_LOGIN_ALL};
}
@Override
public boolean isUsingWebviewTimer() {
return false;
}
@Override
public boolean isSecureMode() {
return false;
}
@Override
public ApprovalType getApprovalType() {
return ApprovalType.INDIVIDUAL;
}
@Override
public boolean isSaveFormData() {
return true;
}
};
}
@Override
public IApplicationConfig getApplicationConfig() {
return new IApplicationConfig() {
@Override
public Context getApplicationContext() {
return GlobalApplication.getGlobalApplicationContext();
}
};
}
}
제 나름대로 log를 찍어봤는데 log메세지도 출력되지 않네요… 그러면 아예 토큰을 넣지않는다는 이야기 아닌가요? 어떻게 해결해야 좋을까요?