小编Fra*_*oni的帖子

Android 应用内计费 - 如何处理退款

我正在尝试在我的应用程序中实现应用程序内计费,除了退款之外,一切都很好。过去几天我一直在反对这个问题,如果用户要求退款,似乎无法从应用程序方面知道这一点,这似乎令人难以置信。我希望能够在用户获得退款后撤销对一次性托管产品的访问权限(删除广告)。我没有使用后端,所以我依赖于 Google Play API。

我尝试过的是查询 Google Play API,queryPurchaseHistoryAsync它返回用户最近购买的列表。这似乎不起作用,因为在要求退款后购买的东西仍然存在(在写这篇文章之前等了一天)。

这是我所做的:

  1. 在真实设备上安装应用程序
  2. 购买应用内内容
  3. 验证应用程序是否解锁了内容
  4. 转到我的 Google Play 订单历史记录并申请应用内商品的退款
  5. 10 分钟后交易得到退款(完全没有我作为开发人员参与)
  6. App仍提供付费内容
  7. 清理 Play 商店应用数据和缓存
  8. App仍提供付费内容

那么任何用户都可以购买我的应用内产品,然后立即转到他的 Google Play 页面并要求退款?是我遗漏了一些明显的东西还是这个 API 是一场噩梦?

PurchaseState枚举是

  public @interface PurchaseState {
    // Purchase with unknown state.
    int UNSPECIFIED_STATE = 0;
    // Purchase is completed.
    int PURCHASED = 1;
    // Purchase is waiting for payment completion.
    int PENDING = 2;
  }
Run Code Online (Sandbox Code Playgroud)

我在这里没有看到与退款相关的任何内容,这在我看来是一个非常正常的用例,所以我仍然认为我缺少一些关键信息,我该怎么做?

谢谢你的帮助

android in-app-billing refund

12
推荐指数
1
解决办法
2145
查看次数

是否可以监控Android上的HTTP流量,知道哪个应用程序生成了请求?

我被要求制作一个Android应用程序,其中包括监视设备上安装的一组应用程序的传入和传出HTTP流量.我们的想法是必须生成一个日志:

App:xxx请求的URL:来自服务器的yyy响应是:zzz等等

我不认为这是可能的,没有定制rom并在那里做一些巫术,但即使是定制rom我也想不出办法做到这一点,任何人都有建议吗?

谢谢

networking android http sniffing

7
推荐指数
0
解决办法
7666
查看次数

Java中的尾递归优化和递归

我有一个关于尾调用优化的问题,我需要知道这个 java 代码的行为方式:

private void doSomething(int v) {

    inf f = someCalculation(v);

    if (f < 0) doSomething(v/2);
    else doSomething(v*2);

}
Run Code Online (Sandbox Code Playgroud)

这段代码是一个无意义的例子,但我的问题是,在这种情况下:

  1. 第一个 doSomething() 调用会被优化吗?
  2. 第二个 doSomething() 调用会被优化吗?
  3. if/else 块以任何方式影响优化?

谢谢

编辑:

请提供一个示例,说明如果语言不是 Java 而是其他具有 TCO 的语言,您将如何执行此操作

java recursion tail-call tail-call-optimization

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

宏调用后为什么没有分号?

我正在学习我在Rust上发现的一些教程,并且遇到了我的Java/C/C++头脑无法理解的东西:

impl fmt::Display for Matrix {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "({}, {})\n({}, {})", self.0, self.1, self.2, self.3)
    }
}
Run Code Online (Sandbox Code Playgroud)

我不明白write!宏调用结束时缺少分号.如果我添加它,我会从编译器中收到错误.我猜测如果分号不存在则将Resultfrom write!用作返回值fmt,但任何人都可以提供更具体的解释,为什么会这样,如果它总是适用?

syntax rust

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

协程作用域构造函数内的协程上下文的 Kotlin 组合

这段代码到底在做什么?

private val supervisorJob = SupervisorJob()
protected val presenterScope = CoroutineScope(Dispatchers.Main + supervisorJob)
Run Code Online (Sandbox Code Playgroud)

结果是什么Dispatchers.Main + supervisorJob?我知道它一定是某种组合,但它是如何工作的呢?它怎么称呼?谢谢

kotlin kotlin-coroutines

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