[ swift ] 카카오스토리 공유하기.
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‘ 플래그는 모든 객체 파일을 링커로 부터 적재할 수 있도록 하는 플래그이다.
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();
}