unity(接入第三方sdk)

unity3d接入ANDROID相关SDK请参考:http://blog.csdn.net/yang8456211/article/details/51331358
unity3d接入IOS相关SDK
下面以微信分享sdk为例介绍:
首先就是在c#这边定义接口

using UnityEngine;
using LitJson;
using System.Runtime.InteropServices;

public class ShareMgr : MonoBehaviour {

    //声明unity--to--ios的函数
#if UNITY_IOS
    [DllImport ("__Internal")]  
private static extern void RegisterWeChat(string wxAppID);
[DllImport ("__Internal")]  
private static extern void ShareWithWeChat(string content);
#endif

    ///
    /// 注册的微信id
    ///
    string wxAppID = "test6668888";

    ///
    /// 分享之后的lua回调
    ///
    System.Action luaResponseCall;

    ///
    /// 默认分享内容
    ///
string defaultContent="666888";


    public void ShareWeChat(string content)
    {
        if (string.IsNullOrEmpty(content))
        {
            content = defaultContent;
        }

#if UNITY_IOS
        ShareWithWeChat(content);
#endif

    }

    ///
    /// 注册分享之后的回调
    ///
    ///
    public void RegLuaResponse(System.Action luaResponseCall)
    {
        this.luaResponseCall = luaResponseCall;
    }

    ///
    /// 删除注册的回调
    ///
    public void UnRegLuaResponse()
    {
        luaResponseCall = null;
    }


    void Awake()
{
        this.name = "ShareMgr";
        DontDestroyOnLoad(gameObject);
        Init();
    }


void Init()
{

#if UNITY_IOS
        RegisterWeChat(wxAppID);
#elif UNITY_ANDROID
        AndroidJavaClass jc = new Android;
Android;
jo.Call("RegisterWeChat", wxAppID);
#endif

    }
    void ShareCallResponse(int state)
{
        if (luaResponseCall != null)
        {
            luaResponseCall(state);
        }
}
   
}

再者就是调用oc的方法:

//
//  ShareMgr.h
//
//  Copyright . All rights reserved.
//

#import

#import "WXApi.h"
#import "AppDelegateListener.h"

typedef NS_ENUM(int,ErrorCode) {
   ERROR_CODE_NO_INSTALL=-101,//没有安装微信客户端,分享失败!
   ERROR_CODE_SHARE_SUCCESS=0,//分享成功
   ERROR_CODE_SHARE_CANCEL=-2,//分享失败
   ERROR_CODE_SHARE_FAIL=-3,//分享失败
};

@interface ShareMgr : NSObject
{

}

@property (nonatomic, strong) UIActivityIndicatorView *indicatorView;
@property (nonatomic) BOOL waitingResponse;
@property (nonatomic) const char*targetMgr;
@property (nonatomic) const char*targetMethod;

-(void)ShareWithWeChat:(NSString*)content;


+ (instancetype)Instance;
@end



//
//  ShareMgr.mm
//
//  Copyright . All rights reserved.
//
#import
#import "ShareMgr.h"
#include "UnityAppController.h"

#if defined (__cplusplus)
extern "C" {
#endif
    extern void ShareWithWeChat(const char* content);
    extern void RegisterWeChat(const char* wxAppID);
#if defined (__cplusplus)
}
#endif


@implementation ShareMgr

static ShareMgr*_instance=NULL;

-(id)init
{
    if ((self = [super init]))
    {
        self.targetMgr = [@"ShareMgr" UTF8String ];
        self.targetMethod = [@"ShareCallResponse" UTF8String];
    }
    return self;
}

+ (instancetype)Instance
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance = [[ShareMgr alloc] init];
        UnityRegisterAppDelegateListener(_instance);
    });
    return _instance;
}

-(void)ShareWithWeChat:(NSString*)content
{
    if (self.waitingResponse){return;}
    if([WXApi isWXAppInstalled])
    {
        WXMediaMessage *message = [WXMediaMessage message];
        [message setThumbImage:[UIImage imageNamed:@"[email protected]"]];
        
        WXImageObject *ext = [WXImageObject object];
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSMutableString *StringFullPath = [[NSMutableString alloc] initWithString:@""];

        [StringFullPath appendString:documentsDirectory];
        [StringFullPath appendString:@"/temp_capture_screen.png"];

        ext.imageData = [NSData dataWithContentsOfFile:StringFullPath];
        UIImage* image = [UIImage imageWithData:ext.imageData];
        ext.imageData = UIImagePNGRepresentation(image);
        
        message.mediaObject = ext;
        message.description = content;
        
        SendMessageToWXReq* req = [[SendMessageToWXReq alloc] init];
        req.bText = NO;
        req.message = message;
        req.scene = WXSceneTimeline;
        
        [WXApi sendReq:req];
        
        
        if (self.indicatorView)
        {
            [self.indicatorView startAnimating];
            [self.indicatorView setHidesWhenStopped:YES];
        }
        else
        {
            dispatch_async(dispatch_get_main_queue(), ^{
                if (!self.indicatorView) {
                    self.indicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
                    
                    
                    self.indicatorView.center = GetAppController().rootView.center;
                    [GetAppController().rootView addSubview:self.indicatorView];
                    self.indicatorView.color = [UIColor whiteColor];
                    
                    [self.indicatorView startAnimating];
                    [self.indicatorView setHidesWhenStopped:YES];
                }
            });
        }
        self.waitingResponse = YES;
    }
    else
    {
        UnitySendMessage([self targetMgr], [self targetMethod] ,[[NSString stringWithFormat:@"%i" ,(int)ERROR_CODE_NO_INSTALL] UTF8String]);
        self.waitingResponse = NO;
    }
        
}

#pragma mark - WXApiDelegate 
-(void) onResp:(BaseResp*)resp
{
    [self.indicatorView stopAnimating];
    
   

    int errorCode ;
    if (resp.errCode == ERROR_CODE_SHARE_SUCCESS) 
    {
        errorCode = ERROR_CODE_SHARE_SUCCESS;
    }
    else if(resp.errCode == ERROR_CODE_SHARE_CANCEL)
    {
        errorCode=ERROR_CODE_SHARE_CANCEL;
    }
    else
    {
        errorCode=ERROR_CODE_SHARE_FAIL;
    }
    
    if([resp isKindOfClass:[SendMessageToWXResp class]])
    {
        UnitySendMessage([self target], [self targetMethod], [[NSString stringWithFormat:@"%i" ,errorCode] UTF8String]);
        self.waitingResponse = NO;
    }
}

#pragma mark - AppDelegateListener 
-(void) willEnterForeground:(NSNotification *)notification
{
    
}

-(void) didFinishLaunching:(NSNotification *)notification
{
    
}

-(void) didEnterBackground:(NSNotification *)notification
{
    
}

-(void) didReceiveRemoteNotification:(NSNotification *)notification
{
    
}

-(void) didReceiveLocalNotification:(NSNotification *)notification
{
    
}

-(void) didRegisterForRemoteNotificationsWithDeviceToken:(NSNotification *)notification
{
    
}

-(void) onOpenURL:(NSNotification *)notification
{
    
}

@end

#if defined(_cplusplus)
extern "C"{
#endif

    void ShareWithWeChat(const char* content)
    {
        NSString *s = [[NSString alloc] initWithUTF8String:content];
        [[ShareMgr Instance] ShareWithWeChat:s];
    }
    
    
    void RegisterWeChat(const char* wxAppID)
    {
        [ShareMgr Instance];
        NSString *appId = [[NSString alloc] initWithUTF8String:wxAppID];
        // 微信注册
        [WXApi registerApp:appId];
        
    }
    
#if defined(_cplusplus)
}
#endif

你可能感兴趣的:(unity(接入第三方sdk))