一、打包成Xcode项目后,在目录中找到UnityAppController.mm文件,打开搜索到openurl就是这里接受其他应用传送过来的url的,听说会有不同的版本。新建一个全局的变量存储这个Url,然后在需要的时候将这个Url传递给Unity那边进行解析处理。
//extern void UnitySendMessage(const char *,const char *,const char *); static NSString *URLString = @"";//声明变量保存Url - (BOOL)application:(UIApplication*)application openURL:(NSURL*)url options:(NSDictionary *)options { URLString = [url absoluteString]; //UnitySendMessage("Gameobject",[@"method" UTF8String],[URLString UTF8String]); return YES; } - (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation { NSMutableArray* keys = [NSMutableArray arrayWithCapacity: 3]; NSMutableArray* values = [NSMutableArray arrayWithCapacity: 3]; #define ADD_ITEM(item) do{ if(item) {[keys addObject:@#item]; [values addObject:item];} }while(0) ADD_ITEM(url); ADD_ITEM(sourceApplication); ADD_ITEM(annotation); #undef ADD_ITEM NSDictionary* notifData = [NSDictionary dictionaryWithObjects: values forKeys: keys]; AppController_SendNotificationWithArg(kUnityOnOpenURL, notifData); //这方法次行上面的都是打包都有的了,新加下面一行就行了 URLString = [url absoluteString]; //UnitySendMessage("Gameobject",[@"method" UTF8String],[URLString UTF8String]); return YES; } extern "C" { char* _GetURLString();//声明一个C语言方法,提供给Unity使用 } char* _GetURLString() { //将保存好的Url转换为字符串给Unity char *x = (char *)malloc(strlen([URLString UTF8String]) + 1); strcpy(x, [URLString UTF8String]); URLString = @""; return x; }
在Unity中声明并使用_GetURLString方法
#if UNITY_IOS && !UNITY_EDITOR [DllImport("__Internal")] public static extern string _GetURLString(); #endif public string GetSchemePars() { string data = ""; #if UNITY_ANDROID && !UNITY_EDITOR data = mJavaObject.Call<string>("GetSchemePars"); #elif UNITY_IOS && !UNITY_EDITOR data = _GetURLString();//这里使用。。。 #endif return data; }
二、在Xcode上设置可以唤醒这个app的URL Scheme,点击项目选择Info->URL Types,新加一个,编写一个唯一的Identifier,重点设置URL Scheme。
这样就可以通过头为zfzx://来唤醒app了,后面可以添加其他东西,具体百度。