美文网首页
Unity IOS 添加苹果登录、支付、推送

Unity IOS 添加苹果登录、支付、推送

作者: CERI_CHANNEL | 来源:发表于2022-12-06 17:37 被阅读0次
    private const BindingFlags NonPublicInstanceBinding = BindingFlags.NonPublic | BindingFlags.Instance;
    private const string EntitlementsArrayKey = "com.apple.developer.applesignin";
    private const string DefaultAccessLevel = "Default";
    private const string entitlementsPath = "game.entitlements";
    /// <summary>
    /// 修改Capability (主要是为了 苹果登录、支付、推送)
    /// </summary>
    private static void ModifyCapability(PBXProject proj, string unityIphone, string projectPath)
    {
        var capabilityManager = new ProjectCapabilityManager(projectPath, entitlementsPath, "Unity-iPhone", unityIphone);
        proj.SetBuildProperty(unityIphone, "CODE_SIGN_STYLE", "Manual");
        capabilityManager.AddInAppPurchase();//内购
        capabilityManager.AddPushNotifications(true);//推送
        capabilityManager.AddBackgroundModes(BackgroundModesOptions.RemoteNotifications);
        AddSignInWithApple(capabilityManager);
        capabilityManager.WriteToFile();
    }
    /// <summary>
    /// 添加苹果登录
    /// </summary>
    private static void AddSignInWithApple(ProjectCapabilityManager manager)
    {
        var managerType = typeof(ProjectCapabilityManager);
        var capabilityTypeType = typeof(PBXCapabilityType);
        var projectField = managerType.GetField("project", NonPublicInstanceBinding);
        var targetGuidField = managerType.GetField("m_TargetGuid", NonPublicInstanceBinding);
        var entitlementFilePathField = managerType.GetField("m_EntitlementFilePath", NonPublicInstanceBinding);
        var getOrCreateEntitlementDocMethod = managerType.GetMethod("GetOrCreateEntitlementDoc", NonPublicInstanceBinding);
        var constructorInfo = capabilityTypeType.GetConstructor(
            NonPublicInstanceBinding,
            null,
            new[] { typeof(string), typeof(bool), typeof(string), typeof(bool) },
            null);
        if (projectField == null || targetGuidField == null || entitlementFilePathField == null ||
            getOrCreateEntitlementDocMethod == null || constructorInfo == null)
            throw new Exception("Can't Add Sign In With Apple programatically in this Unity version");
        var entitlementDoc = getOrCreateEntitlementDocMethod.Invoke(manager, new object[] { }) as PlistDocument;
        if (entitlementDoc != null)
        {
            var plistArray = new PlistElementArray();
            plistArray.AddString(DefaultAccessLevel);
            entitlementDoc.root[EntitlementsArrayKey] = plistArray;
        }
    }

相关文章

网友评论

      本文标题:Unity IOS 添加苹果登录、支付、推送

      本文链接:https://www.haomeiwen.com/subject/hafgfdtx.html