當Unity開發的游戲以Android Apk的形式發布之后,經常會遇到的一種情況就是別人對我們的游戲進行二次打包,也就是用他們的簽名替換掉我們的簽名,從而堂而皇之的將勝利果實占為己有。面對這樣的情況,我們可以采取的一種方式就是對Apk包的簽名進行驗證,如果與我們的簽名不一致,則可以采取黑屏或者直接退出等方式來阻止該盜版程序的運行。
示例代碼如下:
1 using UnityEngine; 2 using System.Collections;/// <summary> 3 /// Signature verify tool class 4 /// </summary> 5 public class SignatureVerify 6 { 7 /** 8 * Verify the signature is correct 9 **/ 10 public static bool IsCorrect () 11 { 12 #if UNITY_EDITOR 13 return true; 14 #endif 15 16 // 獲取Android的PackageManager 17 AndroidJavaClass Player = new AndroidJavaClass ("com.unity3d.player.UnityPlayer"); 18 AndroidJavaObject Activity = Player.GetStatic<AndroidJavaObject> ("currentActivity"); 19 AndroidJavaObject PackageManager = Activity.Call<AndroidJavaObject> ("getPackageManager"); 20 21 // 獲取當前Android應用的包名 22 string packageName = Activity.Call<string> ("getPackageName"); 23 24 // 調用PackageManager的getPackageInfo方法來獲取簽名信息數組 25 int GET_SIGNATURES = PackageManager.GetStatic<int> ("GET_SIGNATURES"); 26 AndroidJavaObject PackageInfo = PackageManager.Call<AndroidJavaObject> ("getPackageInfo", packageName, GET_SIGNATURES); 27 AndroidJavaObject[] Signatures = PackageInfo.Get<AndroidJavaObject[]> ("signatures"); 28 29 // 獲取當前的簽名的哈希值,判斷其與我們簽名的哈希值是否一致 30 if (Signatures != null && Signatures.Length > 0) 31 { 32 int hashCode = Signatures [0].Call<int> ("hashCode"); 33 return hashCode == 8888888888;//我們簽名的哈希值 34 35 } 36 return false; 37 } 38 }