小编Mar*_*ann的帖子

无法在 Play 商店中禁用 Android 订阅的重新订阅

长话短说

为什么我们的用户可以在 Play 商店上重新订阅,尽管在 Google Play 控制台上选择退出?


我们正在 Android 应用程序上实现订阅。我们已将“重新订阅”选项选择为“未启用”。

然而,当我们通过取消订阅并等到上一个订阅过期后进行测试时,用户可以选择在一段时间内直接从 Play 商店而不是应用程序重新订阅(“应用程序外”)购买”),然后他们以前的订阅完全消失。

当发生这种情况时,我们的 BE 会收到通知,但没有任何有关用户身份的信息,因为这是一次全新的购买,因此我们的 BE 不知道哪个用户有权重新订阅计划。

我要指出的是,我们不想依靠我们的移动应用程序来拦截此购买并更新我们的后端 - 因为订阅也会影响我们网站上的权利,并且我们不确定我们的应用程序下次何时启动。

这个“重新订阅”选项已在我们的 Google Play 开发控制台上被禁用,并且它似乎在约 1-3 小时后消失(在测试环境中),但在这段时间内,我们无法阻止用户“重新订阅”在 Play 商店中订阅”

android android-billing android-developer-api google-developers-console

16
推荐指数
1
解决办法
1092
查看次数

androidX jetifier - 有没有办法忽略jetifying .JAR?

尝试将我的应用程序更新为androidX依赖项。按照此处的说明进行操作,编译失败。错误来自JetifyTransform任务无法处理某个 .JAR 依赖项(仅供参考 -三星 Spass SDK):

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:kaptGenerateStubsStandardNo_vendorDebugKotlin'.
> Could not resolve all artifacts for configuration ':app:standardNo_vendorDebugCompileClasspath'.
   > Failed to transform file 'pass-v1.2.2.jar' to match attributes {artifactType=processed-jar} using transform JetifyTransform
      > Failed to transform '/Users/hanandann/StudioProjects/ArnakPaymentsAndroid/Payments/app/libs/pass-v1.2.2.jar' using Jetifier. Reason: null. (Run with --stacktrace for more details.)
   > Failed to transform file 'pass-v1.2.2.jar' to match attributes {artifactType=processed-jar} using transform JetifyTransform
      > …
Run Code Online (Sandbox Code Playgroud)

android androidx android-jetifier

9
推荐指数
2
解决办法
9474
查看次数

How to find source of crashes of type java.lang.RuntimeException: Parcel android.os.Parcel@####: Unmarshalling unknown type code XXXX at offset YYY

Our crash reporting system is logging crashes of this type:

Caused by java.lang.RuntimeException: Parcel android.os.Parcel@8bf0d1f: Unmarshalling unknown type code 6881391 at offset 356
   at android.os.Parcel.readValue(Parcel.java:2779)
   at android.os.Parcel.readSparseArrayInternal(Parcel.java:3148)
   at android.os.Parcel.readSparseArray(Parcel.java:2362)
   at android.os.Parcel.readValue(Parcel.java:2757)
   at android.os.Parcel.readArrayMapInternal(Parcel.java:3067)
   at android.os.BaseBundle.unparcel(BaseBundle.java:257)
   at android.os.Bundle.getSparseParcelableArray(Bundle.java:958)
   at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1329)
   at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1759)
   at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1827)
   at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3244)
   at android.support.v4.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:3194)
   at android.support.v4.app.Fragment.restoreChildFragmentState(Fragment.java:1444)
   at android.support.v4.app.Fragment.onCreate(Fragment.java:1415)
   at com.payments.base.BaseFragment.onCreate(BaseFragment.java:68)
   at com.payments.app.fragments.TopLevelFragment.onCreate(TopLevelFragment.java:422)
   at android.support.v4.app.Fragment.performCreate(Fragment.java:2331)
   at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1386)
   at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1759)
   at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1827)
   at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3244)
   at android.support.v4.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:3194)
   at android.support.v4.app.Fragment.restoreChildFragmentState(Fragment.java:1444)
   at android.support.v4.app.Fragment.onCreate(Fragment.java:1415)
Run Code Online (Sandbox Code Playgroud)

What I know: This occurs when app is restored …

android parcelable

7
推荐指数
1
解决办法
242
查看次数

json Enum 反序列化破坏了 kotlin null 安全性

我使用Kotlin data classesGSON来反序列化 JSON 模式,并实现默认值以防止 JSON 中出现空对象。另外,JSON int 枚举使用@SerializedName注释映射到 Kotlin 枚举值:

data class Person(@SerializedName("name")
           val name: String = ",
           @SerializedName("age")
           val age: Int = 0,
           @SerializedName("hairColor")
           val hairColor: Color = Color.NONE)

enum class Color{
    @SerializedName("1")
    BROWN,
    @SerializedName("2")
    BLONDE,
    NONE
}
Run Code Online (Sandbox Code Playgroud)

专注于枚举反序列化 - 这对于字段与已知枚举匹配或 JSON 中完全不存在该字段的情况非常有效,在这种情况下将实现默认枚举。

但是 - 如果 JSON 中接收到的枚举映射到我的 kotlin 枚举中的已知枚举值 - 生成的反序列化枚举将为 null!

{"name":"Joe","age":10,"hairColor":1} ->
Person(name=Joe, age=10, hairColor=BROWN)

{"name":"Jim"} ->
Person(name=Jim, age=0, hairColor=NONE)

{"name":"Jeff", "age":8,"hairColor":3) ->
Person(name=Jane, age=8, hairColor=null)
Run Code Online (Sandbox Code Playgroud)

Gson …

enums android json gson kotlin

5
推荐指数
1
解决办法
3082
查看次数

使用“make project”构建的Android应用程序崩溃,但使用“Run”安装时不会崩溃

我们正在构建一个使用HighCharts Android包装库*的应用程序。在开发过程中,应用程序通过运行命令安装在设备/模拟器上,一切正常。

但是,在创建构建视图Make ProjectGenerate Signed APK或由CI/DC Pipelines生成的构建时- 应用程序总是崩溃。

Highcharts调用时在某处发生崩溃Gson(需要在Gradle构建文件中作为依赖项在外部提供)。Gson然后抛出java.lang.ArrayIndexOutOfBoundsException异常。(下面的堆栈跟踪)

它不是什么:

  1. 与安卓版本无关。在 API 29、25、23 上测试
  2. 与设备无关。发生在运行干净的android 的物理设备和模拟器上。
  3. Proguard相关(我认为) - 也发生在debug构建中,并且keep为了安全起见,还添加了激进的声明。
  4. 相同的图表在我们的网站和 iOS 应用程序上正常工作。

可能相关:

Highcharts Android尚不兼容Hilt DI,它深深嵌入我们的代码中。显然,Highcharst期望Context提供给它的View构造函数的Activity类型是类型,Hilt因为 in 将 aFragmentContextWrapper注入到Fragments带有@AndroidEntryPoint. 此处的说明和解决方法

我想了解的是:

.APK在 …

android highcharts android-build android-highcharts dagger-hilt

5
推荐指数
0
解决办法
126
查看次数