Bug? UnityObject.js shows the Install button on an iPhone 3gs

Whenever a mobile user or other non-player compatible user goes to my unity web player page, I want it to tell the user that the web player does not work on their platform.

Instead, it shows the installation button which of course is confusing for the user.

I see some browser detection in the UnityObject.js code, but I haven’t spent the time trying to trace everything down. What is the UnityObject.js code supposed to do in case of an incompatible platform?

My web player is at: http://www.toldpro.com/Games/BashnBlocks

My iPhone is an unlocked 3gs 4.0.2 with User-Agent:
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0_2 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A400 Safari/6531.22.7

I could not find an answer, but I made a way around this:

See it in action at: http://www.toldpro.com/Games/BashnBlocks
You can see the default message if you look at the code source, even if the web player starts.

function OnUnityLoaded(params) {
    if (params.success) {
        // Make the missing message go away
        var missingDiv = document.getElementById('missingMessage');
        missingDiv.parentNode.removeChild(missingDiv);
    }
}
function GetUnity() {
    if (typeof unityObject != "undefined") {
        return unityObject.getObjectById("unityPlayer");
    }
    return null;
}
if (typeof unityObject != "undefined") {
    unityObject.embedUnity("unityPlayer", "GAME.unity3d", 
      800, 600, null, null, OnUnityLoaded);

}

then I defined the “missingMessage” div like so (this is ASP.NET MVP 3 Razor with C#):

<div id="game">
    <div id="missingMessage">
        @{
                            
            var isMobile = BrowserHelper.IsMobile(Request);
            var canUseUnity = BrowserHelper.CanUseUnityWebPlayer(Request);


            // TESTING
            //canUseUnity = false;

            if (isMobile)
            {
            <p>
                I'm sorry, the Unity Web Player does not work on mobile devices at this time.
            </p>
            <p>
                The web player is only compatible with:
            </p>
            <ul>
                <li>Windows 2000/XP/Vista/7</li>
                <li>Mac OS X 10.4 or newer</li>
            </ul>
                                
            <p>
                However, I am planning to put the game in the relevant app store for iPhone/iPad,
                Android, and Windows 7 Phones in the future.</p>
            <p>
                More Information: <a href="http://told.shapado.com/questions/why-can-t-i-play-the-game">
                    Why can't I play the game?</a></p>
            <p>
                If you think this message is in error, feel free to try to install the Unity Web
                Player below:
            </p> 
            }
            else if (!canUseUnity.HasValue || !canUseUnity.Value)
            {
            <p>
                I'm sorry, it appears you may not be able to use the Unity Web Player which is required
                to play the game in the browser. The web player is only compatible with:
            </p>     
            <ul>
                <li>Windows 2000/XP/Vista/7</li>
                <li>Mac OS X 10.4 or newer</li>
            </ul>
                                
            <p>
                More Information: <a href="http://told.shapado.com/questions/why-can-t-i-play-the-game">
                    Why can't I play the game?</a></p>
            <p>
                If you think this message is in error, feel free to try to install the Unity Web
                Player below:
            </p>
            }
            else
            {
            <p>
                You need to install the Unity Web Player to play the game.
            </p>
            <p>
                The web player is compatible with:
            </p>
            <ul>
                <li>Windows 2000/XP/Vista/7</li>
                <li>Mac OS X 10.4 or newer</li>
            </ul>
                                
            }
        }
    </div>
    <div id="unityPlayer">
        <div class="missing">
            <a href="http://unity3d.com/webplayer/" title="Unity Web Player. Install now!">
                <img alt="Unity Web Player. Install now!" src="http://webplayer.unity3d.com/installation/getunity.png"
                    width="193" height="63" />
            </a>
        </div>
    </div>
</div>

My BrowserHelper class is defined:

public static class BrowserHelper
{
  public static bool IsMobile(HttpRequestBase request)
  {
    // From: detectmobilebrowsers.com
    string u = request.ServerVariables["HTTP_USER_AGENT"];
    Regex b = new Regex("GOTO detectmobilebrowsers.com to get the latest value",
      RegexOptions.IgnoreCase | RegexOptions.Multiline);
    return (b.IsMatch(u) || v.IsMatch(u.Substring(0, 4)));
  }

  public static bool? CanUseUnityWebPlayer(HttpRequestBase request)
  {
    // Windows 2000/XP/Vista/7
    // Mac OS X 10.4 or newer
    string u = request.ServerVariables["HTTP_USER_AGENT"];

    Regex winVersionRegex = new Regex(@"Windows NT ((?<major>\d+)\.(?<minor>\d+))");
    Regex macVersionRegex = new Regex(@"(?<!like) Mac OS X ((?<major>\d+)_(?<minor>\d+))");
    Regex macVersionUnknownRegex = new Regex(@"(?<!like) Mac OS X");

    var isHighEnough = IsHighEnoughVersion(u, winVersionRegex, 5, 0) ||
      IsHighEnoughVersion(u, macVersionRegex, 10, 4);

    if (isHighEnough)
    {
      return true;
    }

    if (macVersionUnknownRegex.IsMatch(u))
    {
      return null;
    }
    else
    {
      return false;
    }
  }

  private static bool IsHighEnoughVersion(string userAgentText, Regex versionRegex, int minMajor, int minMinor)
  {
    var match = versionRegex.Match(userAgentText);

    if (match.Success)
    {
      var major = int.Parse(match.Groups["major"].Value);
      var minor = int.Parse(match.Groups["minor"].Value);

      if (major > minMajor)
      {
        return true;
      }
      else if (major == minMajor)
      {
        if (minor >= minMinor)
        {
          return true;
        }
      }
    }

    return false;
  }

}