unity-使用URL在手机上打开不同APP(附带一些APP的URL、包名)

记录一下,供自己查阅,帮到其他人更好。是自己的总结,仅供参考。

主要逻辑,检测手机上是否有APP,如果有,根据URL地址打开APP,如果没有,URL打开网页。

先附上app安卓包名、URL链接(前包名、后URL,URL链接可直接在IOS手机浏览器输入后打开验证):

抖音:                com.ss.android.ugc.aweme                         snssdk1128://

微信:                com.tencent.mm                                          weixin://

哔哩哔哩:         tv.danmaku.bili                                             bilibli://   

微博:                com.sina.weibo                                            weibo://    

youtube:         com.google.android.youtube                        youtube://

facebook:       com.facebook.katana                                   fb://

twitter:            com.twitter.android                                       twitter://

discord:          com.discaord                                                discord://

PS:如果想打开APP特定界面(例如直接打开某一APP的个人界面),需要打开的是每个APP对应的URL特殊路径,这个可以在网络上查找对应APP的URL路径格式(一般是开发者文档)。

一、安卓

安卓比较简单直接,直接使用C#代码调用Android代码,检测是否存在包名,如果有打开APP

//检测是否手机上安装了对应包名的APP

bool CheckAndroidContainPackage(string   packageName)

{

        AndroidJavaClass     up = new AndroidJavaClass("com.unity3d.player.UnityPlayer");

        AndroidJavaObject   ca  = up.GetStatic<AndroidJavaObject> ("currentActivity");

        AndroidJavaObject   packageManager = ca.Call<AndroidJavaObject>("getPackageManager");

        AndroidJavaObject   appList = packageManager.Call<AndroidJavaObject>("getInstalledPackages",0);

       int num = appList.Call<int>("size");

       for(int i = 0;i<num;i++)

        {

                AndroidJavaObject   appInfo = appList.Call<AndroidJavaObject>("get",i);

                string packageNew = appInfo.Get<string>("packageName");

                if(packageNew.CompareTo(packageName) == 0)

                {

                         return true;

                }

        }

        return false;

}

//通过包名和URL打开APP

void OpenPackage (string packName , string path)

{

        AndroidJavaClass     up = new AndroidJavaClass("com.unity3d.player.UnityPlayer");

        AndroidJavaObject   ca  = up.GetStatic<AndroidJavaObject> ("currentActivity");

        try

        {

                using (AndroidJavaObject   joPackageManager = ca.Call<AndroidJavaObject>("getPackageManager");)

                {

                        using(AndroidJavaObject   jointent  = joPackageManager.Call<AndroidJavaObject>("getLaunchIntentForPackage"),packName))

                        if(null != joIntent)

                        {

                              AndroidJavaClass  intentClass = AndroidJavaClass("android.content.Intent");

                              AndroidJavaObject intentObject = AndroidJavaObject("android.content.Intent")

                              intentObject.Call<AndroidJavaObject>("setAction",intentClass.GetStatic<string>("ACTION_VIEW"));

                             

                              AndroidJavaClass  uriClass = AndroidJavaClass("android.net.Uri");

                              AndroidJavaObject uriObject = uri.Call<AndroidJavaObject>("parse",path);

                              if(uriObject != null)

                                {

                                        intentObject.Call<AndroidJavaObject>("setData",uriObject);

                                        intentObject.Call<AndroidJavaObject>("setPackage",packName);

                                        activity.Call("startActivity",intentObject);

                                }

                        }

                }

        }

}

二、IOS

IOS分几部分(主要是检测是否安装了对应APP),首先需要配置白名单,一般是plist文件(不配置一些APP可能会报错),然后需要在.mm文件添加程序(否安装APP的检测),再用C#脚本调用.mm文件,直接用OpenURL打开APP。

plist文件添加的配置如下

<Key>LSApplicationQueriesSchemes</Key>

<array>

                <string>snssdk1128</string>

                <string>youtube</string>

                 <string>twitter</string>

</array>

.mm文件C语言程序

extern "C"

{

        bool CheckPackageInstalled(const char* packageName);

}

bool CheckPackageInstalled(const char* packageName)

 {

        NSURL *lineURL = [NSURL URLWithString: packageName];

        if([[UIApplication shareApplication] canOpenURl: lineURL])

        {

                return true;

        }

        else

        {

                return false;

        }

 }

C#调用.mm文件(注意需要加上IOS宏)

#if UNITY_IOS

[DLLImport("_Internal")]

private static extenr bool CheckPackageInstalled(string packageName)

#endif

public  static bool IOSCheckPackageInstalled(string packageName)

{

        #if UNITY_IOS

                return CheckPackageInstalled(packageName);

        #endif

}

打开APP

Application.OpenURL(path);//path为URL地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值