ข้ามไปที่เนื้อหา

Unity iOS

นี่คือแนวทางการสร้างและการกำหนดค่าของแอป SDK Unity iOS ของแบรนด์ Hive

เพิ่มสิทธิ์ใน Xcode Signing & Capabilities

เพิ่มสิทธิ์ให้กับโปรเจกต์ Xcode ของคุณเพื่อใช้ฟีเจอร์ที่คุณเลือกจาก Hive > ExternalDependency คุณสามารถเพิ่มสิทธิ์เหล่านี้ได้โดยใช้ Hive PostProcess editor หรือ HivePostProcess.cs.

การเพิ่มผ่าน Hive ตัวแก้ไขหลังการประมวลผล

เรียกใช้ Hive PostProcess editor จากสภาพแวดล้อมการพัฒนา Unity ของคุณโดยไปที่ Hive > การตั้งค่าหลังการสร้างโปรเจกต์ > iOS หรือ Hive > แก้ไขการตั้งค่า > การตั้งค่าหลังการสร้างโปรเจกต์ iOS จากนั้นคุณสามารถเลือกฟีเจอร์ SDK ของ Hive ที่ต้องการและเพิ่มสิทธิ์ในส่วน Xcode Signing & Capabilities

นี่คือฟีเจอร์ SDK ของ Hive ที่สามารถเพิ่มได้:

  • การแจ้งเตือนแบบพุช: เปิดใช้งานฟีเจอร์การพุชทั้งในท้องถิ่นและระยะไกล.
    • โหมดการพัฒนา: ตั้งค่าเมื่อใช้ใบรับรองโปรไฟล์การพัฒนาที่จัดเตรียมไว้.
    • โหมดการปล่อย: ตั้งค่าเมื่อใช้ใบรับรองโปรไฟล์การปล่อยที่จัดเตรียมไว้.
  • โหมดพื้นหลัง (การแจ้งเตือนระยะไกล): กำหนดว่าจะแจ้งเตือนการพุชระยะไกลเมื่อแอปอยู่ในพื้นหลังหรือไม่.
  • การลงชื่อเข้าใช้ด้วย Apple: เปิดใช้งานฟังก์ชันการลงชื่อเข้าใช้ด้วย Apple.
  • โดเมนที่เกี่ยวข้อง: รายชื่อโดเมนที่อนุญาตสำหรับลิงก์ทั่วไป (อนุญาตให้ติดตั้งและเรียกใช้แอปจากเว็บไซต์).
  • การซื้อในแอป: เปิดใช้งานฟังก์ชันการซื้อในแอป.
  • Game Center: เปิดใช้งานการลงชื่อเข้าใช้ Game Center และฟังก์ชันที่เกี่ยวข้อง.


คลิก Apply เพื่อเพิ่มฟีเจอร์ที่เลือกไปยัง Xcode Signing & Capabilities คลิก Reset เพื่อรีเซ็ตการตั้งค่าเป็นค่าดีฟอลต์


ค่าที่กำหนดจะถูกบันทึกเป็นสตริง JSON ใน Assets > Hive_SDK_v4 > PostProcess > iOS > HivePostProcessSettingIOS.txt.

Note

คุณยังสามารถแก้ไขความสามารถของโครงการ Xcode ได้โดยการแก้ไขเนื้อหาของไฟล์ HivePostProcessSettingiOS.txt โดยตรงโดยไม่ต้องใช้ Hive PostProcess Editor.

การเพิ่มผ่าน HivePostProcess.cs

ก่อนที่จะสร้างโปรเจกต์ Xcode ใน Unity การยกเลิกการแสดงความคิดเห็นในโค้ดในไฟล์ HivePostProcess.cs จะเพิ่มสิทธิ์ฟีเจอร์ Hive SDK ไปยัง Xcode Signing & Capabilities โดยอัตโนมัติ การแสดงความคิดเห็นในโค้ดจะลบสิทธิ์ออก

การคอมเมนต์บรรทัดเฉพาะในโค้ดด้านล่างจะป้องกันไม่ให้สิทธิ์ที่เกี่ยวข้องถูกเพิ่มไปยัง Signing & Capabilities แนะนำให้คอมเมนต์โค้ดสำหรับสิทธิ์ที่คุณไม่ตั้งใจจะใช้

private static void iOSSettingCapabilites(string path, HivePostProcessSettingIOS setting) {
   #if UNITY_IOS
   Debug.Log("iOSSettingCapabilites : OnPostProcessBuild -\n path: "+path);

   var projPath = PBXProject.GetPBXProjectPath(path);
   var mainTargetName = "Unity-iPhone";
   var entitlementsFileName = "Entitlements.entitlements";

   ProjectCapabilityManager capabilityManager = new ProjectCapabilityManager(projPath, entitlementsFileName, mainTargetName);
    if (setting.isAddInAppPurchase) {
       capabilityManager.AddInAppPurchase();
   }
    if (setting.isAddPushNotifications) {
       // If you don't use push notification (Hive SDK notification) feature, comment out the line below.
       capabilityManager.AddPushNotifications(setting.isPushNotificationsDevelopment);
   }
    if (setting.isAddBackGroundModesRemoteNotifications) {
       capabilityManager.AddBackgroundModes(iOS.Xcode.BackgroundModesOptions.RemoteNotifications);
   }
    if (setting.isAddSignInWithApple) {
       // If you don't use Sign In With Apple feature, comment out the line below.
       capabilityManager.AddSignInWithApple();
   }
    if (setting.isAddAssociatedDomains) {
       var associatedDomains = setting.associatedDomains;
       capabilityManager.AddAssociatedDomains(associatedDomains.ToArray());
   }
    capabilityManager.WriteToFile();

   if (setting.isAddGameCenter) {
       var entitlementsModifier = new HiveEntitlementsModifier(path, entitlementsFileName);
       entitlementsModifier.AddGameCenter();
   }
   #endif
}
Warning

การปรับเปลี่ยน HivePostProcess.cs เพื่อเพิ่มหรือลบฟีเจอร์ Hive SDK อัตโนมัติจากไฟล์ info.plist และ Signing & Capabilities เป็นไปได้เฉพาะกับเวอร์ชัน Hive SDK ปัจจุบัน การอัปเดตเวอร์ชัน Hive SDK ด้วย Hive SDK Manager ขณะที่ HivePostProcess.cs ถูกปรับเปลี่ยนอาจนำไปสู่ความขัดแย้ง เพื่อใช้ฟังก์ชันนี้โดยไม่คำนึงถึงเวอร์ชัน Hive SDK ให้หลีกเลี่ยงการปรับเปลี่ยน HivePostProcess.cs และแทนที่ให้ใช้สคริปต์การประมวลผลหลังแยกต่างหาก (เช่น GamePostProcess.cs) ตาม API PBX Project .

การเพิ่มการตั้งค่ารายละเอียดลงในไฟล์ info.plist ของ Xcode

เพิ่มการตั้งค่ารายละเอียดที่จำเป็นสำหรับการใช้ฟีเจอร์ที่เลือกจาก Hive > ExternalDependency ก่อนที่จะสร้างโปรเจ็กต์ Xcode ใน Unity การยกเลิกการคอมเมนต์โค้ดในไฟล์ HivePostProcess.cs จะเพิ่มการตั้งค่ารายละเอียดสำหรับการใช้ Hive SDK ไปยังไฟล์ info.plist โดยอัตโนมัติ การคอมเมนต์โค้ดจะลบการตั้งค่าออก

การคอมเมนต์บรรทัดเฉพาะในโค้ดด้านล่างจะป้องกันไม่ให้การตั้งค่าที่เกี่ยวข้องถูกเพิ่มลงในไฟล์ info.plist

private static void iOSSettingInfoPlist(string buildPath) {
   #if UNITY_IOS
    var PlistPath = buildPath + "/Info.plist";
   PlistDocument plist = new PlistDocument();
   plist.ReadFromFile(PlistPath);
    var rootDict = plist.root;
   rootDict.SetBoolean("UIViewControllerBasedStatusBarAppearance",false);
   if( hasFacebookAppId() )
       rootDict.SetString("FacebookAppID",getFacebookAppID());
   if (hasFacebookClientToken())
       rootDict.SetString("FacebookClientToken", getFacebookClientToken());
    rootDict.SetString("CFBundleIdentifier",getBundleIdentifier());
    //facebook white list
   var LSApplicationQueriesSchemes = rootDict.CreateArray("LSApplicationQueriesSchemes");
   LSApplicationQueriesSchemes.AddString("fbapi");
   LSApplicationQueriesSchemes.AddString("fb-messenger-share-api");
    // for vk
   LSApplicationQueriesSchemes.AddString("vk");
   LSApplicationQueriesSchemes.AddString("vkauthorize");
   LSApplicationQueriesSchemes.AddString("vk-share");
    // for WeChat
   LSApplicationQueriesSchemes.AddString("weixin");
   LSApplicationQueriesSchemes.AddString("weixinULAPI");

    // for QQ
   LSApplicationQueriesSchemes.AddString("mqqOpensdkSSoLogin");
   LSApplicationQueriesSchemes.AddString("mqqopensdkapiV2");
   LSApplicationQueriesSchemes.AddString("mqqopensdkapiV3");
   LSApplicationQueriesSchemes.AddString("wtloginmqq2");
   LSApplicationQueriesSchemes.AddString("mqq");
   LSApplicationQueriesSchemes.AddString("mqqapi");
   LSApplicationQueriesSchemes.AddString("mqqopensdknopasteboard");
   LSApplicationQueriesSchemes.AddString("mqqopensdknopasteboardios16");
   LSApplicationQueriesSchemes.AddString("lineauth2");
    //URL Types settings
   var CFBundleURLTypes = rootDict.CreateArray("CFBundleURLTypes");
    var facebookURLType = CFBundleURLTypes.AddDict();
   facebookURLType.SetString("CFBundleTypeRole","Editor");
   if( hasFacebookAppId() )
       facebookURLType.CreateArray("CFBundleURLSchemes").AddString("fb"+getFacebookAppID());
    // add Google reversed client id
   if (hasGoogleReversedClientId()){
       var googleReversedClientId = CFBundleURLTypes.AddDict();
       googleReversedClientId.SetString("CFBundleTypeRole","Editor");
       googleReversedClientId.CreateArray("CFBundleURLSchemes").AddString(getGoogleReversedClientId());
   }
   // add tencent appid
   if (hasQQAppId()){
       var qqAppId = CFBundleURLTypes.AddDict();
       qqAppId.SetString("CFBundleTypeRole","Editor");
       qqAppId.CreateArray("CFBundleURLSchemes").AddString("tencent"+getQQAppId());
   }
   // add VK appid
   if (hasVKAppId()) {
       var vkAppId = CFBundleURLTypes.AddDict();
       vkAppId.SetString("CFBundleTypeRole","Editor");
       vkAppId.CreateArray("CFBundleURLSchemes").AddString("vk"+getVKAppId());
   }
    // add wechat appid
   if (hasWeChatAppId()) {
       var weChatAppId = CFBundleURLTypes.AddDict();
       weChatAppId.SetString("CFBundleTypeRole","Editor");
       weChatAppId.CreateArray("CFBundleURLSchemes").AddString(getWeChatAppId());
   }
    // add line channel id
   if (hasLineChannelId()) {
       var lineChannelId = CFBundleURLTypes.AddDict();
       lineChannelId.SetString("CFBundleTypeRole","Editor");
       lineChannelId.CreateArray("CFBundleURLSchemes").AddString("line3rdp."+getBundleIdentifier());
   }
    var urlSchemes = CFBundleURLTypes.AddDict();
   urlSchemes.SetString("CFBundleTypeRole","Editor");
   urlSchemes.SetString("CFBundleIdentifier",getBundleIdentifier());
   urlSchemes.CreateArray("CFBundleURLSchemes").AddString(getBundleIdentifier());
    // remove exit on suspend if it exists.
   string exitsOnSuspendKey = "UIApplicationExitsOnSuspend";
   if(rootDict.values.ContainsKey(exitsOnSuspendKey))
   {
       rootDict.values.Remove(exitsOnSuspendKey);
   }
    // Set encryption usage boolean
   string encryptKey = "ITSAppUsesNonExemptEncryption";
   rootDict.SetBoolean(encryptKey, false);
    // ATS
   var ATSDict = rootDict.CreateDict("NSAppTransportSecurity");
   ATSDict.SetBoolean("NSAllowsArbitraryLoads",true);
    plist.WriteToFile(PlistPath);
    #endif
}
Warning

การแก้ไข HivePostProcess.cs เพื่อเพิ่มหรือลบฟีเจอร์ Hive SDK โดยอัตโนมัติจากไฟล์ info.plist และ Signing & Capabilities เป็นไปได้เฉพาะกับเวอร์ชัน Hive SDK ปัจจุบันเท่านั้น การอัปเดตเวอร์ชัน Hive SDK ด้วย Hive SDK Manager ขณะที่ HivePostProcess.cs ถูกแก้ไขอาจทำให้เกิดความขัดแย้งได้ เพื่อใช้ฟังก์ชันนี้โดยไม่คำนึงถึงเวอร์ชัน Hive SDK ให้หลีกเลี่ยงการแก้ไข HivePostProcess.cs และแทนที่ให้ใช้สคริปต์การประมวลผลหลังแยกต่างหาก (เช่น GamePostProcess.cs) ตาม API PBX Project.


HivePostProcess.cs ยังสามารถใช้เพื่อเชื่อมโยงไฟล์เฉพาะได้ ตัวอย่างเช่น เมื่อใช้ Hive SDK analytics คุณสามารถเปิดใช้งาน Firebase ใน Unity > Hive Dependencies จากนั้น หลังจากวางไฟล์ GoogleService-Info.plist ที่ดาวน์โหลดจาก Google Firebase Console ในไดเรกทอรี Assets/ExternalResources/iOS ให้เพิ่มโค้ดต่อไปนี้ลงใน HivePostProcess.cs ซึ่งจะเชื่อมโยงไฟล์ GoogleService-Info.plist กับโปรเจ็กต์ Xcode ที่สร้างขึ้นโดยใช้ Unity โดยอัตโนมัติ

private static void iOSSettingProject(string buildPath) {
   ...
   // If you want to disable the feature of automatically adding GoogleService-Info.plist file to the Xcode project, comment out the line below.
   iOSAddGoogleServiceInfoPlist(buildPath, project, targets[mainTarget]);
   ...
}

#if UNITY_IOS
public static void iOSAddGoogleServiceInfoPlist(string buildPath, PBXProject project, string target) {

   var isUseFirebase = ExternalDependencyDictionaryManager.isUseDependency(ExternalDependencyType.Firebase);

   if (!isUseFirebase) {
       Debug.Log("[iOSAddGoogleServiceInfoPlist] ExternalDependencyType Firebase not use. Skip process.");
       return;
   }

   string[] filesToCopy = new string[]
   {
       "GoogleService-Info.plist",
   };

   foreach (string file in filesToCopy) {
       var srcPath = Path.Combine("Assets/ExternalResources/iOS", file);
       var relativePath = Path.Combine("", file);
       var physicalPath = Path.Combine(buildPath, relativePath);

       if (!File.Exists(srcPath)) {
           Debug.Log("[iOSAddGoogleServiceInfoPlist] " + file + " not exist. Skip process.");
           continue;
       }

       Debug.Log("[iOSAddGoogleServiceInfoPlist] srcPath = " + srcPath);
       Debug.Log("[iOSAddGoogleServiceInfoPlist] relativePath = " + relativePath);
       Debug.Log("[iOSAddGoogleServiceInfoPlist] physicalPath = " + physicalPath);

       File.Copy(srcPath, physicalPath, true);
       var fileGuid = project.AddFile(physicalPath, relativePath);
       Debug.Log("[iOSAddGoogleServiceInfoPlist] fileGuid = " + fileGuid);

       project.AddFileToBuild(target, fileGuid);
   }
} 
#endif

การลบไฟล์ XML ที่ไม่ได้ใช้งาน

หากคุณติดตั้งหรืออัปเดต Hive SDK Unity ผ่านทาง Unity package แทนที่จะใช้ Hive SDK Manager คุณต้องลบไฟล์ทั้งหมด HIVESDK_{library_name}Dependencies.xml ที่ตั้งอยู่ในเส้นทางด้านล่างก่อนที่จะสร้างแอป

  • Assets/Hive_SDK_v4/Dependencies
  • Assets/Hive_SDK_v4/Editor

ไฟล์ตัวอย่างที่จะถูกลบมีดังต่อไปนี้:

  • HIVESDK_DefaultDependencies.xml
  • HIVESDK_HerculesDependencies.xml
  • HIVESDK_HiveAnalyticsConsentModeDependencies.xml
  • HIVESDK_HiveDataStoreDependencies.xml
  • HIVESDK_HiveDeviceManagementDependencies.xml
  • HIVESDK_HiveGoogleInAppReviewDependencies.xml
  • HIVESDK_HiveGoogleInAppUpdateDependencies.xml
  • HIVESDK_HivePromotionDependencies.xml
  • HIVESDK_HiveRealNameVerificationDependencies.xml
  • HIVESDK_MarketAmazonDependencies.xml
  • HIVESDK_MarketAppleDependencies.xml
  • HIVESDK_MarketGoogleDependencies.xml
  • HIVESDK_MarketHiveStoreDependencies.xml
  • HIVESDK_MarketHuaweiDependencies.xml
  • HIVESDK_MarketLebiDependencies.xml
  • HIVESDK_MarketOneStoreDependencies.xml
  • HIVESDK_MarketSamsungDependencies.xml
  • HIVESDK_ProviderAdjustDependencies.xml
  • HIVESDK_ProviderAppleDependencies.xml
  • HIVESDK_ProviderAppleSignInDependencies.xml
  • HIVESDK_ProviderAppsFlyerDependencies.xml
  • HIVESDK_ProviderFacebookDependencies.xml
  • HIVESDK_ProviderFirebaseDependencies.xml
  • HIVESDK_ProviderGoogleDependencies.xml
  • HIVESDK_ProviderGooglePlayGamesDependencies.xml
  • HIVESDK_ProviderHiveMembershipDependencies.xml
  • HIVESDK_ProviderHuaweiDependencies.xml
  • HIVESDK_ProviderLineDependencies.xml
  • HIVESDK_ProviderQQDependencies.xml
  • HIVESDK_ProviderRecaptchaDependencies.xml
  • HIVESDK_ProviderSingularDependencies.xml
  • HIVESDK_ProviderVKDependencies.xml
  • HIVESDK_ProviderWechatDependencies.xml
  • HIVESDK_ProviderWeverseDependencies.xml
  • HIVESDK_PushAmazonAdmDependencies.xml
  • HIVESDK_PushGoogleFcmDependencies.xml