我在 Google Play 商店中有一个应用程序。我打算在华为商店也发布它。
除了使用华为 SDK 和基本指示步骤(添加到项目 agconnect-services.json 等)重新构建应用程序之外,还有其他需要在代码级别更改的内容吗?
所有 API 都在工作吗?特别是那些与应用内购买相关的?
谢谢
我在 Google Play 商店中有一个应用程序。我打算在华为商店也发布它。
除了使用华为 SDK 和基本指示步骤(添加到项目 agconnect-services.json 等)重新构建应用程序之外,还有其他需要在代码级别更改的内容吗?
所有 API 都在工作吗?特别是那些与应用内购买相关的?
谢谢
首先,请查看您使用的是什么 GMS Kit,我可以为您提供相应的 HMS Kit。你也可以参考这个答案。
在代码级别,如果您想:
public boolean isGMS(){
return GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this) == com.google.android.gms.common.ConnectionResult.SUCCESS;
}
public boolean isHMS(){
return HuaweiApiAvailability.getInstance().isHuaweiMobileServicesAvailable(this) == com.huawei.hms.api.ConnectionResult.SUCCESS;
}
代码调用逻辑:
If ( isGMS() ) {
//GMS code
}else if ( isHMS() ){
//HMS code
}
HMS 提供与 GMS 类似的接口。这里是IAP 文档和Github。
您也可以使用HMS ToolKit来实现 G2H/G+H。
更新:
您可以使用以下代码获取productId:
PurchaseResultInfo buyResultInfo = Iap.getIapClient(this).parsePurchaseResultInfoFromIntent(data);
getInAppPurchaseData ()方法通过PurchaseResultInfo声明的buyResultInfo对象调用。调用getInAppPurchaseData方法成功后即可获取InAppPurchaseData 。
当前交易的产品 ID 存储在InAppPurchaseData中。见:这里。
@shirley,是的,我实际上也找到了它。
以下代码在所有设备的云调试中运行良好,但不适用于审查。因此该应用程序被拒绝。
内部活动类:
private IapClient mIAPClient;
关于活动创建:
mIAPClient = Iap.getIapClient(this);
当用户点击触发应用内购买的按钮时:
private void launchPurchase(String purchased_sku) {
IapRequestHelper.createPurchaseIntent(mIAPClient, purchased_sku, IapClient.PriceType.IN_APP_NONCONSUMABLE, new IapApiCallback<PurchaseIntentResult>() {
@Override
public void onSuccess(PurchaseIntentResult result) {
if (result == null) {
Log.e(Constants.TAG, "result is null");
return;
}
// you should pull up the page to complete the payment process
IapRequestHelper.startResolutionForResult(StoreActivity.this, result.getStatus(), Constants.REQ_CODE_BUY);
}
@Override
public void onFail(Exception e) {
int errorCode = ExceptionHandle.handle(StoreActivity.this, e);
if (errorCode != ExceptionHandle.SOLVED) {
Log.i(Constants.TAG, "createPurchaseIntent, returnCode: " + errorCode);
// handle error scenarios
switch (errorCode) {
case OrderStatusCode.ORDER_PRODUCT_OWNED:
Log.i(Constants.TAG, "createPurchaseIntent, returned ORDER_PRODUCT_OWNED");
break;
default:
break;
}
}
}
});
}
上面捕获了一个异常 onFail(Exception e)。在尝试从 ExceptionHandle 获取 errorCode 时,我什么也没得到。
public static int handle(Activity activity, Exception e) {
if (e instanceof IapApiException) {
IapApiException iapApiException = (IapApiException) e;
Log.i(TAG, "returnCode: " + iapApiException.getStatusCode());
switch (iapApiException.getStatusCode()) {
case OrderStatusCode.ORDER_STATE_CANCEL:
Toast.makeText(activity, "Order has been canceled!", Toast.LENGTH_SHORT).show();
return SOLVED;
case OrderStatusCode.ORDER_STATE_PARAM_ERROR:
Toast.makeText(activity, "Order state param error!", Toast.LENGTH_SHORT).show();
return SOLVED;
case OrderStatusCode.ORDER_STATE_NET_ERROR:
Toast.makeText(activity, "Order state net error!", Toast.LENGTH_SHORT).show();
return SOLVED;
case OrderStatusCode.ORDER_VR_UNINSTALL_ERROR:
Toast.makeText(activity, "Order vr uninstall error!", Toast.LENGTH_SHORT).show();
return SOLVED;
case OrderStatusCode.ORDER_HWID_NOT_LOGIN:
IapRequestHelper.startResolutionForResult(activity, iapApiException.getStatus(), Constants.REQ_CODE_LOGIN);
return SOLVED;
case OrderStatusCode.ORDER_PRODUCT_OWNED:
Toast.makeText(activity, "Product already owned error!", Toast.LENGTH_SHORT).show();
return OrderStatusCode.ORDER_PRODUCT_OWNED;
case OrderStatusCode.ORDER_PRODUCT_NOT_OWNED:
Toast.makeText(activity, "Product not owned error!", Toast.LENGTH_SHORT).show();
return SOLVED;
case OrderStatusCode.ORDER_PRODUCT_CONSUMED:
Toast.makeText(activity, "Product consumed error!", Toast.LENGTH_SHORT).show();
return SOLVED;
case OrderStatusCode.ORDER_ACCOUNT_AREA_NOT_SUPPORTED:
Toast.makeText(activity, "Order account area not supported error!", Toast.LENGTH_SHORT).show();
return SOLVED;
case OrderStatusCode.ORDER_NOT_ACCEPT_AGREEMENT:
Toast.makeText(activity, "User does not agree the agreement", Toast.LENGTH_SHORT).show();
return SOLVED;
default:
// handle other error scenarios
Toast.makeText(activity, "Order unknown error!", Toast.LENGTH_SHORT).show();
return SOLVED;
}
} else {
Toast.makeText(activity, "external error", Toast.LENGTH_SHORT).show();
Log.e(TAG, e.getMessage());
return SOLVED;
}
}
在拒绝评论的视频中,带有消息“订单未知错误!”的祝酒词 显示。
但是 Cloud Debugging 中的同一个 APK 可以工作。
我的代码有什么问题?