Android 14中打开Razorpay支付网关遇SecurityException问题求解
解决Android 14下Razorpay支付网关的SecurityException报错
问题根因
Android 14(API 34)对广播接收器新增了强制安全规则:所有静态、动态注册的接收器必须明确指定RECEIVER_EXPORTED或RECEIVER_NOT_EXPORTED标志,否则直接抛出java.lang.SecurityException。哪怕你已经在Manifest里设了android:exported="true",如果Razorpay SDK内部动态注册接收器时没适配这个规则,照样会报错。
具体解决方法
优先升级Razorpay SDK到最新版
Razorpay官方已经针对Android 14的要求更新了SDK,直接把你的依赖版本升到最新就能解决大部分问题。比如在Gradle里这么改:implementation 'com.razorpay:checkout:1.6.40+' // 替换为当前最新版本号修正Manifest里的接收器配置
你现有配置里的android:permission=""是空值,这可能会触发额外的安全校验问题,建议直接删掉这个属性,配置改成这样:<receiver android:name="com.razorpay.RzpTokenReceiver" android:exported="true"> <intent-filter> <action android:name="rzp.device_token.share" /> </intent-filter> </receiver>手动适配动态注册逻辑(万不得已时用)
如果升级SDK后还是报错,得检查是否存在动态注册接收器的代码(可能是SDK内部或者你自己加的),注册时必须加上对应的标志:// 示例:如果接收器需要接收外部广播,用RECEIVER_EXPORTED IntentFilter filter = new IntentFilter("rzp.device_token.share"); registerReceiver(new RzpTokenReceiver(), filter, Context.RECEIVER_EXPORTED);要是接收器只处理应用内部的广播,就换成
Context.RECEIVER_NOT_EXPORTED。
内容的提问来源于stack exchange,提问作者Devendra Joshi
相关产品推荐
相关产品推荐

