Unity3D和IOS的交互教程——通过URL启动APP并传递参数

最近项目(麻将手游)中遇到这样一个需求:在创建一个私人房后通过ShareSDK分享一个连接到微信,点击这个连接后设备将跳转至下载页面或是启动APP并直接进入到指定房间。由于目前没有原生IOS的开发经验,在发挥面向百度程序员的特长之后,写出来下面的方案并用于项目中,实测可行,特来分享,希望不足之处还请指出;

工程环境:Unity 5.2.2 + Xcode7.3.1

1.唤醒APP并传递参数

在Unity发布出的Xcode工程中按下图进行设置;

URL Schemes位置填写的内容可以理解为你给你的APP起的名字,当其他人喊你的名字后你将会回应(PS.感兴趣的同学可以在Safari里面输入 weixin://dl/profile ,可以看到世界上编程最厉害的人),当然,你可以有很多名字或是外号,你都可以添加进去;

设置完成后将会在下图位置看到你刚才给APP“起的名字”;


如果此时真机调试,我们将能通过 WarTree:// 启动这个APP;

WarTree://Content 将启动APP并将这一整句传进APP(Content处为想传递的参数,我在我的项目里传递的是Mahjong://pid=0&roomID=0&time=0);

2.接收URL传递的参数

让我们回到Xcode工程里,找到下图中的UnityAppController.mm脚本;


[objc]   view plain  copy
  1. // 添加这句代码,它负责向Unity传递参数;  
  2. extern void UnitySendMessage(const charchar *, const charchar *, const charchar *);  
  3. // 添加这个全局变量,用于存储APP启动时URL传递的参数;  
  4. // 由于需要等游戏的主要模块加载完毕后再向Unity发送消息,所以此处用了这个全局变量;等待游戏加载完后通知IOS;  
  5. NSString *URLString = @"";  
  6. // 此处是个坑,IOS9以后的系统走的是这个接口,而我在Unity5.2.2中发布的Xcode工程只有下面那个接口;  
  7. - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options  
  8. {  
  9.     URLString = [url absoluteString];  
  10.     // 针对唤醒APP的情况传递参数;  
  11.     UnitySendMessage( "Main Camera", [@"OpenIosApp" UTF8String], [URLString UTF8String] );  
  12.     return YES;  
  13. }  
  14. // 这个是我发布成Xcode后自带的,里面的内容不只有这些,只需加上前两行即可;  
  15. - (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation  
  16. {  
  17.     URLString = [url absoluteString];  
  18.     // 针对唤醒APP的情况传递参数;  
  19.     UnitySendMessage( "Main Camera", [@"OpenIosApp" UTF8String], [URLString UTF8String] );  
  20.     return YES;  
  21. }  

3.IOS发送消息给Unity

经过上一步我们通过UnitySendMessage即向Unity发送了信息,它有三个参数;
如果我在一个名字为Script.cs的脚本里写了一个名字为Function的方法,并且这个脚本挂载了一个名字为GameObject的物体上;
那么就可以在Xcode的脚本里这么写:UnitySendMessage(GameObject,Function,"我来传话啦");
结合上文,我此处应该在挂在Main Camera上的某个脚本里写如下函数;
[csharp]   view plain  copy
  1. public void OpenIosApp( string parmaters )  
  2. {  
  3.     GameDebug.Log( "openUrl传过来的字符串为: " + parmaters );  
  4. }  

4.Unity发送消息给IOS

在Unity中写如下代码;
[csharp]   view plain  copy
  1. using System.Runtime.InteropServices;  
  2.   
  3. [DllImport("__Internal")]  
  4. private static extern void _GetURLString ();  
  5. // 当游戏模块加载完毕后调用;  
  6. public static void GetURLString()  
  7. {  
  8.     _GetURLString();  
  9. }  
回到刚才Xcode工程的脚本中写如下代码;
[objc]   view plain  copy
  1. extern "C"  
  2. {  
  3.     void _GetURLString();  
  4. }  
  5.   
  6. void _GetURLString()  
  7. {  
  8.     // 针对启动APP的情况传递参数;  
  9.     UnitySendMessage( "Main Camera", [@"OpenIosApp" UTF8String], [URLString UTF8String] );  
  10.     // 清空,防止造成干扰;  
  11.     URLString = @"";  
  12. }  


至此,Unity和IOS之间的互相通讯已经建立成功。



转载至:https://blog.youkuaiyun.com/SugerIsComing/article/details/48340199

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值