Back to project page kakao-android-sdk-standalone.
The source code is released under:
Apache License
If you think the Android project kakao-android-sdk-standalone listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
/** * Copyright 2014 Minyoung Jeong <kkungkkung@gmail.com> * Copyright 2014 Kakao Corp.//from ww w. ja v a2 s .c om * * 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 com.kakao.helper.TalkProtocol; import com.kakao.internal.Action; import com.kakao.internal.KakaoTalkLinkProtocol; import com.kakao.internal.LinkObject; import org.json.JSONArray; import org.json.JSONException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; /** * ?????? ??? ????? ???? ????? Builder????. * ???? ?????? ???? ????? content? ????. */ public class KakaoTalkLinkMessageBuilder { private final String appKey; private final String appVer; private final AtomicInteger textType; private final AtomicInteger imageType; private final AtomicInteger buttonType; private final AtomicInteger linkType; private final List<LinkObject> linkObjList; KakaoTalkLinkMessageBuilder(final String appKey, final String appVer) { this.appKey = appKey; this.appVer = appVer; this.textType = new AtomicInteger(0); this.imageType = new AtomicInteger(0); this.buttonType = new AtomicInteger(0); this.linkType = new AtomicInteger(0); this.linkObjList = new ArrayList<LinkObject>(); } /** * ????? ??? ????. ???? ????? ?? 1000??? ??????. * * @param text ??? ??? * @throws KakaoLinkParseException ???? ???? ?????? ???? ???????? ?? ?? ?????. */ public KakaoTalkLinkMessageBuilder addText(final String text) throws KakaoLinkParseException { if (textType.getAndIncrement() == 1) throw new KakaoLinkParseException(KakaoLinkParseException.ERROR_CODE.DUPLICATE_OBJECTS_USED, "textType already added. each type is allowed at least one."); final LinkObject textLink = LinkObject.newText(text); linkObjList.add(textLink); return this; } /** * ?????? ????? ????. ?? 70px * 70px ?????? ????? ???? ??????, ????? 500kb ????? ?????? ????? ????? ????? ????? url??? ???????? ??. * * @param src ??? ????? ??????? ???? url * @param width ??? ???????? ?? ???? * @param height ??? ???????? ?? ???? * @throws KakaoLinkParseException ???? ????? ?????? ???? ???????? ?? ?? ?????. */ public KakaoTalkLinkMessageBuilder addImage(final String src, final int width, final int height) throws KakaoLinkParseException { if (imageType.getAndIncrement() == 1) throw new KakaoLinkParseException(KakaoLinkParseException.ERROR_CODE.DUPLICATE_OBJECTS_USED, "imageType already added. each type is allowed at least one."); final LinkObject imageLink = LinkObject.newImage(src, width, height); linkObjList.add(imageLink); return this; } /** * ??? ??? ????? ????? ????. * ?? ????? kakao[appkey]://exec?? ????????. * ?? ????? ??? url?? append? parameter? ?? ??? {@link #addAppButton(String, com.kakao.internal.Action)}??? ????. * @param text ???? ???? ???? * @throws KakaoLinkParseException ???? ?? ?????? ???? ???????? ?? ?? ?????. */ public KakaoTalkLinkMessageBuilder addAppButton(final String text) throws KakaoLinkParseException { addAppButton(text, Action.newActionApp(null)); return this; } /** * ??? ??? ????? ????? ????. * ?? ????? ??? url?? append? parameter? ?? ?? ????. * ?? ????? kakao[appkey]://exec?? ?????? ???{@link #addAppButton(String)}? ????. * @param text ???? ???? ???? * @param appAction app ?? url?? append? parameter? os, device?? ?? * @throws KakaoLinkParseException ???? ?? ?????? ???? ???????? ?? ?? ?????. */ public KakaoTalkLinkMessageBuilder addAppButton(final String text, final Action appAction) throws KakaoLinkParseException { if (buttonType.getAndIncrement() == 1) throw new KakaoLinkParseException(KakaoLinkParseException.ERROR_CODE.DUPLICATE_OBJECTS_USED, "buttonType already added. each type is allowed at least one."); final LinkObject imageLink = LinkObject.newButton(text, appAction); linkObjList.add(imageLink); return this; } /** * ????? ???? ??????? ??? ????? ????? ????. * ?? url? ??? ????? ????? {@link #addWebButton(String, String)}??? ????. * @param text ???? ???? ???? * @throws KakaoLinkParseException ???? ?? ?????? ???? ???????? ?? ?? ?????. */ public KakaoTalkLinkMessageBuilder addWebButton(final String text) throws KakaoLinkParseException { addWebButton(text, null); return this; } /** * ??????? ??? ????? ????? ????. * ????? ???? ??????? ??? ????? ????? {@link #addWebButton(String)}??? ????. * @param text ???? ???? ???? * @param url ??? ?????? url * @throws KakaoLinkParseException ???? ?? ?????? ???? ???????? ?? ?? ?????. */ public KakaoTalkLinkMessageBuilder addWebButton(final String text, final String url) throws KakaoLinkParseException { if (buttonType.getAndIncrement() == 1) throw new KakaoLinkParseException(KakaoLinkParseException.ERROR_CODE.DUPLICATE_OBJECTS_USED, "buttonType already added. each type is allowed at least one."); final Action webAction = Action.newActionWeb(url); final LinkObject imageLink = LinkObject.newButton(text, webAction); linkObjList.add(imageLink); return this; } /** * ??? ??? ?????? ????? ????. * ????? ????? kakao[appkey]://exec?? ????????. * ??? url?? append? parameter? ?? ?? {@link #addAppLink(String, Action)}? ????. * @param text ??????? ??? ???? * @throws KakaoLinkParseException ???? ????? ?????? ???? ???????? ?? ?? ?????. */ public KakaoTalkLinkMessageBuilder addAppLink(final String text) throws KakaoLinkParseException { addAppLink(text, Action.newActionApp(null)); return this; } /** * ??? ??? ?????? ????? ????. * ????? ????? ? ?? url?? append? parameter? ?? ?? ????. * ????? ????? kakao[appkey]://exec?? ????????? {@link #addAppLink(String)}? ????. * @param text ??????? ??? ???? * @param appAction ? ?? url?? append? parameter? os, device?? ?? * @throws KakaoLinkParseException ???? ????? ?????? ???? ???????? ?? ?? ?????. */ public KakaoTalkLinkMessageBuilder addAppLink(final String text, final Action appAction) throws KakaoLinkParseException { if (linkType.getAndIncrement() == 1) throw new KakaoLinkParseException(KakaoLinkParseException.ERROR_CODE.DUPLICATE_OBJECTS_USED, "linkType already added. each type is allowed at least one."); final LinkObject appLink = LinkObject.newLink(text, appAction); linkObjList.add(appLink); return this; } /** * ????? ???? ??????? ??? ????? ?? ??? ?? * ?? url? ??? ????? ????? {@link #addWebLink(String, String)}??? ????. * @param text ??????? ??? ???? * @throws KakaoLinkParseException ???? ????? ?????? ???? ???????? ?? ?? ?????. */ public KakaoTalkLinkMessageBuilder addWebLink(final String text) throws KakaoLinkParseException { addWebLink(text, null); return this; } /** * ??????? ??? ????? type ??? ????. * ????? ???? ??????? ??? ????? ????? {@link #addWebLink(String)}??? ????. * @param text ??????? ??? ???? * @param url ??? ?????? url * @throws KakaoLinkParseException ???? ????? ?????? ???? ???????? ?? ?? ?????. */ public KakaoTalkLinkMessageBuilder addWebLink(final String text, final String url) throws KakaoLinkParseException { if (linkType.getAndIncrement() == 1) throw new KakaoLinkParseException(KakaoLinkParseException.ERROR_CODE.DUPLICATE_OBJECTS_USED, "linkType already added. each type is allowed at least one."); final Action webAction = Action.newActionWeb(url); final LinkObject webLink = LinkObject.newLink(text, webAction); linkObjList.add(webLink); return this; } /** * ???? ????? ???? ??? ?????? ?????? ????? ???? ????. * @return ?????? ????? ?? ??? * @throws KakaoLinkParseException ????? ???? ?? ?? ?? ?????. */ public String build() throws KakaoLinkParseException { try { if (linkObjList.isEmpty()) throw new KakaoLinkParseException(KakaoLinkParseException.ERROR_CODE.CORE_PARAMETER_MISSING, "addAppLink or addWebLink or addAppButton or addWebButton or addText or addImage before sendMessage."); final StringBuilder talkLinkURL = new StringBuilder(TalkProtocol.KAKAO_TALK_LINK_URL).append("?"); talkLinkURL.append(KakaoTalkLinkProtocol.LINK_VER).append("=").append(URLEncoder.encode(KakaoTalkLinkProtocol.LINK_VERSION, KakaoTalkLinkProtocol.ENCODING)).append("&"); talkLinkURL.append(KakaoTalkLinkProtocol.API_VER).append("=").append(URLEncoder.encode(KakaoTalkLinkProtocol.API_VERSION, KakaoTalkLinkProtocol.ENCODING)).append("&"); talkLinkURL.append(KakaoTalkLinkProtocol.APP_KEY).append("=").append(URLEncoder.encode(appKey, KakaoTalkLinkProtocol.ENCODING)).append("&"); talkLinkURL.append(KakaoTalkLinkProtocol.APP_VER).append("=").append(URLEncoder.encode(appVer, KakaoTalkLinkProtocol.ENCODING)).append("&"); talkLinkURL.append(KakaoTalkLinkProtocol.OBJS).append("="); final JSONArray jsonArray = new JSONArray(); for (LinkObject linkObject : linkObjList) { jsonArray.put(linkObject.createJSONObject()); } final String encodedValue = URLEncoder.encode(jsonArray.toString(), KakaoTalkLinkProtocol.ENCODING); return talkLinkURL.append(encodedValue).toString(); } catch (UnsupportedEncodingException e) { throw new KakaoLinkParseException(KakaoLinkParseException.ERROR_CODE.UNSUPPORTED_ENCODING, e); } catch (JSONException e) { throw new KakaoLinkParseException(KakaoLinkParseException.ERROR_CODE.JSON_PARSING_ERROR, e); } } }