zoukankan      html  css  js  c++  java
  • unity 引入 ios 第三方sdk

    原地址:http://blog.csdn.net/u012085988/article/details/17785023

    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(),文件中加入以下代码。

    [objc] view plaincopy
     
    1. extern "C"    
    2.     
    3. {    
    4.     
    5.     void share(char* title, char* msg, char* url)    
    6.     
    7.     {    
    8.     
    9.         // 先把函数的格式定好(规定好返回值和参数表,供c#使用  
    10.     }    
    11.     
    12. }    



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

    [csharp] view plaincopy
     
    1. using UnityEngine;    
    2. using System.Collections;    
    3. using System.Runtime.InteropServices;    
    4. public class testscript : MonoBehaviour {      
    5.     
    6.     [DllImport("__Internal")]    
    7.     private static extern void share(string title, string msg, string url);    
    8.     
    9.     void OnGUI()    
    10.     {    
    11.         if (GUI.Button (new Rect (100, 100, 100, 50), "test share")) {    
    12.             share("omytitle", "omymsg", "www.baidu.com");            
    13.         }    
    14.     }    
    15. }    

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

    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文件),修改文件如下:

    [objc] view plaincopy
     
    1. #import <Frontia/Frontia.h>  
    2.   
    3.   
    4.   
    5. #define APP_KEY @"iG2ffdkYaq8kIjrSfvjMcUrf"  
    6.   
    7.   
    8. extern "C"  
    9.   
    10. {  
    11.   
    12.     void test(char* title, char* msg, char* url)  
    13.   
    14.     {  
    15.   
    16.         NSString* nstitle = [[NSString alloc] initWithUTF8String:title];  
    17.   
    18.         NSString* nsmsg = [[NSString alloc] initWithUTF8String:msg];  
    19.   
    20.         NSString* nsurl = [[NSString alloc] initWithUTF8String:url];  
    21.   
    22.           
    23.   
    24.         FrontiaShare *share = [Frontia getShare];  
    25.   
    26.           
    27.   
    28.         //授权取消回调函数  
    29.   
    30.         FrontiaShareCancelCallback onCancel = ^(){  
    31.   
    32.             NSLog(@"OnCancel: share is cancelled");  
    33.   
    34.         };  
    35.   
    36.           
    37.   
    38.         //授权失败回调函数  
    39.   
    40.         FrontiaShareFailureCallback onFailure = ^(int errorCode, NSString *errorMessage){  
    41.   
    42.             NSLog(@"OnFailure: %d  %@", errorCode, errorMessage);  
    43.   
    44.         };  
    45.   
    46.           
    47.   
    48.         //授权成功回调函数  
    49.   
    50.         FrontiaMultiShareResultCallback onResult = ^(NSDictionary *respones){  
    51.   
    52.             NSLog(@"OnResult: %@", [respones description]);  
    53.   
    54.         };  
    55.   
    56.           
    57.   
    58.         FrontiaShareContent *content=[[FrontiaShareContent alloc] init];  
    59.   
    60.         content.url = nsurl;  
    61.   
    62.         content.title = nstitle;  
    63.   
    64.         content.description = nsmsg;  
    65.   
    66.         content.imageUrl = @"http://apps.bdimg.com/developer/static/04171450/developer/images/icon/terminal_adapter.png";  
    67.   
    68.           
    69.   
    70.         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];  
    71.   
    72.           
    73.   
    74.         [share showShareMenuWithShareContent:content menuStyle:FRONTIA_SOCIAL_SHARE_STYLE_LIGHT displayPlatforms:platforms supportedInterfaceOrientations:UIInterfaceOrientationMaskPortrait isStatusBarHidden:NO cancelListener:onCancel failureListener:onFailure resultListener:onResult];  
    75.   
    76.     }  
    77.   
    78. }  



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

    [objc] view plaincopy
     
    1. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation  
    2. {  
    3.     //SSO或者分享的回调  
    4.     return [[Frontia getShare] handleOpenURL:url];  
    5. }  



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

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

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

  • 相关阅读:
    制作自适应布局的模块及框架(转载)
    从今天起开始写博了
    工作中碰到的css问题解决方法
    标题写个什么好呢
    快速编写HTML(Zen conding)
    2013年1月21日记事
    opc 方面研究
    关于 部署方面研究 Visual Studio 2013
    intel AVX指令集
    关于 返回数据类型 后 加& 的作用
  • 原文地址:https://www.cnblogs.com/123ing/p/3861011.html
Copyright © 2011-2022 走看看