当前位置:   article > 正文

unity 广告统计接入踩坑记录,appsflyer、ironsource、facebook、友盟等等_unity appsflyer

unity appsflyer

unity18 19现有的很方便的sdk接入自动依赖下载,其中也有一些坑一一记录下来

公司老项目sdk接入实在是乱的不行,由于现在开发休闲游戏,每个项目都要使用sdk,于是就自己接了一套以便后续使用。

安卓

  1. 友盟导入就可以用
  2. facebook需要点Facebook->设置app id
  3. Ironsource -> admob 需要在manifest里面添加id,官网文档有
  4. ironsource导入后,点IronSource->Integration Manager->选择需要的广告点Install(如加载不出来需要开全局翻墙)
  5. 有部分广告需要把打包方式改成gradle,所以建议一直是gradle
  6. 当改成gradle的时候,facebook和友盟会报错,需要勾选上 publishing setting->custom prograd file
  7. 在其中加入->
  8. -keep class com.umeng.** { *; }
  9. -keep class com.facebook.** { *; }
  10. -keepattributes Signature
  11. 自动解决依赖Assets->External Denpendency Manager->Android Resolver->Resolver自动下载
  12. 注意需要电脑的jdk版本需要是1.8 我的是java version "1.8.0_271" 最新的1.8都可以

IOS

友盟有点问题

这个问题好像在后边自动pod install后不出现了,如果有的话可以这样解决

"_sqlite3_errmsg", 等等sqlite3找不到需要在UnityFramework的Other Linker Flags加入-lsqlite3

其他正常导入,

注意!点Assets->External Denpendency Manager->IOS Resolver->Setting->Cocoapods Integration改成None,否则会自动pod install,由于默认源是git,会卡住很久

有需要可以更改pod为清华源,加快下载

  1. $ cd ~/.cocoapods/repos
  2. $ git clone https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git master

然后pos install推荐使用update install

pod install --repo-update

如果遇到FBSDK或者什么框架pod安装不上说超时,需要将terminal翻墙

打开终端,直接执行:(执行后,只对当前终端起作用;重启终端后,默认失效;)

  1. $ export http_proxy=socks5://127.0.0.1:1086 # 配置http 代理访问
  2. $ export https_proxy=socks5://127.0.0.1:1086 # 配置https 代理访问
  3. $ export all_proxy=socks5://127.0.0.1:1086 # 配置http和https访问
  4. $ unset http_proxy # 取消http 代理访问
  5. $ unset https_proxy # 取消https 代理访问

端口需要和shadowSocks中对应

附上我现在用的打包脚本

  1. #if UNITY_EDITOR
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using UnityEditor;
  6. using UnityEditor.Callbacks;
  7. using UnityEditor.iOS.Xcode;
  8. using UnityEngine;
  9. public enum CommandArgsName
  10. {
  11. up_version,
  12. platform,
  13. project_name,
  14. }
  15. public static class Build
  16. {
  17. private static string KeyStorePath => Directory.GetFiles(Path.Combine(Application.dataPath, ".."), "*.keystore")[0];
  18. private static string GetOutPath(BuildTarget buildTarget)
  19. {
  20. if(buildTarget == BuildTarget.Android)
  21. return Path.Combine(Application.dataPath, $"../../{Path.GetFileNameWithoutExtension(KeyStorePath)}.apk");
  22. return Path.Combine(Application.dataPath, $"../../{Path.GetFileNameWithoutExtension(KeyStorePath)}");
  23. }
  24. private static string KeyStorePwd => Path.Combine(Application.dataPath, "../keystore_password.txt");
  25. public static void EditorBuild(bool upVersion, BuildTarget buildTarget)
  26. {
  27. EditorUserBuildSettings.SwitchActiveBuildTarget(BuildPipeline.GetBuildTargetGroup(buildTarget), buildTarget);
  28. if (upVersion)
  29. {
  30. UpVersion(buildTarget);
  31. }
  32. PlayerSettings.keystorePass = File.ReadAllText(KeyStorePwd);
  33. PlayerSettings.keyaliasPass = File.ReadAllText(KeyStorePwd);
  34. PlayerSettings.Android.keystoreName = KeyStorePath;
  35. PlayerSettings.Android.keyaliasName = Path.GetFileNameWithoutExtension(KeyStorePath);
  36. EditorUserBuildSettings.androidDebugMinification = AndroidMinification.Gradle;
  37. EditorUserBuildSettings.androidReleaseMinification = AndroidMinification.Gradle;
  38. BuildPipeline.BuildPlayer(GetBuildScenes(), GetOutPath(buildTarget), buildTarget, BuildOptions.None);
  39. OpenTargetFolder(buildTarget);
  40. }
  41. private static void OpenTargetFolder(BuildTarget buildTarget)
  42. {
  43. if (Application.platform == RuntimePlatform.WindowsEditor)
  44. {
  45. System.Diagnostics.Process.Start("explorer.exe", Path.GetDirectoryName(GetOutPath(buildTarget)));
  46. }
  47. else if (Application.platform == RuntimePlatform.OSXEditor)
  48. {
  49. System.Diagnostics.Process.Start("open", Path.GetDirectoryName(GetOutPath(buildTarget)));
  50. }
  51. }
  52. public static void JenkinsBuild()
  53. {
  54. BuildTarget buildTarget = (BuildTarget)Enum.Parse(typeof(BuildTarget), GetEnvironmentVariable(CommandArgsName.platform));
  55. bool upVersion = Boolean.Parse(GetEnvironmentVariable(CommandArgsName.up_version));
  56. if (buildTarget == BuildTarget.Android && upVersion)
  57. {
  58. UpVersion(buildTarget);
  59. }
  60. BuildPipeline.BuildPlayer(GetBuildScenes(), GetOutPath(buildTarget), BuildTarget.Android, BuildOptions.None);
  61. }
  62. private static void UpVersion(BuildTarget buildTarget)
  63. {
  64. var bundleVersion = PlayerSettings.bundleVersion;
  65. string[] strs = bundleVersion.Split('.');
  66. var lastVersion = int.Parse(strs[strs.Length - 1]) + 1;
  67. strs[strs.Length - 1] = lastVersion.ToString();
  68. PlayerSettings.bundleVersion = string.Join(".", strs);
  69. if (buildTarget == BuildTarget.Android)
  70. PlayerSettings.Android.bundleVersionCode += 1;
  71. else if (buildTarget == BuildTarget.iOS)
  72. PlayerSettings.iOS.buildNumber = (int.Parse(PlayerSettings.iOS.buildNumber) + 1).ToString();
  73. }
  74. static string[] GetBuildScenes()
  75. {
  76. List<string> names = new List<string>();
  77. foreach(EditorBuildSettingsScene e in EditorBuildSettings.scenes)
  78. {
  79. if(e==null)
  80. continue;
  81. if(e.enabled)
  82. names.Add(e.path);
  83. }
  84. return names.ToArray();
  85. }
  86. static string GetEnvironmentVariable(CommandArgsName commandArgsName)
  87. {
  88. return Environment.GetEnvironmentVariable(commandArgsName.ToString());
  89. }
  90. [PostProcessBuild(1)]
  91. public static void OnPostProcessBuild(BuildTarget target, string path)
  92. {
  93. if (target == BuildTarget.iOS)
  94. {
  95. // Read.
  96. string projectPath = PBXProject.GetPBXProjectPath(path);
  97. PBXProject project = new PBXProject();
  98. project.ReadFromString(File.ReadAllText(projectPath));
  99. string targetGUID = project.GetUnityFrameworkTargetGuid();
  100. AddFrameworks(project, targetGUID);
  101. string plistPath = Path.Combine(path, "Info.plist");
  102. PlistDocument plist = new PlistDocument();
  103. plist.ReadFromString(File.ReadAllText(plistPath));
  104. // Get root
  105. PlistElementDict rootDict = plist.root;
  106. // Change value of CFBundleVersion in Xcode plist
  107. var buildKey = "GADApplicationIdentifier";
  108. rootDict.SetString(buildKey, ConstData.AdmobIosKey);
  109. var capKey = "UIRequiredDeviceCapabilities";
  110. if (rootDict.values.ContainsKey(capKey))
  111. rootDict.values.Remove(capKey);
  112. // Write to file
  113. File.WriteAllText(plistPath, plist.WriteToString());
  114. // Write.
  115. File.WriteAllText(projectPath, project.WriteToString());
  116. System.Diagnostics.Process.Start("pod", $"install --project-directory={path}");
  117. }
  118. }
  119. static void AddFrameworks(PBXProject project, string targetGUID)
  120. {
  121. // Frameworks
  122. project.AddFrameworkToProject(targetGUID, "libz.dylib", false);
  123. project.AddFrameworkToProject(targetGUID, "libsqlite3.tbd", false);
  124. project.AddFrameworkToProject(targetGUID, "CoreTelephony.framework", false);
  125. }
  126. }
  127. #endif

希望对各位sdk接入人有帮助

错误合集:

Q:

firebase - Unity Firebase加载失败:“无法从应用程序的资源读取Firebase选项。

A:

注意这两个地方有没有自动生成的xml文件

Q:

发布Android出错unexpected element <queries> found in <manifest>

A:
由于Android11新标签不识别问题导致,修改unity安装路径Editor\Data\PlaybackEngines\AndroidPlayer\Tools\GradleTemplates下的baseProjectTemplate.gradle文件
classpath 'com.android.tools.build:gradle:3.4.0' 

修改为
classpath 'com.android.tools.build:gradle:3.4.3'

Q:

D8: Cannot fit requested classes in a single dex file (# methods: 71752 > 65536)

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':launcher:transformClassesAndResourcesWithR8ForRelease'.
> com.android.tools.r8.CompilationFailedException: Compilation failed to complete

or :

The number of method references in a .dex file cannot exceed 64k API 17

A:

Player Settings中将支持的最低Android API级别设定为21及以上。Android API Level 21及更高版本支持从APK文件中加载多个DEX文件,因此不会受64K的限制。

Unity打包apk报错: Cannot fit requested classes in a single dex file (# methods: 73376 > 65536)的解决办法_linxinfa的专栏-CSDN博客​​​​​​​​​​​​​​​​​

Q: Unity发布安卓9.0及以上版本不能访问http请求

A: 在AndroidManifest.xml的application中添加如下一条属性即可:android:usesCleartextTraffic="true" 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/112035?site
推荐阅读
相关标签
  

闽ICP备14008679号