小编hun*_*eva的帖子

Google Play结算 - sku android.test.purchased的签名验证失败

编辑:因为有些人还在检查这个帖子,我想提一下这是非常过时的,因为它是关于应用程序购买的v2,现在已经弃用了.请查看最新的(目前v3)文档,这非常简单

关于这个问题有很多线索,我认为我理解这个问题,但是,目前我无法通过实际购买进行测试,因为我目前没有有效的信用卡,Google接受的只有Maestro,不被接受.这就是我寻求帮助的原因(不是购买验证,而是验证我的思维过程是好的).

首先,问题来自新verifyPurchase方法.新方法检查签名,这应该没问题.但是,Google不会为测试ID提供任何签名,例如android.test.purchased.这导致下面的方法总是失败,并且在验证时总是返回false,即使假购买已经完成,并且我有一个确认对话框,购买确实是成功的.方法:

public static boolean verifyPurchase(String base64PublicKey, String signedData, String signature) {
    //if(BuildConfig.DEBUG) return true;

    if (TextUtils.isEmpty(signedData) || TextUtils.isEmpty(base64PublicKey) ||
            TextUtils.isEmpty(signature)) {
        Log.e(TAG, "Purchase verification failed: missing data.");
        return false;
    }

    PublicKey key = Security.generatePublicKey(base64PublicKey);
    return Security.verify(key, signedData, signature);
}
Run Code Online (Sandbox Code Playgroud)

问题来自TextUtils.isEmpty()检查,因为签名将为空,代码将返回false.我的临时测试解决方法是在代码中,注释掉了.如果我if(BuildConfig.DEBUG) return true;在测试方法的开头添加,一切正常,用户可以启动并运行高级功能,所以问题确实与签名有关.

另一个问题是,如果我购买android.test.purchased,我无法查询用户的库存,因此我不能确定,检查用户是否购买了高级功能的检查方法是有效的.

我的两个问题:

如果我if(BuildConfig.DEBUG) return true;从中删除该行verifyPurchase,并将android.test.purchasedid 替换为我提供的真实SKU的真实ID,我可以确定一切都能在我的情况下正常工作吗?我再说一遍,增加的调试功能一切正常.如果您需要查看更多代码,请告诉我们!

下面的方法检查用户是否购买了高级功能,如果他/她有,则设置相应的首选项,否则,如果有任何东西向南,它会保留原样.这种方法是否正确?我正在Application课堂上,每个应用程序启动时都这样做,以防止修修补补.

private void checkPremium()
{
    //get the helper up and …
Run Code Online (Sandbox Code Playgroud)

android in-app-billing

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

AutoCompleteTextView适配器,"隐藏"适配器?

我有3个AutoCompleteTextViews,我想在它们上注册2个String []适配器.目前,我这样做:

atw_from.setAdapter(new ArrayAdapter(ctx, android.r.layout.simple_dropdown_item_1line, stages_adapter));
Run Code Online (Sandbox Code Playgroud)

假设我的用户想输入"Középmező",他开始输入"Közé",他将会选择Középmező,直到这个,它非常简单.但是如果用户懒得键入重音(并且很多都是懒惰的),那么他只会输入Kozepmezo,然后他就不会得到任何报价,因为我的String []中没有Kozepmezo.我想要的是,如果他输入"Koze",他应该被提供给Középmező,所以即使他没有使用口音,他也会一直提供带有重音的实际单词.

目前,我有一个非常愚蠢的解决方案,我有一个String [],其大小是原始[]的两倍,前半部分包含带重音的单词,第二个包含deaccented版本.所以现在,如果他打字Közé,他将被提供Középmező,如果他输入Koze,他将被提供Kozepmezo.它的工作原理是因为服务器可以处理这两个版本,但它看起来很傻,我想解决它.

据我所知,我应该制作一个完整的自定义适配器.这是最好的方法,还是SDK中包含任何解决方案?如果我应该制作自定义适配器,有人能指出我正确的方向,如何做到这一点?:)

编辑:添加我自己的答案,应该为每个人工作,为其他答案欢呼,这导致我向好的方向!

android android-adapter

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

以编程方式创建小部件

据我了解,android 小部件需要 RemoteViews,而不是 View,就像活动一样。

我的问题:有什么办法可以完全避免xml,用java代码构建整个布局?

替代问题:我可以以某种方式检索视图,就像我会使用的那样findViewById(int)吗?例如:LinearLayout linearLayout=(LinearLayout)findViewById(R.id.xxx);这样我就可以访问基本布局,并按照我想要的方式进行操作。

谢谢!

android android-widget remoteview

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

关于更改ImageButton的ImageBitmap的动画

假设我有一个ImageButton btn.我有两个不同的Bitmap,bmp1bmp2.默认情况下,btn显示bmp1如下:

btn.setImageBitmap(bmp1);
Run Code Online (Sandbox Code Playgroud)

我可以以某种方式制作动画,交叉淡化,bmp1bmp2在调用以下内容时:

btn.setImageBitmap(bmp2);
Run Code Online (Sandbox Code Playgroud)

所以问题是,是否有可能 - 如果是,如何 - 为ImageButtons上的位图更改设置动画?

android android-animation

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