分类: Google Play

Google Play上架问题

  • Google Play应用拒审+账号被封!你的自查做对了吗?

    前言

    本文基于Google Play官方政策与实战经验,系统梳理公司账号申请、应用上架的全流程细节,分享开发者常见的“踩坑点”,并提供可落地的方案解答。

    不用期望Google审核能给到具体封号的原因:

    “开发者有责任处理所有政策问题,并进一步核查,以确保应用或账号的其余部分完全符合政策规定。如果您未能解决您的账号和所有应用中违反政策的行为,我们可能会采取其他违规处置措施。

    如果您屡次或严重违反(例如应用含有恶意软件、存在欺诈行为以及可能危害到用户或设备)这些政策或 开发者分发协议(DDA),您的开发者帐号或相关的 Google Play 开发者帐号可能会被终止”。

    注意屡次违规(一般大于等于3次),真的会封号了。

    复盘拒审、封号原因,道路且长,更多的是需要每一位开发者自查纠正,积累经验。

    一、Google Play违规处置流程和处置措施

    以下内容来自于Google Play 政策中心

    1. Google Play违规处置流程

    在审核内容或账号是否违法或违反我们的政策时,我们会在做最终判定前考虑各种信息,包括应用元数据(例如应用名称、说明)、应用内体验、账号信息(例如过往的违规记录)、应用内的任何第三方代码、通过报告机制(如果适用)提供的其他信息,以及自发审核信息。

    请注意,您有责任确保您的应用内使用的第三方代码(例如某个 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的舞台上,以专业与匠心,收获更多。

    作者:Android出海
    来源:稀土掘金

  • Google Play订阅功能怎么使用?

    Google Play订阅功能怎么使用?

    谷歌最近几年订阅功能的使用量大大增加,并且在营收方面也屡创新高,那么订阅功能具体是什么,如何使用呢?下面会为大家做一些基础的介绍,还有后台的操作使用说明。

    什么是订阅?

    订阅是应用内购买结算中提供的一种商品类型,利用订阅,您可以通过自己的应用出售内容、服务或功能,并以您指定的间隔定期自动向用户收费。

    配置和发布订阅

    一、您可以使用 Developer Console 配置和发布订阅,然后从 Android 设备上安装的应用出售这些订阅,就像出售其他应用内商品一样。 在 Developer Console 中,您可以创建订阅商品并将其添加到商品列表,然后为每个订阅设置价格和可选试用期,选择结算间隔,最后发布。

    后台创建订阅的位置

    配置订阅商品,要创建和管理订阅,您可以使用 Developer Console 为应用设置商品列表,然后为每个订阅商品配置以下属性:

    • 购买类型:始终设置为订阅
    • 订阅 ID:订阅的标识符
    • 发布状态:已取消发布/已发布
    • 语言:用于显示订阅的默认语言
    • 标题:订阅商品的标题
    • 说明:向用户提供的订阅详情
    • 价格:每个重复周期的默认订阅价格
    • 重复周期:结算周期的间隔(按周/按月/按年)
    • 宽限期:对于付款遭拒的情形,您可以选择为用户提供宽限期。用户必须在宽限期结束之前解决其付款问题。否则,系统会撤消其订阅。

    其他币种的价格(可以自动填充)

    后台操作界面的一部分

    当配置好以上信息后,在后台就已经成功创建了相应的订阅商品,后面要做的就是将订阅ID使用到游戏或应用内实现相应的功能即可。

    二、在 Developer Console 中创建订阅时,您可以使用任何可用币种设置订阅的价格。每个订阅都必须有一个不等于零的价格。 您可以为相同内容的多个订阅设置不同的价格。例如,您可以为按年订阅提供一个相对于按月订阅的折扣。

    三、如果要更改订阅的价格,您可以用新价格发布一个新订阅商品 ID,然后在应用中提供此订阅。已经购买的用户将继续支付原始价格,但是新用户将以新价格支付。

    四、您可以设置一个免费试用期,让用户可以在购买前试用您的订阅内容。试用期将持续到您设置的时间,随后将自动转换为按照订阅的结算间隔和价格管理的完整订阅。Google Play 支持所有订阅类型的免费试用,包括季节性订阅。

    五、在 Developer Console 中或者通过 API 完成订阅商品详情的配置后,您可以在应用商品列表中发布订阅。在商品列表中,您可以添加订阅、应用内商品,或者两者。您可以添加可访问不同内容或服务的多个订阅,也可以添加可访问相同内容但间隔或价格不同的多个订阅,例如促销。

    六、将订阅或应用内商品添加到商品列表后,您必须先发布商品,之后 Google Play 才能将其设置为可以购买。请注意,您还必须发布应用,以便 Google Play 将商品设置为可以在应用内购买。您可以从应用的商品列表中移除订阅商品,不让用户查看或购买。

    用户取消订阅

    一、用户可以从 Play 商店应用的 My Apps 屏幕查看其所有订阅的状态并根据需要取消订阅。目前不支持从发起购买的应用内取消订阅。

    二、在用户取消订阅时,Google Play 不会为当前结算周期提供退款。相反,Google Play 允许用户继续访问已取消的订阅,直至当前结算周期结束,随后它将终止订阅。例如,如果用户购买了一个按月订阅并在当前周期的第 15 天将其取消,Google Play 会将订阅的截止时间视为当前周期的第 30 天(或者其他日期,具体取决于月份)结束。

    三、当用户卸载包含已购买订阅的应用时,Play 商店应用将通知用户存在有效订阅。如果用户选择继续卸载,应用将被移除,订阅仍保持有效,重复结算也将持续。用户可以随时返回 Play 商店应用的 My Apps 屏幕取消关联的订阅。

    文章来源:知乎

  • 安卓集成Google Play支付(谷歌支付)最新版本

    安卓集成Google Play支付(谷歌支付)最新版本

    Google Play 支付文档:https://developer.android.com/google/play/billing/integrate

    Google Play 支付库已经升级到5.0了,相对之前的版本有不少的变化,现在记录下!

    接入Google Play 流程还是和之前一样:

    1.去Google console 申请开发者账号  https://play.google.com/console/  

    2.创建项目,上传APK

    3.去Google console项目后台开始设置商品:点击左侧Products—->In-app products(内购商品)或者Subscription(订阅商品)

     4.等Google Pay Console 后台创建好商品后,客户端和后端就可以开始集成了:

      4.1:将 Google Play 结算库依赖项添加到应用的

    dependencies {val billing_version = "5.0.0"implementation("com.android.billingclient:billing:$billing_version")
    }

    4.2:初始化支付SDK(也就是初始化BillingClient):支付过程中BillingClient用的比较多,一般项目中只创建一个BillingClient

    private BillingClient billingClient = BillingClient.newBuilder(context).setListener(purchasesUpdatedListener).enablePendingPurchases().build();

    初始化的时候需要一个:PurchasesUpdatedListener,PurchasesUpdatedListener是监听应用中所有购买交易的更新,这个listener非常重要,当用户购买或者订阅后都会走这个回调

    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()函数。

        @Retention(RetentionPolicy.SOURCE)public @interface BillingResponseCode {int SERVICE_TIMEOUT = -3;int FEATURE_NOT_SUPPORTED = -2;int SERVICE_DISCONNECTED = -1;int OK = 0;int USER_CANCELED = 1;int SERVICE_UNAVAILABLE = 2;int BILLING_UNAVAILABLE = 3;int ITEM_UNAVAILABLE = 4;int DEVELOPER_ERROR = 5;int ERROR = 6;int ITEM_ALREADY_OWNED = 7;int ITEM_NOT_OWNED = 8;}
      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 获取商品详情。

    查询内购的商品:

      List<String> skuList = new ArrayList<>();skuList.add("ProductId01");skuList.add("ProductId02");skuList.add("ProductId03");skuList.add("ProductId04");SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);mBillingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {@Overridepublic void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) {// Process the result.Log.i(TAG, "querySkuDetailsAsync 1 onSkuDetailsResponse billingResult.getResponseCode : " + billingResult.getResponseCode() + " skuDetailsList :" + skuDetailsList);mInAppSkuDetailsHashMap.clear();if (skuDetailsList != null && skuDetailsList.size() > 0) {for (SkuDetails skuDetails : skuDetailsList) {mInAppSkuDetailsHashMap.put(skuDetails.getSku(), skuDetails);}}}});

    查询订阅的商品:

     // 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。

    4.5.启动购买流程(开始购买)

       当用户点击某个商品时,从应用发起购买请求,请从应用的主线程调用 launchBillingFlow() 方法。此方法接受对 BillingFlowParams 对象的引用,该对象包含通过调用 queryProductDetailsAsync() 获取的相关 ProductDetails 对象。如需创建 BillingFlowParams 对象,请使用 BillingFlowParams.Builder 类。

    购买内购的商品:

        public void buyInAppProduct(SkuDetails skuDetails) {if (skuDetails == null) {return;}BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder().setSkuDetails(skuDetails).build();mBillingClient.launchBillingFlow(ActivityUtils.getTopActivity(), billingFlowParams).getResponseCode();}

    购买订阅的商品:

      public void buySubscribeProduct(SkuDetails skuDetails) {if (skuDetails == null) {return;}BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder().setSkuDetails(skuDetails).build();mBillingClient.launchBillingFlow(ActivityUtils.getTopActivity(), billingFlowParams).getResponseCode();}
    // 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去区分用户购买成功与否.

    如果成功购买商品,系统还会生成一个token,它是一个唯一标识符,表示用户及其所购应用内商品的商品 ID。可以在本地存储token,可以将令牌传递到安全的后端服务器(推荐用该方法)

        private PurchasesUpdatedListener purchasesUpdatedListener = new PurchasesUpdatedListener() {@Overridepublic void onPurchasesUpdated(BillingResult billingResult, List<Purchase> purchases) {if (billingResult == null) {return;}int responseCode = billingResult.getResponseCode();switch (responseCode) {case BillingClient.BillingResponseCode.OK:for (Purchase purchase : purchases) {SkuDetails skuDetails = null;String json = purchase.getOriginalJson();if (!TextUtils.isEmpty(json)) {PurchaseData purchaseData = GsonConverter.fromJson(json, PurchaseData.class);if (purchaseData != null) {skuDetails = getSkuDetailsDependProductId(purchaseData.getProductId());}}handlePurchase(purchase, (skuDetails != null && (BillingClient.SkuType.SUBS.equals(skuDetails.getType()))), "onPurchasesUpdated");}break;case BillingClient.BillingResponseCode.USER_CANCELED:Log.i(TAG, "purchasesUpdatedListener 3 user cancel ");break;default:Log.i(TAG, "purchasesUpdatedListener 4 error  " + responseCode);break;}}};
    @Override
    void onPurchasesUpdated(BillingResult billingResult, List<Purchase> purchases) {if (billingResult.getResponseCode() == BillingResponseCode.OK&& purchases != null) {for (Purchase purchase : purchases) {handlePurchase(purchase);}} else if (billingResult.getResponseCode() == BillingResponseCode.USER_CANCELED) {// Handle an error caused by a user cancelling the purchase flow.} else {// Handle any other error codes.}
    }

    4.7.处理购买交易(消费订单)

    当用户购买成功后,订单必须消费,如果不消费,三天后Google会自动退款,撤销购买交易。
    消费内购的商品:

    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 确认订阅。所有初始订阅购买交易都需要确认。订阅续订不需要确认

    BillingClient client = ...
    AcknowledgePurchaseResponseListener acknowledgePurchaseResponseListener = ...void handlePurchase(Purchase purchase) {if (purchase.getPurchaseState() == PurchaseState.PURCHASED) {if (!purchase.isAcknowledged()) {AcknowledgePurchaseParams acknowledgePurchaseParams =AcknowledgePurchaseParams.newBuilder().setPurchaseToken(purchase.getPurchaseToken()).build();client.acknowledgePurchase(acknowledgePurchaseParams, acknowledgePurchaseResponseListener);}}
    }

    4.8 查询历史订单,消费待处理的交易

        public void queryOldOrder() {mBillingClient.queryPurchasesAsync(BillingClient.SkuType.INAPP, new PurchasesResponseListener() {@Overridepublic void onQueryPurchasesResponse(@NonNull BillingResult billingResult, @NonNull List<Purchase> list) {if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {onHandlerQueryPurchases(list, false);}}});mBillingClient.queryPurchasesAsync(BillingClient.SkuType.SUBS, new PurchasesResponseListener() {@Overridepublic void onQueryPurchasesResponse(@NonNull BillingResult billingResult, @NonNull List<Purchase> list) {if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {onHandlerQueryPurchases(list, true);}}});

    4.9 处理多件购买交易:

    Google Play 允许客户在一笔交易中购买多件相同的应用内商品,只需在购物车中指定商品数量即可(4.0 及更高版本的 Google Play 结算库支持该功能)。应用应根据指定购买数量来处理多件购买并授予权利。注意:多件购买适用于消耗型应用内商品,即可以购买、消耗及再次购买的产品。请勿为不支持重复购买的商品启用该功能。

    为了实现多件购买,应用的配置逻辑需要检查商品数量。可以从以下 API 访问 quantity 字段:

    • Google Play 结算库中的 getQuantity()。
    • Google Play Developer API 中的 Purchases.products.quantity。

    添加用于处理多件购买的逻辑后,需要在 Google Play 管理中心的应用内商品管理页面上为相应的商品启用多件购买功能。

    注意:请确保应用接受多件购买,然后再在 Play 管理中心启用该功能。您能需要强制更新到提供支持的应用版本,然后才能对商品启用该功能。

  • google play帐号连续被封?

    google play帐号连续被封?

    一、Google账号被封原因推测及建议。

    谷歌账号被封,Google公司发送的被封邮件中不会明确解释具体的被封原因,可以通过申诉的方式去获取具体被封原因,但是这个有几率得不到Google的回复,在发送申诉邮件时态度一定要诚恳,首先先承认自己错了,然后再表明自己认真阅读了开发者政策,最后在说明自己不太清楚违反了哪一个政策,希望能给到原因和建议等。

    推测会有以下几个原因:

    1、APK被判定为马甲包:APK在代码,UI,应用描述等方面和商店其他产品相似度高引起的封号。

    (1)代码结构相似度高:框架封装的相似度高;类名方法名变量名等起名规则具有唯一性;使用了相同的域名;使用了非常多第三方框架等等。

    (2)UI相似度高:APK中的图片图标很多被用过;界面、主题、布局等和其他产品相似度高。

    (3)应用的logo、商店的宣传图、文字描述侵权或者高仿别人的。

    建议的解决方案:

    修改代码、UI和商店中可能重复度较高的部分。(为了减少再次被封的风险,尽量重新设计)

    类名方法名变量名等起名时不要起的具有唯一性(假如你开发了两款产品,因为起的名字很容易产生关联)

    2、关联问题:

    (1)有使用过的高风险的账号和主账号有关联;

    (2)测试账号测试过有问题的产品(以前我们一款产品因为违规被封,其他产品使用了同一个测试账号也被封了);

    (3)多个刚注册的账号和主账号有关联。

    (4)测试过被封账号的设备测试现有产品。

    (5)收付款信息绑定过高风险账号。

    建议的解决方案:

    规范账号的申请和使用;不允许使用刚申请的账号;购买稳定的老账号作为主账号,使用固定的VPS登录一段时间后,再操作;测试账号不要使用多部手机登录;尽量一台设备登录一个测试账号,一个测试账号绑定一个主账号。

    3、IP问题。账号的IP多次更改,比如使用VPN登录主账号,且多次更改VPN结点;

    建议的解决方案:

    不要使用VPN去登录主账号,使用VPS。测试账号也不要多次更换IP;发现有风险的账号第一时间和主账号解绑。

    4、应用被判定为违规项目。(由被投诉,被判定色情和第三方支付等原因引起多次下架后被封)

    建议的解决方案:

    发现应用被下架后,不要第一时间更包,停个两天,再去更。根据商店给的原因具体修改,定位到问题的位置需要重构。

    二、Google应用提审被拒、被下架的原因及解决方案:

    1、引入违规的第三方导致被拒被下架:目前碰到的是个推的SDK和bugly的热更新等部分功能。

    建议的解决方案:

    移除相关的SDK。

    2、内容分级填写不正确导致的提审被拒:

    建议的解决方案:

    社交方面的应用内容等级18+,更改内容分级重新提交即可。

    3、因为投诉引起的下架:

    (1)差评太多,导致稍微有用户投诉,就会被Google盯上,导致下架。

    (2)投诉太多引起的下架。

    建议的解决方案:

    (1)积极且及时回复用户在Google商店各种评论,尤其是差评。

    (2)应用内设置投诉、举报、客服、联系我们等入口,减少用户在商店的差评或者投诉。

    (3)刷好评。

    4、因为第三方支付引起的下架:

    像印度印尼等国家可能使用Google支付的人群不太多,需要接入第三方支付,这就有可能导致产品因为第三方支付原因被下架:

    建议的解决方案:

    (1)重构支付相关的代码;

    (2)将第三方支付以webView的形式加载。

    (3)对Google办事处所在位置进行屏蔽。

    5、色情暴力图片引起的下架:

    应用中存在用户上传的暴露/暴力/血腥等图片,违反了Google规则。

    建议的解决方案:

    对用户上传的图片进行审核,审核通过后的图片才能展示给其他用户看。

    6、Https引起的安全漏洞警告:

    这个一般不会导致下架,会以警告的形式出现,但是如果多次警告不改,就会引起下架:

    建议的解决方案:

    当验证SSL证书回调无效后,弹出一个对话框,让用户去判断的是否继续访问网页。

    7、Beta版引起的提审被拒:

    在使用时可能会出现一些警告,正式版会把警告改掉,但是有时会把Beta给遗忘没有更改,这就造成在提包时很有可能被拒,被拒原因只是说明你有警告没有处理,并没有说明是Beta版导致的,这就导致开发人员很难想到是Beta版导致的。所以再出现警告时,一定要想着把Beta版的包也做更新,或者直接把Beta版下掉。

    作者:谷歌开发者 来自知乎

      很多跨境卖家在Google搜索引擎上打广告,以此来获得精准流量,但是操作不当容易封号。那么Google账户为什么老是封号呢?今天就来分析一下Google账户封号的原因。

      首先是登录设备问题。有的跨境小伙伴在一台电脑上登录多个Google账户,这么操作是非常危险的,容易引起账号关联,导致封号。如果涉及到多个Google账号需要打理,建议使用指纹浏览器如Hubstudio,指纹浏览器可以为每个Google账号创建独立的窗口,每个窗口里面的浏览器cookie、帆布指纹、WebGL指纹、音频指纹、WebRTC指纹等各种信息都不一样,相当于一台全新的电脑,用指纹浏览器无论登录多少个Google账户都不会产生关联,非常安全。

      然后就是登录ip问题。有的卖家在一个ip下登录了多个Google账号,这种行为也会被系统检测到的,会被判定为垃圾号,建议使用代理ip,确保每个Google账号都能对应一个固定ip地址登录。

    Facebook和Google,是国内出海业务必须跨过的两座大山,Facebook掌管着全世界优质的用户流量, Google掌管着app的上架入口,而这两者又有着非常严密且变态的审查机制,折磨着很多开发者。

    Google Play 的app上架一般是出海要解决的第一个问题,其实接触过Google Play的开发者应该都有所体验,上架容易在架难,上架成功只是红军长征的第一步,保证长久在架才是最难的。

    常有人问我,有没有什么方法是可以万无一失,确保能长久在架的。有时候确实有一些方法,能钻谷歌的漏洞,让app的在架时间尽可能长一些,但谷歌的风控也一直在学习、进步、升级,就像一套AI智能系统,不断的查bug,修bug,毕竟这是谷歌吃饭的家伙,以谷歌的技术水平,只要想做也没什么是它做不到的。

    本期主要是给大家科普一下,为什么你的开发者账号会被移除,以及到底怎么避免关联下架。

    一、上架流程

    上架的流程我专门发过一篇推文讲过,在上架这一步你需要做的就是确保全部环境和信息都是绝对干净的,手机号、银行卡、网络环境等等都是完全没有关联的。

    干净账号

    上架的基本流程如下图,详细步骤可以查看我之前发的推文。

    Google Play 上架全流程_2023年谷歌应用商店上架流程

    二、关联下架

    关联下架是大部分谷歌开发者都会遇到的问题,下面这封邮件大家应该都不陌生。

    这是一封谷歌关联下架的模板邮件,即使你尝试去询问具体的下架原因或申诉自己没有违规,都是没啥用的,一旦被关联就是封号下架。

    为什么会被关联?

    账户关联是指Google Play识别到你的多个app可能是类似的马甲包,存在违反谷歌开发者政策的情况,一旦被发现就会一撸到底的全部下架、封号。

    如果你有且仅有一个包上过架,却出现被关联的情况,账号不干净没跑了。只上架一个包,不做马甲包的情况下,自己去注册开发者,是最最稳妥的方法。

    在保证环境干净的条件下,还有哪些部分是上架必须要注意的呢?

    1、隐私链接

    隐私链接要使用与违规账号不同的域名,隐私链接内涉及到的邮箱等联系方式要记得更换。

    2、账号密码&辅助邮箱

    多个开发者账号,密码不要用一样的,每一个账号都要有不同的密码,同时辅助邮箱也不要用与违规账号有关联的,都可能会被GG查出来。

    3、素材图/宣传文案

    商店素材图和宣传文案是每次必换的,可以做的简单些,但一定不能相似度太高。

    4、app名字/logo/UI

    如果你的应用曾被多次下架,就一定要更换App名字/logo/UI等素材内容,避免因为产品样式与违规产品相似度过高而被关联下架。

    5、后端接口

    ip要换新的, 域名也要换新的,更改接口结构, 加密数据传输。

    如果你提交的包被封了,那么下次提交时一定要更换服务器的IP地址和域名,一般游戏的HTTP请求是明文的,就是客户端发送给服务器的HTTP请求会把服务器的域名写的很清楚,Google会毫不客气地封掉这个域名,所以光换IP地址,不换服务器域名,是没有用的!

    6、客户端

    代码结构相似度过高,框架封装的相似度高,类名方法名变量名等起名规则具有唯一性;使用了相同的域名;使用了非常多第三方框架等等。

    拿资源包来举例, apk解压后assetsinData下的文件(以Unity工程为例)Google是通过比较文件名和文件内容的相似度来判断两个包是否是马甲包,不管你是用mono方式打包,还是IL2CPP方式打包,这个目录下会有一大堆用hash值命名的二进制文件,hash值来源于原始的文件名,这意味着如果两个apk里面有大量的二进制文件同名,那么对应的也就会有大量的实体资源文件同名,这个很危险。

    为了规避这个风险,可以把资源单独打一个AssetBundle包,并对这个包进行加密(简单的按位取反就行),这样就不会有太多二进制文件暴露在assetsinData目录下了,但这样处理也有个问题,就是如果这次提的包被封了,下次提的包AssetBundle文件就和这次相同了,需要更换一种加密方式。

    总结一句话:代码混淆不到位。混淆能做到什么程度就做到什么程度,不要抱有侥幸心理。

    对谷歌上架这件事,一定要仔细研读Google Play的上架政策,同时在不断的实践里出真知。谷歌的政策在不断升级,我们的策略也必须得跟上脚步。

    作者:出海掘金妙脆仙 来自知乎

    分析一下,Google Play开发者账号关联封号的原因

    很多朋友上架googleplay 会出现账户被封的情况,这个是最严重的封号现象,一般google给你的邮件原文如下

    ==========================
    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.

    The Google Play Team

    可能是google开发者号的问题也有可能是APP代码关联的问题。**

    如果你想再注册个新账号怎么办?

    言归正传,如果你被封号了,还想再注册账户,怎么办呢?我的建议是,不要注册新账户了,因为Google的邮件说的是真的,无论你怎么换其它信息,总会被他抓到。

    首先解释下什么是关联,就是当你的谷歌开发者账号因为各种原因被封停了,此时如果你再注册新的开发者账号也会被谷歌封停。
    谷歌邮件中已经说了,请不要尝试注册新的开发者账号,就是说你再次注册也会被关联封停。
    我们此时肯定需要一个新的谷歌开发者账号,可以自己注册,可以购买谷歌开发者账号,买一个肯定就不是自己注册的了,这里主要说下自己注册需要注意的地方。
    有这么几条是必须要注意的:
    1 在新的电脑注册,也可以是虚拟机,最好是实体电脑。
    2 使用新的 ip 注册
    3 应用 logo,展示图,title,应用里面使用的图片资源必须要换
    4 如果应用用到了服务端,那么服务端域名必须要变
    5 代码重复度,也是大家最容易忽略的,不是直接上传你之前被封的应用就行了,要改
    6 程序的改动:首先程序使用的类名必须要改,另外最好改一下程序布局,比如之前用的抽屉栏,现在改成底部tab,这都是比较好的
    7 慎用开源框架: 不要大段的使用开源程序,开源的东西很多人已经用过了,可能已经被标记了如做到以上可以不被关联,
    8 谷歌开发者账号在运营过程中避免交叉关联,比如设备,ip,浏览器等这些很容易被忽略。(谷歌开发者代注册申请可联系W:heyan1105)

    对于较高分值的字段,目前的判断是:设备相关,付款/收款相关,主动关联信息。

    1、设备相关

    这一块不用多说,有很多介绍的文章。很多开发者都有在本地电脑登录开发者账号导致封号的经历(前提是本地电脑曾经登陆过被封账号)。我们曾经尝试过重置系统,清除缓存等策略。但是依然有中招的,后来就不敢再验证了(成本太高,而且无法确定是什么规则导致了关联),后来就直接采用VPS服务器的方式进行。这也是目前避免账号关联的基础操作。

    设备这块,VPS服务器已经是最好的解决方案了。当然,如果你只有唯一一个开发者账号,而且从未有过违规记录。还是可以在本地登录的,配备一个稳定的ip环境就没有任何问题。

    3、主动关联信息

    不知道大家是否注意到,开发者账号可以主动关联AdMob,Google Analytics,Firebase这些平台,还有就是添加测试账号这些内容。假设你没有主动关联的时候,谷歌也知道你所使用的这些账号。但是它不会非常确定说你们是一起的,当你主动关联的时候。它的规则就明确说,你们是一起的!

    假设你有一个AdMob账号,之前给某一个APP对接广告,后来这个APP违规被下架了,然后APP对应的开发者账号被封了。这个时候,重新做了一个APP,对接的依然是这个AdMob账号,新的APP被关联的情况是多大呢?当在新App对应的开发者账号后台关联了此AdMob账号,这是不是直接主动告诉了Google你们是同一个人?我想这个时候,谷歌的机器肯定是要把这个账号关闭掉!

    2、付款/收款相关;

    关于付款,指的是开通开发者计划所支付的25刀所使用的付款卡,去年很多人都可以使用自己的信用卡支付(需要是VISA或Master),但是最近一段时间来,经常会出现支付失败的情况,这个具体是什么原因不得而知。我相信依然还是有很多是采用这种支付方式的,也是可以支付成功的。

    如果是采用自己的卡支付,那么卡相关的信息已经被记录了。如果使用同样的卡支付其它的开发者账号,那么这个关联关系是非常强的。如果让我去指定账号关联关系,支付卡这一条信息,肯定也是首选的。

    为了避免这种情况,最好的办法就是一个账号对应一张卡。最好是每个账号对应的人都是不一样的。如果实在做不到,可以尝试一个人不同卡进行支付。

    其它还有找人代付或者是买卡。这块这里就不多说了。如果想要了解的,可以联系我

    收款卡,这一块主要就是当你的APP有付费项目时,一定要慎重填写。填写的收款信息一定要是干净的,可以使用自己的收款卡。

    这里的原则就是,不同开发者账号,收款信息分开。不要混用

    总结

    图中列出的字段,在申请开发者账号的时候,最好是做到彻底独立,与过往有黑历史的账号区别开来。想要真正搞清楚谷歌的判定规则,是非常难得。而且在不同的时候,判断规则也会有所侧重。同样的游戏APP、金融APP、工具APP也会有不一样的判定,具体还需要开发者通过经验不断的摸索。

    对于开发者来说,最大的问题就是被判定关联,直接封号,没有任何的机会(如果有开发者申诉成功了,可以留言给大家分享下经验),这才是我们不能接受的。也就是很多时候都不知道自己是怎么死的,唯有慎重才能降低被关联的风险。

    以上这些内容,希望能给大家带来帮助,如果大家有同样的情况也可以互相交流。对于开发者来说,要在Google Play平台上发布应用,需要遵守他们的规则。如果因为触犯规则导致账号被封,那就得不偿失了。(谷歌开发者代注册申请可联系W:heyan1105)

    在谷歌目前的机器规则下,你一次是坏人,那么永远就是坏人,把曾经违规的账号相关信息永远封存,不再用于新的开发者账号中是最优策略。不知道谷歌开发者黑名单有没有有效期的这种说法,如果又不知道是2年还是5年。可是对于开发者来说,肯定是没有任何成本或时间去试探和等待的。

  • uni-app跨平台开发app,用Hbuilderx打包安卓应用程序到上架google play 完成l流程

    uni-app跨平台开发app,用Hbuilderx打包安卓应用程序到上架google play 完成l流程

    1 说明

          此文章介绍uni-app跨平台开发时关于安卓的打包到上架的完成流程,同时也会列举在整个过程中的注意事项,阅读文章的前提是是建立在你已经有共可打包的代码和已付费的google play的账号,

    2 uni-app 安卓打包流程

       1  打开项目中manifest.json, 此文件为整个app的配置文件,位于项目的根目录。如下图

    uni-app跨平台开发app,用Hbuilderx打包安卓应用程序到上架google play 完成l流程

     2  对打开左边的选项菜单做简单的介绍,并提供一些注意事项。

         a  基础配置  填写选项信息,appid 是app的唯一标识符至始至终不要去随意改变,应用版本名称和应用版本号在每次正式打包之前的值要比上一个高,否则在上传的时候会出现冲突。

        b  填写即可 , 注意在安卓应用中不要出现有圆角的图标,不然在上架后在手机上会出现黑色填充圆角的情况,如果同一个账号要上传多个app 时图标不能一样,不然审核无法通过。

       c 源码视图  此选项其实就是上选所有选项的代码集合,详细参考https://uniapp.dcloud.io/collocation/manifest

       说明  其他一些选项配置实际上是在开发过程中已经根据需求配置好的,此处省咯,由于google上架时的审核不想ios那么严格,所以一般情况下在完成上面配置和实际开发中的配置都不会存在特别严重的问题,但是涉及到支付时还会涉及到一些其他配置。

    3 点击发行—— 云打包 会出现如下对话框

    uni-app跨平台开发app,用Hbuilderx打包安卓应用程序到上架google play 完成l流程

    关于打包证书的说明, 打包证书可以当前hbuilderx自带的也可以选择自制的,这个不影响上架,区别在于自带的不需要填写任何选项直接编译打包即可,而自制的需要填写当前选项,如果在某些场景下需要app的签名建议使用自制的证书,因为可以直接通过java jdk提供的工具可以从中读取到一个36位的加密字符串的签名.完成上述操作后就可以点击打包了,在打包之前会经过编译的过程,若果代码中出现如document等则会编译失败,因为app不能出现h5的语法,在实际开发注意。

     3  上传

        1  打开https://support.google.com

    uni-app跨平台开发app,用Hbuilderx打包安卓应用程序到上架google play 完成l流程

    2 向下滑动 点击

    uni-app跨平台开发app,用Hbuilderx打包安卓应用程序到上架google play 完成l流程

    3 点击

    uni-app跨平台开发app,用Hbuilderx打包安卓应用程序到上架google play 完成l流程

    4 进入

    uni-app跨平台开发app,用Hbuilderx打包安卓应用程序到上架google play 完成l流程

    5  点击

    uni-app跨平台开发app,用Hbuilderx打包安卓应用程序到上架google play 完成l流程

    说明  最好阅读一下本章内容

    6 点击申请创建

    uni-app跨平台开发app,用Hbuilderx打包安卓应用程序到上架google play 完成l流程6

    7 填写信息 ,注意选择的语言和实际填写的语言,边填写边保存

    uni-app跨平台开发app,用Hbuilderx打包安卓应用程序到上架google play 完成l流程

    8  填写完成后跳转应用发布,箭头所标都是要填写的选项

    uni-app跨平台开发app,用Hbuilderx打包安卓应用程序到上架google play 完成l流程

    说明 如果出现如下报错

    uni-app跨平台开发app,用Hbuilderx打包安卓应用程序到上架google play 完成l流程

    需要修改打包配置文件的

    uni-app跨平台开发app,用Hbuilderx打包安卓应用程序到上架google play 完成l流程

    9  完成上面的配置后 ,直接发布生产版本

    uni-app跨平台开发app,用Hbuilderx打包安卓应用程序到上架google play 完成l流程d

    说明 到此基本上已经完成发布,在发布之前如果出现警告可以忽略,直接发布即可。

    https://www.likecs.com/show-203550407.html

  • uni-app云打包上架谷歌市场

    uni-app云打包上架谷歌市场

    谷歌市场(Google Play)上架的app安装包需要64位,且证书年限需要至少50年以上。要求HBuilderX2.1.5+

    1、修改配置文件

    依次点击“mainifest.json->App常用其他设置->支持CPU类型”,选择上armeabi-v7a、arm64-v8a两个类型。

    对三种类型做一下简单介绍:

    • armeabi-v7a:第7代及以上的ARM处理器(ARM32位),市面上大多数手机使用此CPU类型
    • arm64-v8a:第8代、64位ARM处理器(ARM64位),最近两年新发的设备使用此CPU类型
    • x86:少部分平板使用x86,as模拟器中选了intel x86时也是这种情况。(雷电夜神等三方模拟器模拟的是arm架构,不是x86)

    参考文档:

    Android平台配置支持的CPU类型(64位):https://ask.dcloud.net.cn/article/36195

    2、云打包

    依次点击“发行->原生App-云打包”,在渠道包中选择GooglePlay,生成谷歌可用的64位包,若不勾选或者选择其他渠道包则不能生成符合谷歌的安装包。

    3、等待打包成功生成apk的包即可。

    Google Play 上架

    务必确保将HBulider X升级到3.2.15+版本。离线打包需要将离线打包SDK升级到3.2.15+版本

    App提交云端打包时请务必勾选“GooglePlay(AAB)”渠道

    Google Play上架审核要求比较严格,应用中不能存在以下行为:

    • 不能直接下载apk方式安装应用,需引导用户到Google Play安装
    • 不能存在动态加载代码行为

    uni-app中部分功能模块不符合Google Play审核要求,请仔细阅读下面章节。

    必须适配Android11

    “App常用其它设置”中需要将targetSdkVersion设置值大于等于30

    注意:务必在Android11设备上进行测试,确保应用所有功能可以正常运行

    不能包含安装应用权限

    在App权限配置中不要勾选 android.permission.INSTALL_PACKAGES、android.permission.REQUEST_INSTALL_PACKAGES 权限

    离线打包:

    1. 更新SDK3.2.15+版本
    2. 请查看原生项目中的AndroidManifest.xml。如果包含以下权限请手动删除:
    <uses-permission android:name="android.permission.INSTALL_PACKAGES" />
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

    注意:如果使用了uni原生插件,可能会添加安装应用权限,请联系uni原生插件作者确认

    不要使用QQ登录、QQ分享模块

    使用QQ登录、分享功能时,如果当前设备上没有安装QQ应用时,会引导用户下载安装,不符合Google Play的审核要求,因此提交到Google Play时不要勾选QQ登录及QQ分享模块

    离线打包:

    请不要集成qq_mta-sdk-xxx.jar,qq_sdk_vxxx.jar等SDK。如果有请删除

    不要使用国内增强广告SDK

    uni-AD国内增强广告(如穿山甲、广点通、快手等SDK)显示的广告落地页可能会引导用户下载安装apk,不符合Google Play的审核要求,因此提交到Google Play时不要勾选增强广告SDK

    注意:uni-AD 广告基础功能不受影响

    离线打包:

    请不要集成国内增强广告相关依赖库 ks_adsdk-ad.aar、windAd.aar、GDTSDK.unionNormal.aar,open_ad_sdk.aar,torch-adcore-xx.aar。如有请删除

    不要使用X5内核

    腾讯TBS(X5)内核在Android平台解决了很多适配问题(详情可参考:https://ask.dcloud.net.cn/article/36806),但它使用了动态热更新技术,不符合Google Play的审核要求,因此提交Google Play时不要勾选使用“Android X5 Webview(腾讯TBS)”模块

    离线打包:

    请不要集成X5相依赖库webview-x5-release.aar,如有请删除

    其它相关问题

    uni-app 提交 aab 版本到 Google Play 提示 API 级别过低的解决办法

    发现问题
    近日准备发布新版本上架到 Google Play 上时,突然出现了 Change your app’s target API level to at least 31 的提示。

    在查阅相关资料后,得知 新应用必须以 Android 12(API 级别 31)或更高版本为目标平台;Wear OS 应用除外,此类应用必须以 Android 11(API 级别 30)或更高版本为目标平台。自 2023 年 1 月起,应用更新必须以 Android 12 或更高版本为目标平台,并针对 Android 12 中的行为变更进行调整;Wear OS 应用除外,此类应用必须以 Android 11 或更高版本为目标平台。

    详情请看: 符合 Google Play 的目标 API 级别要求 。

    解决问题
    此时只需要将应用配置文件 manifest.json 中的 App常用其他设置 的 targetSdkVersion 设置成 31 ,然后重新提交到云打包,将打包好的 aab 再次去提交到 Google Play 就不会再报错了。

    填好 App 必要信息,提交去审核,大概两个工作日左右就可以上架到 Google Play 了(前提是你的App不违规喔~)。

  • Google Play 上架全流程_2023年谷歌应用商店上架流程

    Google Play 上架全流程_2023年谷歌应用商店上架流程

    Google Play 上架全流程_2023年谷歌应用商店上架流程

    今天来说说谷歌上架的那点事。

    游戏出海逐渐成为这几年的游戏从业者的新潮流,说到游戏出海就绕不开Google Play这个巨头渠道,垄断了安卓渠道90%以上的流量,动辄就是百万千万的下载,是出海必须要搞定的核心渠道。

    ​

    相比国内渠道一直有商务和运营对接cp方,google play则是完全的自动化,从开发者账号——游戏/App上架——手动/违规下架,整个流程只有你和google play的开发者后台,谷歌的各种政策改变,通知沟通基本都是开发者后台的信息或者邮件触达,不会有专人来负责。

    这样的流程化运作就导致很多刚开始做海外市场的产品人/游戏人有点无从下手,其实摸透了Gp(google play)的系统逻辑,这一套流程是有套路可循的。

    本期主要简单说一下2022年上架google play的流程,也就是涵盖申请开发者账号——上架提审这部分。

    一、申请开发者账号

    网络问题自己搞定,这里不多说。

    如果这一步都搞不定,就到这吧,不用往下看了,省点时间干点别的吧,出海这条路不适合你。

    不过你可以使用VPN先有船出个海:https://portal.shadowsocks.au/aff.php?aff=43068

    ​

    这一步你需要准备好以下几样东西:

    1. Gmail邮箱
    2. Visa信用卡
    3. 实名认证信息

    要准备的东西挺简单的,但为了防止踩坑,我再多说两句。

    Gmail邮箱

    自己申请!自己申请!Gmail邮箱有手机号就可以申请,国内的手机号也照样申请。如果提示手机号无法验证,一定是你注册的方式不对。

    看了哥的这篇文,少走弯路少花冤枉钱,这里说个知识点!注册的时候用QQ邮箱/网易邮箱,注册里选Gmail,按顺序搞就好了,直接用网页注册可能会被提示手机号无法验证。

    Visa信用卡

    这是国内最好申请的可以直接用于谷歌开发者账号支付的银行卡。

    对,你没看错!谷歌开发者账号是要钱的,25美元,也就是人民币160元左右。

    而且每个银行卡只能绑定一个开发者账号,也就是说你用这张visa卡开通了一个开发者账号,之后就不能再用这张卡再开新的开发者账户了!

    实名认证信息

    实名认证2022年上半年,还有一些国家是可以免认证的,但是到下半年后全球范围都需要实名认证信息了。注册的是哪个国家的账号就需要提供该国的实名认证,护照啊,身份证这类的,而且谷歌会审核,审核还是很严格的,你提交的信息如果有造假啊,图片模糊啊等问题,都会被实名拒审。

    拒审后你可以通过邮件申诉,重新提交。但整体流程就比较麻烦了,而且多次拒审后,这个账号基本就是废废了,你注册所花的25美金也不会退还。

    对于批量需要开发者账号的同学来说,还是直接购买吧,省时省事。

    需要开发者,可联系Q2500518158

    ​重点的部分都说完了,剩下的具体流程,跟着系统指引一步步走就好了,网上一搜也是一大把教程,这里就不多说了。梯子给你了,爬就自己爬吧!

    申请谷歌开发者账号的网址:

    https://play.google.com/console/about/

    Google Play管理中心帮助网址:

    https://support.google.com/googleplay/android-developer/answer/6112435

    大概的申请流程:

    ​

    只要你的流程没问题,交了钱就立刻开通了,开通后就可以上架,无需等待。

    二、上架游戏/APP

    上架之前先准备几个东西

    1. aab包
    2. 商店素材
    3. 上架文案
    4. 隐私链接

    还是搭梯子给你们,以防踩坑。

    1.aab包

    从2021年9月1日开始,上架google play的包统一都要是aab格式,非aab格式是无法上传包体的。

    aab的包和Apk的包本质的差别是在打包方式上,相关技术需要自己摸索下。

    同时,在打包时还需要注意2点:

    (1)目前Google Play管理中心对Android 10的目标安全级别要求至少为31!

    (2)安卓应用程序包应先加固好再进行上传,先上传再加固可能会出现问题。

    ​

    2.商店素材

    这个和国内上架需要素材的需求差不多,重点就在尺寸和大小方面,直接看下图。

    看着很多,实际上手机和平板可以共用相同的图,不需要额外作图。

    ​

    3.上架文案

    在Google play上需要显示的产品介绍,需求如下图

    ​

    4.隐私链接

    如果你的应用和游戏会获取一些用户的隐私权限,比如说手机号啊、通讯录之类的,就要记得上传隐私链接,如果你没有服务器可以架网页的话,也可以用取巧的方法托管到三方平台上。

    这里不多说了,可以自己百度了解。

    这四个部分准备好了,基本上就可以开始上架了。

    上架过程很简单,按照初始设置里的首要步骤一步一步操作即可。如下图

    这里尤其需要关注的是“内容分级”部分,分级错误会导致应用/游戏审核失败。

    Google Play的“内容分级”是通过自主填写问卷的方式,由系统得出一个分级标准,提审之前可以多次修改,一般同一类的产品分级都是差不多的。

    发布【正式版】之前也可以考虑先测试,测试部分包括【内部测试】、【封闭式测试】和【开放式测试】,但一般直接发布【正式版】就好了,想要调整什么可以热更或者发布个新版版。

    发布成功后,后台显示如下图,截图的是2022年最新版的后台,如果看到其他类型的截图基本都是老版本了。

    游戏/APP成功上架后,在信息中心就可以看到自己的产品了。

    ​

    三、版本更新的注意事项

    这里再补充两点容易忽略的小细节:

    1. 版本号
    2. App Bundle探索器
    3. 后台中英文切换

    1.版本号

    每一次更新版本都需要提升版本号,不然是无法上传新版本的.

    2.App Bundle探索器

    GP后台的App Bundle探索器说白了就是个版本记录器,但这里有个坑是,如果你上传了新版本的包,即使没有发布,你也舍弃了该版本,仍会记录在App Bundle探索器里。

    你再次上传这个新版本的包,就会提示你“版本号已存在”。此时你需要删除App Bundle探索器之前未发布的版本,才能重新上传这个新版本。

    哈哈,是不是令人窒息的操作。

    ​

    3.后台中英文切换

    这个语言的切换我感觉也非常反人性,我第一次改的时候把GP后台翻了个底朝天都没找到。

    谷歌开发者后台的语言是跟着谷歌账号走的,所以把谷歌账号的语言改成中文,开发者后台的语言也就自动切换了!

    更多Google Play上架或者出海相关的问题,也欢迎找我交流。