如何避免从Google Play getSkuDetails返回的inapp项目标题中的应用名称?

时间:2013-05-20 19:54:53

标签: android in-app-purchase

我希望使用应用内结算v3 API中的getSkuDetails()调用动态显示inapp购买选项列表,其中包含正确翻译的标题和相关价格。

然而,来自getSkuDetails()的“title”属性似乎总是​​"<item title> (app name)"形式,这不是很有用。如何在没有黑名单的情况下只获取没有应用名称的项目标题?

5 个答案:

答案 0 :(得分:12)

就是这样。我的意思是即使我不喜欢它,显然用户知道他是从应用程序购买但我认为谷歌将以这种方式回复它

答案 1 :(得分:3)

由于没有人使用实际的正则表达式模式来匹配SKU标题中括号中的应用名称,我想我只是将代码发布在这里以供进一步参考:

// matches the last text surrounded by parentheses at the end of the SKU title
val skuTitleAppNameRegex = """(?> \(.+?\))$""".toRegex()

val titleWithoutAppName = skuDetails.title.replace(skuTitleAppNameRegex, "")

正则表达式尽可能严格,以允许在您的SKU标题内的括号中添加其他文本,而不删除该文本(例如,像 Premium(Subscription)这样的SKU标题会保持原样)。您唯一应避免的是在应用程序名称中加上括号,但是只要稍稍调整一下正则表达式,您也可以解决该问题。

由于构建正则表达式非常昂贵,因此建议将其存储在字段中,并避免在每次解析SKU时都构造它们。

答案 2 :(得分:0)

适应@ubuntudroid对Java的回答,我就这样实现了:

String skuTitleAppNameRegex = "(?> \\(.+?\\))$";
Pattern p = Pattern.compile(skuTitleAppNameRegex, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(skuDetails.getTitle());
String titleWithoutAppName = m.replaceAll("");

答案 3 :(得分:0)

String productTitleWithAppName=skuDetails.getTitle();

String productTitleWithoutAppName = productTitleWithAppName.substring(0, productTitleWithAppName.indexOf("("));

答案 4 :(得分:0)

您不需要为此使用正则表达式。以下应该工作。这是用 C# 编写的,但您可以猜测如何用 Java 或任何其他语言来实现。

string title = getTitle(); // get title
int appNameStartIndex = title.LastIndexOf("("); // find last index of (.
string titleWithoutAppName = title.Substring(0, appNameStartIndex); // and :)