Google Play Store에서 Huawei Store로 마이그레이션. 코드가 변경 되었습니까?
Google Play 스토어에 애플리케이션이 있습니다. 화웨이 스토어에도 공개 할 예정입니다.
Huawei SDK 및 기본 지침 단계 (프로젝트 agconnect-services.json 등에 추가)를 사용하여 앱을 다시 빌드하는 것 외에도 코드 수준에서 변경해야하는 다른 것이 있습니까?
모든 API가 작동합니까? 특히 인앱 구매와 관련된 것?
감사
답변
먼저 사용중인 GMS Kit를 확인하시면 해당 HMS Kit를 제공해 드릴 수 있습니다. 이 답변 도 참조 할 수 있습니다 .
코드 수준에서 다음을 수행하려는 경우 :
- G2H 솔루션 사용 : GMS 코드를 HMS 코드로 직접 대체합니다. HMS 인터페이스의 이름은 GMS 인터페이스와 다르지만 인터페이스의 의미는 동일합니다. API 문서를 참조하여 인터페이스 이름을 변경할 수 있습니다 .
- 사용 G + H 용액 : HMS + GMS 적응 계층 코드는 일본어 로직 코드에 추가한다. 다음 코드를 추가하여 GMS API 또는 HMS API를 사용할 수 있는지 확인하고 사용 가능한 API를 호출합니다.
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 () 메소드가 호출을 통해 buyResultInfo에 의해 선언 된 객체 PurchaseResultInfo . getInAppPurchaseData 메서드가 성공적으로 호출 된 후 InAppPurchaseData 를 얻을 수 있습니다 .
현재 트랜잭션의 제품 ID는 InAppPurchaseData에 저장됩니다 . 참조 : 여기 .

@shirley, 예, 실제로도 찾았습니다.
다음 코드는 모든 기기의 Cloud Debugging에서 잘 작동하지만 검토 용으로는 작동하지 않습니다. 따라서 앱이 거부됩니다.
내부 활동 수업 :
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가 작동합니다.
내 코드에 어떤 문제가 있습니까?