레이블이 IOS인 게시물을 표시합니다. 모든 게시물 표시
레이블이 IOS인 게시물을 표시합니다. 모든 게시물 표시

2014년 11월 6일 목요일

Unity_IOS 에서 Screen Capture한 이미지를 Social.framework를 활용하여 공유하는 방법정리.

Explain.


IOS 에서 Screen Capture한 이미지를 Social.framework를 활용하여 공유하는 방법정리.


Sequence.


1. Application.CaptureScreenShot() 으로 캡쳐진행.

2. 위의 이미지를 가지고 IOS의 social.framwork를 활용하여 쉐어진행.


In Xcode

아래 2파일[SocialHelper.h , mm]을 현재 프로젝트의 Plugin/IOS 위치 시킨다.

SocialHelper.h
#import &ltFoundation/Foundation.h>

@interface SocialHelper : NSObject
{
    
}

+(void)ImageToTwitter:(NSString*)filePath;

+(void)ImageToFaceBook:(NSString*)filePath;

@end

SocialHelper.mm
#import "SocialHelper.h"

#import &ltSocial/Social.h>
#import &ltUIKit/UIKit.h>
#import &ltUnityAppController.h>

#pragma mark - Unity methods

@implementation SocialHelper


+ (void) ImageToTwitter:(NSString *) filePath
{
    UIViewController *rootViewController = [GetAppController() rootViewController];
    UIImage *image = [UIImage imageWithContentsOfFile:filePath];
    
    if([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]){
        SLComposeViewController *mySLComposeSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
        
        [mySLComposeSheet setInitialText:@"Let's Play Together!"];
        [mySLComposeSheet addImage:image];
        [mySLComposeSheet addURL:[NSURL URLWithString:@"https://myurl.com"]];
        [mySLComposeSheet setCompletionHandler:^(SLComposeViewControllerResult result) {
            switch (result) {
                case SLComposeViewControllerResultCancelled:
                    NSLog(@"Twtitter - POST Cancel");
                    break;
                    
                case SLComposeViewControllerResultDone :
                    NSLog(@"Twitter - Post Success");
                    break;
                    
                default:
                    break;
            }
        }];
        [rootViewController presentViewController:mySLComposeSheet animated:YES completion:nil];
    }
}

+ (void) ImageToFaceBook:(NSString *) filePath
{
    UIViewController *rootViewController = [GetAppController() rootViewController];
    UIImage *image = [UIImage imageWithContentsOfFile:filePath];
    
    if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]){
        SLComposeViewController *mySLComposeSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
        
        [mySLComposeSheet setInitialText:@"Let's Play Together!"];
        [mySLComposeSheet addImage:image];
        [mySLComposeSheet addURL:[NSURL URLWithString:@"https://myurl.com"]];
        [mySLComposeSheet setCompletionHandler:^(SLComposeViewControllerResult result) {
            switch (result) {
                case SLComposeViewControllerResultCancelled:
                    NSLog(@"Facebook - POST Cancel");
                    break;
                    
                case SLComposeViewControllerResultDone :
                    NSLog(@"Facebook - Post Success");
                    break;
                    
                default:
                    break;
            }
        }];
        [rootViewController presentViewController:mySLComposeSheet animated:YES completion:nil];
    }
}

extern "C" {
    void PostImageToTwitter(const char * filePath)
    {
        NSLog(@"Share Iamge Path : %@", [NSString stringWithUTF8String:filePath]);
        [SocialHelper ImageToTwitter:[NSString stringWithUTF8String:filePath]];
    }
    
    void PostImageToFacebook(const char * filePath)
    {
        NSLog(@"Share Iamge Path : %@", [NSString stringWithUTF8String:filePath]);
        [SocialHelper ImageToFaceBook:[NSString stringWithUTF8String:filePath]];
    }
}

@end



In Unity

using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;


public enum SocialType : int
{
    Twitter,
    Facebook
}

public class SocialHelper : MonoBehaviour
{

    public static IEnumerator PostImage(SocialType type)
    {
        string fileName = getCaptureFileName();

        Application.CaptureScreenshot(fileName);

        yield return new WaitForSeconds(1.0f);

        if (type == SocialType.Facebook)
            PostImageToFacebook(string.Format("{0}/{1}", Application.persistentDataPath, fileName));

        if (type == SocialType.Twitter)
            PostImageToTwitter(string.Format("{0}/{1}", Application.persistentDataPath, fileName));
    }

    static string getCaptureFileName()
    {
        return string.Format("capture_{0}.png", System.DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss"));
    }



    [DllImport("__Internal")]
    static extern void PostImageToTwitter(string filePath);

    [DllImport("__Internal")]
    static extern void PostImageToFacebook(string filePath);

}

SocialHelper.PostImage(SocialType.Facebook); // 이후 이런식으로 메소드를 호출시 공유가 진행.



Reference.


IOS 에서 Screen Capture한 이미지 Camera Roll에 등록하기.

Social.Framework


2014년 10월 31일 금요일

Unity for IOS_Screen Capture한 이미지 카메라롤 에 등록하기.


Explan.

IOS에서 Application.CaptureScreenShot(path) 메소드를 사용할경우
캡처는 진행되나 해당 app 의 document폴더로 들어가서 카메라 롤에서 확인할수가 없다.
이를 등록해주는 방법 포스팅.


CaptureHelper.h
#import <Foundation/Foundation.h>

@interface CaptureHelper : NSObject

+(CaptureHelper *)sharedInstancs;

@end
CaptureHelper.mm
#import "CaptureHelper.h"

static CaptureHelper * captureHelper = [CaptureHelper sharedInstancs];

@implementation CaptureHelper : NSObject

+ (void)initialize{
    if(captureHelper == nil)
        captureHelper = [[CaptureHelper alloc] init];
}

+ (CaptureHelper *)sharedInstancs{
    return captureHelper;
}

- (id)init{
    if(captureHelper != nil){
        return  captureHelper;
    }
    
    self = [super init];
    if(self){
        captureHelper = self;
    }
    
    return self;
}


- (NSString *)getDocumentDirectory {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    
    return [paths objectAtIndex:0];
}

@end

extern "C"{
    void CaptureToCameraRoll(const char *fileName)
    {
        NSString *file = [NSString stringWithUTF8String:(fileName)];
        NSString *filePath = [[captureHelper getDocumentDirectory] stringByAppendingString:file];
        UIImage *image = [[UIImage alloc] initWithContentsOfFile:filePath];
        
        UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
    }
}

위 2개의 파일을 생성후 Plugin/IOS 폴더에 위치 그후

how to used.
[DllImport("__Internal")]
public static extern void CaptureToCameraRoll(String fileName);

// 그이후 스크린 캡처 진행시.

Application.CaptureScreenShot(path);
CaptureToCameraRoll(string.Format("/{0}",path));


이후 카메라롤에서 캡쳐된 이미지를 확인하실수 있다.