关于Unity启动调用Android_id问题排查

本文介绍了Unity在启动过程中获取Android_id的问题,并提供了解决方案,包括排查代码、第三方插件及Unity设置等方面,确保在用户同意隐私政策后才进行设备信息收集。

问题:Unity启动时获取了设备信息,其中包括Android_id

以下是在androidstudio中的log,使用Xposed的LoginHook看到Unity启动时获取了android_id信息,如果在用户同意隐私协议之前获取,是不合规的。

05-31 14:06:29.620 4118-4138/com.DefaultCompany.TestHW I/Xposed: com.DefaultCompany.TestHW -> 2 调用Settings.Secure.getstring获取了android_id
05-31 14:06:29.622 4118-4138/com.DefaultCompany.TestHW I/Xposed: dalvik.system.VMStack.getThreadStackTrace(Native Method)
java.lang.Thread.getStackTrace(Thread.java:580)
com.example.hooklogin.HookLogin.getMethodStack(HookLogin.java:205)
com.example.hooklogin.HookLogin.access$000(HookLogin.java:22)
com.example.hooklogin.HookLogin$6.afterHookedMethod(HookLogin.java:178)
de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:374)
android.provider.Settings$Secure.getString()
com.unity3d.player.UnityPlayer.nativeRender(Native Method)
com.unity3d.player.UnityPlayer.access$300(Unknown Source)
com.unity3d.player.UnityPlayer$e$1.handleMessage(Unknown Source)
android.os.Handler.dispatchMessage(Handler.java:98)
android.os.Looper.loop(Looper.java:135)
com.unity3d.player.UnityPlayer$e.run(Unknown Source)
05-31 14:06:29.623 4118-4138/com.DefaultCompany.TestHW D/Unity: UUID: 10xxxxxxxxxxxx95 => 72xxxxxxxxxxxxxxxxxxxxxxxxxxxx06

解决方案:

1:排查java代码

检查是否是我们自己代码,主动获取了android_id。

如以下代码块:

Settings.Secure.getString(
                activity.getApplicationContext().getContentResolver(),
                Settings.Secure.ANDROID_ID);

2:排查第三方插件、接入的SDK、Unity导入的package。

已知,Unity Ads package是会获取设备信息的,第三方插件Bugly也是会获取设备信息的。

这些需要放到游戏的用户隐私协议之后才能获取。

这方面自己通过逻辑控制即可。

3:Unity的相关设置

3.1 检查PlayerSettings 设置,2017及以下需要pro版才能勾选disable HW Statistics、2018个人版也可以、2019及以上已经移除该选项,统一由Services窗口的Analytics控制。

3.2 如果Unity开启过Analytics,然后再关闭依然后收到获取android_id的log。

需要手动将Unity的关于Analytics的setting配置修改掉。

如图左边会获取android_id,右边不在获取android_id。

至此,我想,你的项目不会再出现不受控制的android_id获取的情况,通过合规检查。

<think>嗯,用户想在Unity项目中集成Android和iOS平台的微信和支付宝支付功能。我需要先回顾一下之前的知识,看看之前的引用资料里有哪些相关信息。 首先,引用[1]提到了在Android上设置微信登录授权需要在"Wechat"类里配置,引用[3]也提到修改AndroidManifest文件,替换包名。这说明Android平台需要修改配置文件,比如AndroidManifest.xml,并且可能需要配置相关的类或Activity。对于iOS,引用[2]提到需要导入AlipaySDK的框架和资源文件到Plugins文件夹,这可能涉及到Xcode工程的配置。 接下来,用户的需求是支付集成,而不仅仅是登录授权。所以需要扩展这些步骤,包括支付SDK的导入、配置、调用接口等。微信和支付宝的支付流程可能不同,需要分别处理。 对于Android部分,可能需要添加必要的权限和Activity声明,比如微信支付需要的权限,以及处理返回结果的Activity。支付宝的Android集成可能也需要类似的步骤,比如添加权限和配置应用信息。 iOS部分,支付宝需要导入AlipaySDK.framework和Bundle,配置URL Schemes,处理应用跳转。微信支付则需要添加URL Scheme,配置LSApplicationQueriesSchemes,确保应用间能正确跳转。 另外,需要编写C#脚本调用原生代码,可能需要使用UnityAndroidJavaClass和AndroidJavaObject来调用Java方法,或者使用iOS的Objective-C插件。同时,要处理支付结果的回调,可能需要注册回调方法,并在收到结果后更新游戏状态。 需要注意的地方包括平台差异,比如Android和iOS的不同配置,以及支付SDK的版本兼容性。此外,密钥和ID的配置需要正确,避免支付失败。测试环节也很重要,尤其是在沙箱环境和真实环境中的测试,确保支付流程顺畅。 可能遇到的问题包括SDK导入错误、配置文件遗漏、回调处理不正确等,需要逐步排查。同时,确保遵循各平台的安全规范,比如签名验证,防止支付信息被篡改。 最后,生成相关问题时要考虑用户可能遇到的后续问题,比如性能优化、错误处理、UI适配等,帮助用户全面了解支付集成的各个方面。</think>### Unity移动支付功能集成指南(Android/iOS) #### 一、Android平台集成 1. **SDK准备** - 微信支付:下载[微信开放平台SDK](https://open.weixin.qq.com),将libammsdk.jar放入`Assets/Plugins/Android`目录 - 支付宝:下载[支付宝移动支付SDK](https://opendocs.alipay.com/open/204/105295),将alipaySdk.aar放入`Assets/Plugins/Android/libs` 2. **配置AndroidManifest** ```xml <!-- 微信支付配置 --> <activity android:name=".wxapi.WXPayEntryActivity" android:exported="true" android:launchMode="singleTop" /> <!-- 支付宝支付配置 --> <activity android:name="com.alipay.sdk.app.H5PayActivity" android:configChanges="orientation|keyboardHidden|navigation|screenSize" android:exported="false" android:screenOrientation="behind" /> ``` [^3] 3. **Unity调用示例** ```csharp // 微信支付调用 public void WechatPay(string prepayId) { #if UNITY_ANDROID AndroidJavaClass jc = new AndroidJavaClass("com.tencent.mm.opensdk.openapi.WXAPIFactory"); AndroidJavaObject api = jc.CallStatic<AndroidJavaObject>("createWXAPI", currentActivity, "wx_appid"); api.Call("registerApp", "wx_appid"); var payReq = new AndroidJavaObject("com.tencent.mm.opensdk.modelpay.PayReq"); payReq.Set("prepayId", prepayId); api.Call("sendReq", payReq); #endif } ``` #### 二、iOS平台集成 1. **SDK导入** - 支付宝:将`AlipaySDK.framework`和`AlipaySDK.bundle`拖入`Assets/Plugins/iOS` - 微信支付:导入`libWeChatSDK.a`至`Assets/Plugins/iOS`[^2] 2. **配置Info.plist** ```xml <!-- 微信支付 --> <key>LSApplicationQueriesSchemes</key> <array> <string>wechat</string> <string>weixin</string> </array> <!-- 支付宝 --> <key>LSApplicationQueriesSchemes</key> <array> <string>alipay</string> <string>alipays</string> </array> ``` 3. **Objective-C桥接文件** ```objectivec // WechatPayWrapper.m - (void)wechatPay:(NSString *)prepayId { PayReq *request = [[PayReq alloc] init]; request.prepayId = prepayId; [WXApi sendReq:request]; } ``` #### 三、通用配置注意事项 1. **密钥管理** - 微信支付需配置商户号(MCH_ID)和API密钥 - 支付宝需要设置RSA2密钥对 2. **回调处理** ```csharp // 支付结果接收 void OnApplicationPause(bool pauseStatus) { if (!pauseStatus) { // 检查支付结果 #if UNITY_IOS CheckIOSPaymentResult(); #endif } } ``` 3. **测试流程** - 微信沙箱测试需使用`SignTest`工具 - 支付宝测试需配置沙箱账户
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值