swift 개발

[ swift ] 카카오스토리 공유하기.

arcjeen 2017. 7. 10. 18:25


1. 카카오스토리 공유하기 - imagePost만 사용.


1. frameWork 추가


- kakaoOpenSdk Framework   파일 프로젝트로  import


- bridge-header에 #import <KakaoOpenSDK/KakaoOpenSDK.h> 추가


2. build setting 으로가서 other Linker flags 에 -all_load 추가


     - 64 비트 프로젝트나 아이폰 OS 응용 프로그램에서 클래스가 없고 카테고리만 있는 Static 라이브러리의 객체를  적재하려고 할 때 

 정상 작동을 하지 않는 버그를 대처하기위해 ‘-all_load‘를 추가해준다.

      ‘-all_load‘ 플래그는 모든 객체 파일을 링커로 부터 적재할 수 있도록 하는 플래그이다.



3. 카카오디벨로퍼페이지 설정에서 사용자관리 off -> on을 꼭해줄것.

4. 카카오디벨로퍼 페이지에나와있는 infolist랑 urlschema 기본설정을 해준다.
 
 카카오디벨로퍼 주소
 https://developers.kakao.com/docs/ios

5. appdelegate에서 urlopen 후 callback 함수 구현해준다.

    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {

     

            if(KOSession.isKakaoAccountLoginCallback(url)){

                return KOSession.handleOpen(url);

            }

 

        return true

}


    }

6. 카카오스토리 포스팅은 로그인세션이 연결되어있을경우 사용가능하기때문에 로그인세션을 열어줘야한다.




class UsingKakao{

    

    /**

     * 카카오톡 로그인.

     */

    

    class func kakaoLogin() -> Bool{

        

        var returnValue : Bool = true;

        

        //카카오톡 로그인창열기

        KOSession.shared().open(completionHandler:){ error in

            

            guard KOSession.shared().isOpen() else{

                print("로그인 취소")

                returnValue = false;

                return

            }

            

            if((error) != nil){

                returnValue = false

            }else{

                print("로그인 성공");

                returnValue = true;

            }

        }

        

        return returnValue;

        

    }

    

    

    /**

     * 카카오스토리 이용자인지 판별

     */

    

    class func checkKaKaoStoryUser(handler:@escaping (Bool) -> () ) {

        

        var returnValue : Bool = false;

        

        KOSessionTask.storyIsStoryUserTask(completionHandler:){ isStoryUser, error in

            

            if(!(error != nil)){

                

                if(isStoryUser){

                    print("story user")

                    returnValue = true;

                }else{

                    print("not storyuser");

                    returnValue = false;

                }

                

            }else{

                

            }

            

            handler(returnValue);

        }

    }

    

    

    /**

     *  카카오스토리 포스팅 with content image  permission으로 친구공개(KOStoryPostPermissionFriend) 또는 전체공개(KOStoryPostPermissionPublic) 또는 나만보기(KOStoryPostPermissionOnlyMe). default KOStoryPostPermissionPublic. optional.

     */

    

    class func postBabyJournalToKakaoStory(content : String, permission : KOStoryPostPermission, imageArr : NSArray){

        

        //카카오유저인지 체크

        UsingKakao.checkKaKaoStoryUser(){ result in

            

            //이용자가 아니라면 리턴.

            guard result else{

                return;

            }

            

            //카카오스토리 설치 확인 없으면 앱스토어로 이동.

            guard checkKakaoStoryInstalledUserDevice() else{

                return

            }

            

            //이미지 업로드 멀티파트리퀘스트

            KOSessionTask.storyMultiImagesUploadTask(withImages: imageArr as! [UIImage]){ imageUrls , error in

                

                guard error == nil else {

                    return

                }

                

                //포스트내용 post

                KOSessionTask.storyPostPhotoTask(withImageUrls: imageUrls, content: content, permission: permission, sharable: false, androidExecParam: nil,

                                                 iosExecParam: nil){ post, error in

                                                    

                                                    if (!(error != nil)) {

                                                        // 성공

                                                        print("postId : \(post?.id)");

                                                        

                                                        //카카오스토리로 이동

                                                        let kakaoStoryUrl = URL.init(string: "kakaostory://");

                                                        UIApplication.shared.open(kakaoStoryUrl!, options: [:], completionHandler: nil);

                                                        

                                                    } else {

                                                        // 실패

                                                        print("failed to post photo.");

                                                    }

                }

                

            }

            

        }

        

    }

    

    /**

     * 카카오스토리 설치유무 확인

     */

    

    class func checkKakaoStoryInstalledUserDevice() -> Bool{

        

        var returnValue = false;

        

        //카카오앱키

        let kakaoAppKey = "카카오앱키";

        

        // 실행 URL

        let kakaoStoryUrl = URL.init(string: "kakao\(kakaoAppKey)://kakaostory");

        

        //어플리케이션 실행확인

        if (!(UIApplication.shared.canOpenURL(kakaoStoryUrl!))) {


            //어플리케이션이 설치되어있지않다면 앱스토어로 이동

            let url  = URL(string: "https://itunes.apple.com/kr/app/%EC%B9%B4%EC%B9%B4%EC%98%A4%EC%8A%A4%ED%86%A0%EB%A6%AC/id486244601?mt=8")

            UIApplication.shared.open(url!, options: [:], completionHandler: nil);

            

        }else{

            returnValue = true;

        }

        

        return returnValue;

    }


}



소셜같은경우는 별도의 클래스를 만들어 관리를해주는것이 편리함.



7.사용


if (KOSession.shared().isOpen()){

            UsingKakao.postBabyJournalToKakaoStory(content: "test", permission: KOStoryPostPermission.onlyMe, imageArr: [journalimageView.image!]);

        }else{

            UsingKakao.kakaoLogin();

        }