典型情况下,用户在其Android设备上有两个帐户xyz@gmail.com和abc@gmail.com.用户使用帐户xyz@gmail.com在版本1.0上购买我的高级升级,然后他们更新到版本1.1并且代码(应用内购买代码)现在认为他们使用的是帐户abc@gmail.com,因此它认为用户尚未购买高级升级.我知道它使用了错误的帐户,因为他们向我发送了他们的订单电子邮件,然后他们告诉我,如果他们按下$ amount,那么在购买对话框中列出了错误的电子邮件.此时唯一的解决方法是使用Play商店桌面网站和正确的帐户卸载并重新安装.
我正在使用来自示例的IABHelper以及StackOverflow的一些修复.据我所知,我甚至无法选择他们正在使用的帐户.
关于可能发生的事情的任何想法?这有发生在其他人身上吗?
代码超出了StackOverflow的长度限制,所以我把它放在http://pastebin.com/hLquZ6SP
编辑:我现在有一个用户声称每次更新应用程序时都会发生这种情况.
编辑:这在分阶段推出期间发生了很多,我认为因为获得分阶段更新的帐户不是用户购买IAP的帐户.
android in-app-purchase in-app-billing google-play google-play-services
我已经将来自Google的APK扩展文件下载库集成到我的项目中,它或多或少都可以正常工作(除了一些小问题,其他人已经在SO上报告了).
但是,我很难测试它.当我第一次测试时,我将已签名的APK +主扩展文件版本1上传到Google Play,效果很好.
但是,当我升级我的应用程序时,与主扩展文件版本2一起,应用程序无法再下载文件 - 库立即返回NO_DOWNLOAD_REQUIRED,但文件不存在!我开始调试LVL检查通行证,但可下载的文件表是空的!当我试图调试细节时...它突然又开始工作了!
我认为这是一种暂时的故障并继续我的工作,只是再次更新我的APK和扩展文件后再次遇到同样的问题.应用程序通过LVL检查,但库再次假定没有要下载的文件.
这是谷歌图书馆的一个已知问题吗?或者我可能需要等待一段时间,直到文件在Google的云上可用?
编辑:它刚开始工作正常.它似乎需要一些时间让文件以某种方式在Google方面传播.关于该库的一个坏处是,一旦它验证了许可证,它就再也不会检查下载列表,所以我不得不重新安装该应用程序.奇怪......为什么这么复杂?
我的日志......
05-05 12:02:50.620:E/AndroidRuntime(32319):java.lang.RuntimeException:无法启动活动ComponentInfo {com.xxxxxxxx.apps.xxx/com.xxxxxx.apps.xxx.activities.SplashActivity}:java .lang.IllegalArgumentException:Service Intent必须是显式的:Intent {act = com.android.vending.licensing.ILicensingService}
我在哪里修复我的代码?
package com.xxxxxx.apps.xxx.activities;`
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings.Secure;
import android.util.Log;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import com.android.vending.licensing.AESObfuscator;
import com.android.vending.licensing.LicenseChecker;
import com.android.vending.licensing.LicenseCheckerCallback;
import com.android.vending.licensing.ServerManagedPolicy;
import com.xxxxxxxx.apps.xxxx.R;
import com.xxxxxx.libs.util.Platform;
public class SplashActivity extends Activity {
/*[ $if full $ ]*/
private final class xxxLicenseCheckerCallback implements LicenseCheckerCallback {
@Override
public void allow() {
Log.i(TAG, "License OK");
licenseResponseHandler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent …Run Code Online (Sandbox Code Playgroud) Android 新版本 - “Lollipop”(API 21)带来了很多变化,但如果您希望将您的应用程序定位到该 API,它会付出一些代价。
当我们开始让我们的应用程序适应新的 API 时,我们遇到的第一个问题是 IllegalArgumentException: Service Intent must be explicit
如果您遇到了该问题,并且您实际上打算以显式方式使用您的意图(这意味着在启动服务时您希望恰好命中 1 个服务操作),那么这里有一个快速解决方法来转换隐式 --> 显式:
public static Intent createExplicitFromImplicitIntent(Context context, Intent implicitIntent) {
// Retrieve all services that can match the given intent
PackageManager pm = context.getPackageManager();
List<ResolveInfo> resolveInfo = pm.queryIntentServices(implicitIntent, 0);
// Make sure only one match was found
if (resolveInfo == null || resolveInfo.size() != 1) {
return null;
}
// Get component info and create ComponentName
ResolveInfo serviceInfo = resolveInfo.get(0);
String packageName …Run Code Online (Sandbox Code Playgroud) 对于inAppBilling我的应用程序使用集市(伊朗Android Market的)API.
一切都是正确的但在Android 5 Lollipop中这不能正常工作并返回错误:
经过多次搜索发现这个类似的问题和这个链接也是这个.(solutions are similar together)
所以我尝试添加这一行:
serviceIntent.setPackage("ir.cafebazaar.pardakht");
Run Code Online (Sandbox Code Playgroud)
在此之后:
Intent serviceIntent = new Intent("ir.cafebazaar.pardakht.InAppBillingService.BIND");
Run Code Online (Sandbox Code Playgroud)
现在app返回此错误:
java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.util.List.isEmpty()' on a null object reference
at farahang.tedAmouz.BzrBl.util.IabHelper.Setuping(IabHelper.java:227)
at farahang.tedAmouz.adapters.slideMenuAdapter.onClick(slideMenuAdapter.java:155)
Run Code Online (Sandbox Code Playgroud)
代码在完全正确的Android 5 Lollipop版本下工作只是有问题Android 5 Lollipop!
所以我的所有应用程序在5.0上运行时都会遇到此异常...
java.lang.IllegalArgumentException:Service Intent必须是显式的:Intent {act = com.android.vending.licensing.ILicensingService}
谷歌搜索后,我发现这是由LicenseChecker.java中的Google Licensing代码中的错误引起的,但建议的更改有点不同,所以我不知道该怎么做.它让我感到震惊,我们应该为Googles代码制作mod.
我的LicenseChecker.java中的可疑代码是......
Log.i(TAG, "Binding to licensing service.");
try {
boolean bindResult = mContext
.bindService(
new Intent(
new String(
Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U="))),
this, // ServiceConnection.
Context.BIND_AUTO_CREATE);
Run Code Online (Sandbox Code Playgroud)
我们应该补充一下
serviceIntent.setPackage("com.android.vending");
Run Code Online (Sandbox Code Playgroud)
代码中的某个地方.
所以我的问题是(1)这真的是修复吗?(2)如果是这样,修改后的代码到底应该是什么样的?谢谢,迪恩