请注意,您有责任确保您的应用内使用的第三方代码(例如某个 SDK)以及该第三方针对您的应用采取的做法均符合所有 Google Play 开发者计划政策。
重点:应用元数据、应用内体验、账号信息、应用内的任何第三方代码、SDK。
2. Google Play违规处置措施
不同的违规处置措施会对您的应用产生不同的影响。我们结合使用人工与自动化评估机制来审核应用及应用内容,检测和评估哪些内容违反政策并会对用户和整个 Google Play 生态系统造成伤害。
使用自动化模型有助于我们检测更多违规行为和更快地评估潜在问题,从而确保 Google Play 为所有人打造安全的使用体验。自动化模型会移除违反政策的内容,但如果需要更缜密的审查(例如需要了解内容的上下文)才能判定,模型会为内容添加标记,交由负责内容评估并且经过培训的操作人员和分析人员评估。然后,我们会利用人工审核的结果来构建训练数据,以进一步改进机器学习模型。
重点:人工审核、机器审核、上下文信息、模型训练。
PS:你的每一次违规,都在帮助Google Play训练模型!!!
我们需要熟悉每一个风险环节,在排查原因之前,需要明确了解当前应用、账号属于哪一个违规处罚:
2.1 被拒
注意:在解决所有违反政策的行为之前,请勿尝试重新提交被拒的应用。
2.2 下架
注意:在解决所有违反政策的行为之前,请勿尝试重新发布已下架的应用。
2.3 暂停
注意:应用被暂停视同于受到警示,会对您的 Google Play 开发者账号的信誉造成不利影响。多次收到警示可能会导致个人以及相关的 Google Play 开发者账号被终止。
2.4 公开范围受限
注意:应用在 Google Play 上的曝光度受到限制,但可以正常访问链接。
2.5 地区限制
注意:特定地区的用户才能通过 Google Play 下载您的应用。
2.6 账号受限状态
注意:解决所有违反政策的行为后,将能重新发布应用。
2.7 终止账号
注意:如果您尝试开设一个新帐号,那么该新帐号也会被终止(不退还开发者注册费),因此请勿在您的任意帐号被终止时注册新的 Play 管理中心帐号。
2.8 休眠账号
注意:休眠账号是指处于闲置或弃用状态的开发者账号,可申诉退款或激活,也可以重新创建新账号。
二、Google Play高危违规处置措施应对:拒审/封号
Google Play提交应用被拒审的常见原因通常与违反其开发者政策有关。以下是一些常见的拒审/封号原因及其解决方法:
1. 高风险行为
原因:
新开发者账号权重太低,新号提新包极大概率高风险行为封号。
解决方法:
通过科学养号措施活跃账号,提升账号权重。
靠谱渠道购买老开发者账号。
常见邮件:
2. 违反隐私政策
原因:
应用未提供清晰、完整的隐私政策,或未正确处理用户数据。
解决方法:
在应用内和 Play Store 列表中添加隐私政策链接。
确保隐私政策明确说明数据收集、使用和共享方式。
遵守 GDPR、CCPA 等数据保护法规。
常见邮件:
3. 不当内容
原因:
应用包含色情、暴力、仇恨言论、歧视性内容等。
解决方法:
移除所有违规内容,包括文字、图像、音频和视频。
确保应用内容适合所有年龄段的用户。
常见邮件:
4. 知识产权侵权
原因:
应用使用未经授权的受版权保护的内容(如图片、音乐、视频等)。
解决方法:
确保所有内容均为原创或已获得授权。
移除未经授权的内容。
5. 功能问题
原因:
应用存在崩溃、加载失败、功能无法使用等技术问题。
解决方法:
在提交前进行全面测试,修复所有已知问题。
使用 Google Play 的 预发布测试工具 检查问题。
6. 元数据违规
原因:
应用的标题、描述、截图或图标包含误导性信息、关键词堆砌或不相关内容。
解决方法:
确保元数据准确描述应用功能。
避免使用无关的关键词或夸大宣传。
7. 广告违规
原因:
广告展示方式不当(如遮挡内容、强制点击等),或包含违规内容。
解决方法:
遵循 Google 的广告政策,确保广告展示方式合理。
使用合规的广告网络和内容。
常见邮件:
8. 应用评级不准确
原因:
应用内容与所选年龄评级不符。
解决方法:
根据应用内容选择合适的年龄评级。
确保应用内容与评级一致。
9. 恶意行为
原因:
应用包含恶意软件、间谍软件或欺诈行为。
解决方法:
移除所有恶意代码或行为。
确保应用安全,不损害用户设备或数据。
10. 重复应用
原因:
应用与现有应用功能高度相似,缺乏独特性。
解决方法:
确保应用具有独特的功能或内容。
避免提交多个功能相似的应用。
11. 支付政策违规
原因:
应用内购买未使用 Google Play 结算系统,或未正确处理订阅。
解决方法:
使用 Google Play 结算系统处理所有应用内购买。
确保订阅管理符合 Google 的政策。
12. 用户生成内容(UGC)管理不当
原因:
应用允许用户生成内容,但未提供有效的审核机制。
解决方法:
添加内容审核机制,过滤不当内容。
提供举报功能,方便用户举报违规内容。
13. 权限滥用
原因:
应用请求不必要的权限,或未合理使用权限。
解决方法:
仅请求与应用功能相关的权限。
在隐私政策中说明权限用途。
14. 目标 API 级别过低
原因:
应用未更新至最新的目标 API 级别。
解决方法:
将应用的目标 API 级别更新至 Google 要求的最低版本。
15. 误导性行为
原因:
应用功能与描述不符,或诱导用户进行某些操作。
解决方法:
确保应用功能与描述一致。
避免使用误导性设计或诱导用户行为。
常见邮件:
16. 违反家庭政策
原因:
针对儿童的应用未遵守 Google Play 家庭政策。
解决方法:
确保应用内容适合儿童。
遵守广告和隐私政策的相关规定。
本期结语
Google Play应用违规,更多的是需要开发者自查,在排除可疑点以后,总结经验,避免下次出现相同问题,没有一个被封账号是无辜的,我们只能在自查完成以后积极申诉,主动承认错误。
四、您可以设置一个免费试用期,让用户可以在购买前试用您的订阅内容。试用期将持续到您设置的时间,随后将自动转换为按照订阅的结算间隔和价格管理的完整订阅。Google Play 支持所有订阅类型的免费试用,包括季节性订阅。
五、在 Developer Console 中或者通过 API 完成订阅商品详情的配置后,您可以在应用商品列表中发布订阅。在商品列表中,您可以添加订阅、应用内商品,或者两者。您可以添加可访问不同内容或服务的多个订阅,也可以添加可访问相同内容但间隔或价格不同的多个订阅,例如促销。
六、将订阅或应用内商品添加到商品列表后,您必须先发布商品,之后 Google Play 才能将其设置为可以购买。请注意,您还必须发布应用,以便 Google Play 将商品设置为可以在应用内购买。您可以从应用的商品列表中移除订阅商品,不让用户查看或购买。
用户取消订阅
一、用户可以从 Play 商店应用的 My Apps 屏幕查看其所有订阅的状态并根据需要取消订阅。目前不支持从发起购买的应用内取消订阅。
二、在用户取消订阅时,Google Play 不会为当前结算周期提供退款。相反,Google Play 允许用户继续访问已取消的订阅,直至当前结算周期结束,随后它将终止订阅。例如,如果用户购买了一个按月订阅并在当前周期的第 15 天将其取消,Google Play 会将订阅的截止时间视为当前周期的第 30 天(或者其他日期,具体取决于月份)结束。
三、当用户卸载包含已购买订阅的应用时,Play 商店应用将通知用户存在有效订阅。如果用户选择继续卸载,应用将被移除,订阅仍保持有效,重复结算也将持续。用户可以随时返回 Play 商店应用的 My Apps 屏幕取消关联的订阅。
private PurchasesUpdatedListener purchasesUpdatedListener = new PurchasesUpdatedListener() {@Overridepublic void onPurchasesUpdated(BillingResult billingResult, List<Purchase> purchases) {// To be implemented in a later section.}
};
4.3初始化SDK后,需要与 Google Play 建立连接,使用startConnection()方法,startConnection是异步进行,这个时候需要一个BillingClientStateListener进行回调连接的结果,当连接完成会走onBillingSetupFinished()回调,通过返回的billingResult.getResponseCode()去判断是否真正的链接成功,这个code 有下面几个值,这个BillingClientStateListener还有一个Google Play 失去连接的回调,这个时候我们需要实现重试逻辑,就是再次调用startConnection()函数。
public void startConnection() {mBillingClient.startConnection(new BillingClientStateListener() {@Overridepublic void onBillingSetupFinished(BillingResult billingResult) {if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {// The BillingClient is ready. You can query purchases here.queryProductDetailsParams();queryOldOrder();}}@Overridepublic void onBillingServiceDisconnected() {// Try to restart the connection on the next request to// Google Play by calling the startConnection() method.}});}
4.4 获取商品
当startConnection()回调成功时,这个时候我们就可以根据ProductId去Google Play获取具体的商品了,这个时候一般会通过API去自己的Server 获取一个ProductIdList,然后根据后台返回的productId去Google Play 获取商品详情。
// The BillingClient is ready. You can query purchases here.List<String> subscribeSkuList = new ArrayList<>();subscribeSkuList.add("Subscribe01");subscribeSkuList.add("Subscribe01");subscribeSkuList.add("Subscribe01");SkuDetailsParams.Builder subscribeParams = SkuDetailsParams.newBuilder();subscribeParams.setSkusList(subscribeSkuList).setType(BillingClient.SkuType.SUBS);mBillingClient.querySkuDetailsAsync(subscribeParams.build(), new SkuDetailsResponseListener() {@Overridepublic void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) {// Process the result.Log.i(TAG, "querySkuDetailsAsync 2 onSkuDetailsResponse billingResult.getResponseCode : " + billingResult.getResponseCode() + " skuDetailsList :" + skuDetailsList);mSubscribeSkuDetailsHashMap.clear();if (skuDetailsList != null && skuDetailsList.size() > 0) {for (SkuDetails skuDetails : skuDetailsList) {mSubscribeSkuDetailsHashMap.put(skuDetails.getSku(), skuDetails);}}}});
当商品查询成功后就可以结合Server返回的商品信息给用户展示商品列表了
注意:有些 Android 设备安装的可能是旧版 Google Play 商店应用,不支持订阅等某些商品类型。在您的应用进入结算流程之前,您可以调用 isFeatureSupported() 以确定设备是否支持您要销售的商品。如需查看可支持的商品类型的列表,请参阅 BillingClient.FeatureType。
// An activity reference from which the billing flow will be launched.
Activity activity = ...;ImmutableList productDetailsParamsList =ImmutableList.of(ProductDetailsParams.newBuilder()// retrieve a value for "productDetails" by calling queryProductDetailsAsync().setProductDetails(productDetails)// to get an offer token, call ProductDetails.getSubscriptionOfferDetails()// for a list of offers that are available to the user.setOfferToken(selectedOfferToken).build());BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder().setProductDetailsParamsList(productDetailsParamsList).build();// Launch the billing flow
BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
4.6购买成功的回调
在咱们4.2初始化SDK的时候添加了一个PurchasesUpdatedListener,当用户购买成功后Google Play 会调用 onPurchasesUpdated(),我们根据responseCode去区分用户购买成功与否.
void handlePurchase(Purchase purchase) {// Purchase retrieved from BillingClient#queryPurchasesAsync or your PurchasesUpdatedListener.Purchase purchase = ...;// Verify the purchase.// Ensure entitlement was not already granted for this purchaseToken.// Grant entitlement to the user.ConsumeParams consumeParams =ConsumeParams.newBuilder().setPurchaseToken(purchase.getPurchaseToken()).build();ConsumeResponseListener listener = new ConsumeResponseListener() {@Overridepublic void onConsumeResponse(BillingResult billingResult, String purchaseToken) {if (billingResult.getResponseCode() == BillingResponseCode.OK) {// Handle the success of the consume operation.}}};billingClient.consumeAsync(consumeParams, listener);
}
消费订阅商品:订阅的处理方式与非消耗型商品类似。您可以使用 Google Play 结算库中的 BillingClient.acknowledgePurchase() 或 Google Play Developer API 中的 Purchases.Subscriptions.Acknowledge 确认订阅。所有初始订阅购买交易都需要确认。订阅续订不需要确认
Google Play 允许客户在一笔交易中购买多件相同的应用内商品,只需在购物车中指定商品数量即可(4.0 及更高版本的 Google Play 结算库支持该功能)。应用应根据指定购买数量来处理多件购买并授予权利。注意:多件购买适用于消耗型应用内商品,即可以购买、消耗及再次购买的产品。请勿为不支持重复购买的商品启用该功能。
为了实现多件购买,应用的配置逻辑需要检查商品数量。可以从以下 API 访问 quantity 字段:
Google Play 结算库中的 getQuantity()。
Google Play Developer API 中的 Purchases.products.quantity。
添加用于处理多件购买的逻辑后,需要在 Google Play 管理中心的应用内商品管理页面上为相应的商品启用多件购买功能。
注意:请确保应用接受多件购买,然后再在 Play 管理中心启用该功能。您能需要强制更新到提供支持的应用版本,然后才能对商品启用该功能。
========================== This is a notification that your Google Play Publisher account has been terminated.
REASON FOR TERMINATION: Prior violations of the Content Policy and Developer Distribution Agreement by this or associated accounts as outlined in previous emails sent to the registered email address(es) of the Publisher account(s).
Please note that Google Play Publisher suspensions are associated with developers, and may span multiple account registrations and related Google services. If you feel we have made an error, you can visit the Google Play Help Center article for additional information regarding this termination.
Do not attempt to register a new developer account. We will not be restoring your account at this time.