|
—————————————————————————————————————
本篇文章介绍了在Unity中如何判断手机里是否安装了某款APP。由于最近需要实现游戏内的Line分享,进行分享前需要判断手机中是否安装Line应用,没有的话跳转Line商店下载界面,有的话跳转到Line进行分享。
Line分享按钮
Android系统手机和iOS系统手机判断方式不同,要分开来做,首先介绍iOS系统,比较简单。
——————————————————————————————————————
一、iOS判断手机是否安装Line
使用iOS系统提供的canOpenURL函数判断:
BOOL CanOpenLine(){
NSURL *lineURL = [NSURL URLWithString:@"line://"];
if ([[UIApplication sharedApplication] canOpenURL:lineURL])
{
return YES;
}else{
return NO;
}
}
这是OC代码,在unity里面怎么调用呢?首先在unity中写这个:
[System.Runtime.InteropServices.DllImport("__Internal")]
private static extern bool CanOpenLine();然后在.mm脚本里面这么做
extern "C" {
BOOL CanOpenLine(){
}
}.mm脚本放在工程里这个位置:
unity工程目录
介绍完了是否存在Line,那么怎么判断是否存在微信或其他APP呢?请注意这句:
NSURL *lineURL = [NSURL URLWithString:@"line://"];这里的“line://”叫IOS URL schemes,常用的可以百度搜,如:QQ “mqq://”,微信是 “weixin://”,网易新闻 “newsapp://”,,淘宝 “taobao://”。对,换成“weixin://”就是判断是否存在微信。对于一些不常用的软件怎么查找url schemes 呢?
找到ipa文件 改成zip解压 在playload文件下找到info.plist 用文本编辑软件打开查schemes 都能找到。如果你认为到此就完了,你太天真了!在iOS操作系统iOS9以前以上步是没问题的。在iOS9以后需要增加一步。为应用程序添加白名单:
找到Xcode工程里的“Info.plist”文件,然后打开添加以下代码就没问题了。
<key>LSApplicationQueriesSchemes</key>
<array>
<string>line</string>
</array>另外附加一个问题,如何查看APP在APP Store的链接?如line:
https://itunes.apple.com/jp/app/line/id443904275?mt=8打开App Store进入应用,右上角的分享按钮(从右往左数第二个),拷贝连接即可^_^
然后再代码里用openURL函数打开链接就会自动跳转。
查找某APP的商店链接
——————————————————————————————————————
二、Android判断是否安装Line
通过遍历所有应用程序的包名,判断是否存在line的包名,在unity里这么写:
AndroidJavaClass up = new AndroidJavaClass(&#34;com.unity3d.player.UnityPlayer&#34;);
AndroidJavaObject ca = up.GetStatic<AndroidJavaObject>(&#34;currentActivity&#34;);
AndroidJavaObject packageManager = ca.Call<AndroidJavaObject>(&#34;getPackageManager&#34;);
AndroidJavaObject appList = packageManager.Call<AndroidJavaObject>(&#34;getInstalledPackages&#34;,0);
int num = appList.Call<int>(&#34;size&#34;);
for(int i = 0; i < num; i++)
{
AndroidJavaObject appInfo = appList.Call<AndroidJavaObject>(&#34;get&#34;, i);
string packageNew = appInfo.Get<string>(&#34;packageName&#34;);
if(packageNew.CompareTo(&#34;jp.naver.line.android&#34;) == 0)
{
return true;
}
}
return false;然后直接调用即可。“jp.naver.line.android ”是日本line包名。如何查看其它APP包名呢?
1、百度可以查到大部分常用的包名,小部分查不到的包名使用apktool反编译.apk,到AndroidManifest.xml里找。
2、到Google Play商店该APP页面,以Line为例,
https://play.google.com/store/apps/details?id=jp.naver.line.androidURL中的“jp.naver.line.android”便是Package Name了。
Google商店的Line下载地址
最后总结一下,判断手机中是否安装某款APP,Android系统只需要在Unity里写代码,然后出apk包就能跑。IOS系统需要导出Xcode工程进行二次开发,如配置白名单,然后再出ipa包。当然,用自动化打包配置可以在unity build后处理中使用代码来自动配置白名单。但iOS还有另外的方法判断,也是通过检测所有APP包名中是否存在某包名的方法,有兴趣的可以研究一下。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|