當Unity開發(fā)的游戲以Android Apk的形式發(fā)布之后,經(jīng)常會遇到的一種情況就是別人對我們的游戲進行二次打包,也就是用他們的簽名替換掉我們的簽名,從而堂而皇之的將勝利果實占為己有。面對這樣的情況,我們可以采取的一種方式就是對Apk包的簽名進行驗證,如果與我們的簽名不一致,則可以采取黑屏或者直接退出等方式來阻止該盜版程序的運行。 示例代碼如下: [code]csharpcode:using UnityEngine; using System.Collections; /// <summary> /// Signature verify tool class /// </summary> public class SignatureVerify { /** * Verify the signature is correct **/ public static bool IsCorrect () { #if UNITY_EDITOR return true; #endif // 獲取Android的PackageManager AndroidJavaClass Player = new AndroidJavaClass ("com.unity3d.player.UnityPlayer"); AndroidJavaObject Activity = Player.GetStatic<AndroidJavaObject> ("currentActivity"); AndroidJavaObject PackageManager = Activity.Call<AndroidJavaObject> ("getPackageManager"); // 獲取當前Android應(yīng)用的包名 string packageName = Activity.Call<string> ("getPackageName"); // 調(diào)用PackageManager的getPackageInfo方法來獲取簽名信息數(shù)組 int GET_SIGNATURES = PackageManager.GetStatic<int> ("GET_SIGNATURES"); AndroidJavaObject PackageInfo = PackageManager.Call<AndroidJavaObject> ("getPackageInfo", packageName, GET_SIGNATURES); AndroidJavaObject[] Signatures = PackageInfo.Get<AndroidJavaObject[]> ("signatures"); // 獲取當前的簽名的哈希值,判斷其與我們簽名的哈希值是否一致 if (Signatures != null && Signatures.Length > 0) { int hashCode = Signatures [0].Call<int> ("hashCode"); return hashCode == 8888888888;//我們簽名的哈希值 |
|