You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity安卓端唤起Twitter页面 客户端不存在时跳转浏览器的可靠方案

现有实现的问题

你当前的代码无法检测安卓设备是否安装Twitter客户端,直接调用Application.OpenURL打开网页链接的逻辑受系统跳转策略限制,大概率会直接打开浏览器而不是优先唤起已安装的APP,无法满足你的需求。

更稳定的实现方案

实现逻辑

  • 安卓11及以上版本需要先申请应用可见性权限,才能检测第三方APP是否安装
  • 先调用安卓原生API检测Twitter客户端是否已安装
  • 已安装时通过Twitter的APP专属协议唤起客户端打开对应主页
  • 未安装时跳转浏览器打开网页版主页

完整代码实现

using UnityEngine;

public class TwitterJump : MonoBehaviour
{
    // 替换为你的Twitter账号名
    private const string TWTR_NAME = "你的账号名";
    // Twitter安卓端固定包名
    private const string TWTR_PACKAGE_NAME = "com.twitter.android";
    // Twitter APP唤起协议前缀
    private const string TWTR_APP_SCHEME = "twitter://user?screen_name=";
    // Twitter网页版访问前缀
    private const string TWTR_WEB_URL = "https://twitter.com/";

    public void OpenTWTR()
    {
#if UNITY_ANDROID && !UNITY_EDITOR
        if (CheckAppInstalled(TWTR_PACKAGE_NAME))
        {
            // 已安装APP,优先唤起APP打开
            Application.OpenURL($"{TWTR_APP_SCHEME}{TWTR_NAME}");
        }
        else
        {
            // 未安装,打开网页版
            Application.OpenURL($"{TWTR_WEB_URL}{TWTR_NAME}");
        }
#elif UNITY_EDITOR
        // 编辑器环境直接打开网页版调试
        Application.OpenURL($"{TWTR_WEB_URL}{TWTR_NAME}");
#else
        // 其他平台默认走网页版逻辑
        Application.OpenURL($"{TWTR_WEB_URL}{TWTR_NAME}");
#endif
    }

    /// <summary>
    /// 安卓端检测指定包名的APP是否已安装
    /// </summary>
    private bool CheckAppInstalled(string packageName)
    {
        bool isInstalled = false;
        using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
        {
            AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
            AndroidJavaObject packageManager = currentActivity.Call<AndroidJavaObject>("getPackageManager");
            
            try
            {
                packageManager.Call<AndroidJavaObject>("getPackageInfo", packageName, 0);
                isInstalled = true;
            }
            catch (System.Exception)
            {
                isInstalled = false;
            }
        }
        return isInstalled;
    }
}

必要配置(安卓11及以上必须配置)

你需要在Unity的安卓自定义Manifest文件的manifest标签下添加应用可见性查询配置,否则包检测逻辑会失效:

<queries>
    <package android:name="com.twitter.android" />
</queries>

如果你的项目没有自定义AndroidManifest,可以在Unity的Assets/Plugins/Android目录下新建AndroidManifest.xml文件,内容参考如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.unity3d.player" xmlns:tools="http://schemas.android.com/tools">
  <queries>
    <package android:name="com.twitter.android" />
  </queries>
  <application>
    <activity android:name="com.unity3d.player.UnityPlayerActivity" android:theme="@style/UnityThemeSelector">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
      <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
    </activity>
  </application>
</manifest>

内容的提问来源于stack exchange,提问作者Filip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:57:02