unity 引入 ios 第三方sdk

unity开发中ios应用时,要想成功引入第三方sdk,首先得知道c#与object-c如何交互。这里有篇博文介绍了unity开发中,如何实现c#与oject-c互相调用。

http://blog.csdn.net/u012085988/article/details/17761433


下面介绍下unity开发ios应用中,引入第三方sdk的流程:

1、将sdk中要用到的接口用C语言进行封装。因为上你们那篇博文提到了c#与object-c交互,要通过中间语言----C语言实现。

2、将封装好的C函数放在.mm文件中,然后将这个mm文件放到unity工程目录下的Assets/Plugins/IOS目录下。

3、按照上面那篇博文介绍的方法,引用第1步中封装的C函数。

4、用unity导出xcode工程,因为发布app时要用xcode来打包签名。

5、在xcode中引入第三方SDK。到这里应该都没问题了,因为做个ios开发的基本都会用xcode;且一般sdk的使用手册也都介绍了如何在xcode工程中引入sdk。

6、编译调试,打包发布。


下面以百度Frontia为例,实现社会化分享功能:

1、新建unity工程。在Assets下新建如下目录结构:Plugins/IOS/

2、新建share.mm文件,放在1中新建的目录下。定义一个C函数share(),文件中加入以下代码。

extern "C"  
  
{  
  
    void share(char* title, char* msg, char* url)  
  
    {  
  
        // 先把函数的格式定好(规定好返回值和参数表,供c#使用
    }  
  
}  


3、新建c#脚本,绘制一个按钮,用于测试分享功能。脚本内容如下:

using UnityEngine;  
using System.Collections;  
using System.Runtime.InteropServices;  
public class testscript : MonoBehaviour {    
  
    [DllImport("__Internal")]  
    private static extern void share(string title, string msg, string url);  
  
    void OnGUI()  
    {  
        if (GUI.Button (new Rect (100, 100, 100, 50), "test share")) {  
            share("omytitle", "omymsg", "www.baidu.com");          
        }  
    }  
}  

关于这两段代码有疑问的童鞋,需要先看看文章开头提到的那篇博文。

4、导出xcode工程。

5、按照百度Frontia官方文档,将Fraontia-sdk引入xcode中。

具体参见官网http://developer.baidu.com/wiki/index.php?title=docs/frontia/guide-ios/overview

6、找到步骤2中新建的.mm文件(注意该文件还在unity工程中,xcode工程中虽然也有一个这样的文件,但此文件只是一个“替身”,不能修改。所以我们要修改的是unity工程下的Plugins/IOS/share.mm文件),修改文件如下:

#import 



#define APP_KEY @"iG2ffdkYaq8kIjrSfvjMcUrf"


extern "C"

{

    void test(char* title, char* msg, char* url)

    {

        NSString* nstitle = [[NSString alloc] initWithUTF8String:title];

        NSString* nsmsg = [[NSString alloc] initWithUTF8String:msg];

        NSString* nsurl = [[NSString alloc] initWithUTF8String:url];

        

        FrontiaShare *share = [Frontia getShare];

        

        //授权取消回调函数

        FrontiaShareCancelCallback onCancel = ^(){

            NSLog(@"OnCancel: share is cancelled");

        };

        

        //授权失败回调函数

        FrontiaShareFailureCallback onFailure = ^(int errorCode, NSString *errorMessage){

            NSLog(@"OnFailure: %d  %@", errorCode, errorMessage);

        };

        

        //授权成功回调函数

        FrontiaMultiShareResultCallback onResult = ^(NSDictionary *respones){

            NSLog(@"OnResult: %@", [respones description]);

        };

        

        FrontiaShareContent *content=[[FrontiaShareContent alloc] init];

        content.url = nsurl;

        content.title = nstitle;

        content.description = nsmsg;

        content.imageUrl = @"http://apps.bdimg.com/developer/static/04171450/developer/images/icon/terminal_adapter.png";

        

        NSArray *platforms = @[FRONTIA_SOCIAL_SHARE_PLATFORM_SINAWEIBO,FRONTIA_SOCIAL_SHARE_PLATFORM_QQWEIBO,FRONTIA_SOCIAL_SHARE_PLATFORM_QQ,FRONTIA_SOCIAL_SHARE_PLATFORM_RENREN,FRONTIA_SOCIAL_SHARE_PLATFORM_KAIXIN,FRONTIA_SOCIAL_SHARE_PLATFORM_EMAIL,FRONTIA_SOCIAL_SHARE_PLATFORM_SMS];

        

        [share showShareMenuWithShareContent:content menuStyle:FRONTIA_SOCIAL_SHARE_STYLE_LIGHT displayPlatforms:platforms supportedInterfaceOrientations:UIInterfaceOrientationMaskPortrait isStatusBarHidden:NO cancelListener:onCancel failureListener:onFailure resultListener:onResult];

    }

}


7、appDelegate的OpenURL中加入如下代码

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    //SSO或者分享的回调
    return [[Frontia getShare] handleOpenURL:url];
}


8、编译运行,真机调试。


关于分享菜单中,按钮点击没反应问题。

需要在Build Setting中的other Linker Flags 加上 -ObjC 标志



你可能感兴趣的:(unity)