我正在尝试在我的应用程序中实现应用程序内计费,除了退款之外,一切都很好。过去几天我一直在反对这个问题,如果用户要求退款,似乎无法从应用程序方面知道这一点,这似乎令人难以置信。我希望能够在用户获得退款后撤销对一次性托管产品的访问权限(删除广告)。我没有使用后端,所以我依赖于 Google Play API。
我尝试过的是查询 Google Play API,queryPurchaseHistoryAsync它返回用户最近购买的列表。这似乎不起作用,因为在要求退款后购买的东西仍然存在(在写这篇文章之前等了一天)。
这是我所做的:
那么任何用户都可以购买我的应用内产品,然后立即转到他的 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应用程序,其中包括监视设备上安装的一组应用程序的传入和传出HTTP流量.我们的想法是必须生成一个日志:
App:xxx请求的URL:来自服务器的yyy响应是:zzz等等
我不认为这是可能的,没有定制rom并在那里做一些巫术,但即使是定制rom我也想不出办法做到这一点,任何人都有建议吗?
谢谢
我有一个关于尾调用优化的问题,我需要知道这个 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)
这段代码是一个无意义的例子,但我的问题是,在这种情况下:
谢谢
编辑:
请提供一个示例,说明如果语言不是 Java 而是其他具有 TCO 的语言,您将如何执行此操作
我正在学习我在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,但任何人都可以提供更具体的解释,为什么会这样,如果它总是适用?
这段代码到底在做什么?
private val supervisorJob = SupervisorJob()
protected val presenterScope = CoroutineScope(Dispatchers.Main + supervisorJob)
Run Code Online (Sandbox Code Playgroud)
结果是什么Dispatchers.Main + supervisorJob?我知道它一定是某种组合,但它是如何工作的呢?它怎么称呼?谢谢