/** * Copyright 2014 Daum Kakao Corp. * * Redistribution and modification in source or binary forms are not permitted without specific prior written permission.  * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.kakao; import android.os.Bundle; import com.kakao.helper.ServerProtocol; import com.kakao.http.HttpRequestTask; import com.kakao.rest.APIHttpRequestTask; /** * 푸시 서비스 API 요청을 담당한다. * @author MJ */ public class PushService { /** * 현 기기의 푸시 토큰을 등록한다. * 푸시 토큰 등록 후 푸시 토큰 삭제하기 전 또는 만료되기 전까지 서버에서 관리되어 푸시 메시지를 받을 수 있다. * @param responseHandler 요청 결과에 따른 콜백 * @param pushToken 등록할 푸시 토큰 * @param deviceId 한 사용자가 여러 기기를 사용할 수 있기 때문에 기기에 대한 유일한 id도 필요 */ public static void registerPushToken(final PushRegisterHttpResponseHandler responseHandler, final String pushToken, final String deviceId) { String url = HttpRequestTask.createBaseURL(ServerProtocol.API_AUTHORITY, ServerProtocol.PUSH_REGISTER_PATH); final Bundle parameters = new Bundle(); parameters.putString(ServerProtocol.DEVICE_ID_PARAM_NAME, deviceId); parameters.putString(ServerProtocol.PUSH_TYPE_PARAM_NAME, ServerProtocol.PUSH_GCM_TYPE); parameters.putString(ServerProtocol.PUSH_TOKEN_PARAM_NAME, pushToken); APIHttpRequestTask.requestPost(responseHandler, Integer.class, url, parameters); } /** * 현 사용자 ID로 등록된 모든 푸시토큰 정보를 반환한다. * @param responseHandler 요청 결과에 따른 콜백 */ public static void getPushTokens(final PushTokensHttpResponseHandler<PushTokenInfo[]> responseHandler) { String url = HttpRequestTask.createBaseURL(ServerProtocol.API_AUTHORITY, ServerProtocol.PUSH_TOKENS_PATH); APIHttpRequestTask.requestGet(responseHandler, PushTokenInfo[].class, url, null); } /** * 사용자의 해당 기기의 푸시 토큰을 삭제한다. 대게 로그아웃시에 사용할 수 있다. * @param responseHandler 요청 결과에 따른 콜백 * @param deviceId 해당기기의 푸시 토큰만 삭제하기 위해 기기 id 필요 */ public static void deregisterPushToken(final PushDeregisterHttpResponseHandler responseHandler, final String deviceId) { String url = HttpRequestTask.createBaseURL(ServerProtocol.API_AUTHORITY, ServerProtocol.PUSH_DEREGISTER_PATH); final Bundle parameters = new Bundle(); parameters.putString(ServerProtocol.DEVICE_ID_PARAM_NAME, deviceId); parameters.putString(ServerProtocol.PUSH_TYPE_PARAM_NAME, ServerProtocol.PUSH_GCM_TYPE); APIHttpRequestTask.requestPost(responseHandler, Void.class, url, parameters); } /** * 사용자의 모든 푸시 토큰을 삭제한다. 대게 앱 탈퇴시 사용할 수 있다. * @param responseHandler 요청 결과에 따른 콜백 */ public static void deregisterPushTokenAll(final PushDeregisterHttpResponseHandler responseHandler) { String url = HttpRequestTask.createBaseURL(ServerProtocol.API_AUTHORITY, ServerProtocol.PUSH_DEREGISTER_PATH); APIHttpRequestTask.requestPost(responseHandler, Void.class, url, null); } /** * 자기 자신에게 푸시 메시지를 전송한다. 테스트 용도로만 사용할 수 있다. 다른 사람에게 푸시를 보내기 위해서는 서버에서 어드민키로 REST API를 사용해야한다. * @param responseHandler 요청 결과에 따른 콜백 * @param pushMessage 보낼 푸시 메시지 * @param deviceId 푸시 메시지를 보낼 기기의 id */ public static void sendPushMessage(final PushSendHttpResponseHandler responseHandler, final String pushMessage, final String deviceId) { String url = HttpRequestTask.createBaseURL(ServerProtocol.API_AUTHORITY, ServerProtocol.PUSH_SEND_PATH); final Bundle parameters = new Bundle(); parameters.putString(ServerProtocol.DEVICE_ID_PARAM_NAME, deviceId); parameters.putString(ServerProtocol.PUSH_MESSAGE_PARAM_NAME, pushMessage); APIHttpRequestTask.requestPost(responseHandler, Void.class, url, parameters); } }