环境配置与下面链接相同
1+x移动应用开发(中级) 账号服务集成 推送服务 定位服务 机器学习服务(文本识别)_洛晟370的博客-CSDN博客
在华为开发者联盟中设置开启应用内支付服务
添加依赖
implementation 'com.huawei.hms:iap:6.10.0.300'
布局代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<Button
android:id="@+id/btn_check_env"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="btn_check_env" />
<Button
android:id="@+id/btn_show_products"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="btn_show_products" />
<Button
android:id="@+id/btn_buy_products"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="btn_buy_products" />
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
MainActivity代码
import android.content.Intent;
import android.content.IntentSender;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.huawei.hmf.tasks.OnCompleteListener;
import com.huawei.hmf.tasks.Task;
import com.huawei.hms.iap.Iap;
import com.huawei.hms.iap.IapApiException;
import com.huawei.hms.iap.IapClient;
import com.huawei.hms.iap.entity.IsEnvReadyResult;
import com.huawei.hms.iap.entity.OrderStatusCode;
import com.huawei.hms.iap.entity.ProductInfo;
import com.huawei.hms.iap.entity.ProductInfoReq;
import com.huawei.hms.iap.entity.ProductInfoResult;
import com.huawei.hms.iap.entity.PurchaseIntentReq;
import com.huawei.hms.iap.entity.PurchaseIntentResult;
import com.huawei.hms.iap.entity.PurchaseResultInfo;
import com.huawei.hms.iap.util.IapClientHelper;
import com.huawei.hms.support.api.client.Status;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btnCheckEnv;
private Button btnShowProducts;
private Button btnBuyProducts;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
btnCheckEnv = findViewById(R.id.btn_check_env);
btnShowProducts = findViewById(R.id.btn_show_products);
btnBuyProducts = findViewById(R.id.btn_buy_products);
textView = findViewById(R.id.textView);
btnCheckEnv.setOnClickListener(this);
btnShowProducts.setOnClickListener(this);
btnBuyProducts.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_check_env:
queryEnvIsReady();
break;
case R.id.btn_show_products:
queryProducts();
break;
case R.id.btn_buy_products:
purchaseProducts();
break;
}
}
private void purchaseProducts() {
PurchaseIntentReq req = new PurchaseIntentReq();
req.setProductId("iphone14");
req.setPriceType(IapClient.PriceType.IN_APP_CONSUMABLE);
req.setDeveloperPayload("text1");
Task<PurchaseIntentResult> task = Iap.getIapClient(MainActivity.this).createPurchaseIntent(req);
task.addOnCompleteListener(new OnCompleteListener<PurchaseIntentResult>() {
@Override
public void onComplete(Task<PurchaseIntentResult> task) {
if (task.isSuccessful()) {
Status status = task.getResult().getStatus();
if (status.hasResolution()) {
try {
status.startResolutionForResult(MainActivity.this, 8888);
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
}
}
} else {
if(task.getException() instanceof IapApiException) {
textView.setText("===== "+ ((IapApiException) task.getException()).getStatus().getStatusCode());
}
}
}
});
}
private void queryProducts() {
ArrayList<String> productIds = new ArrayList<>();
productIds.add("iphone14");
ProductInfoReq req = new ProductInfoReq();
req.setPriceType(IapClient.PriceType.IN_APP_CONSUMABLE);
req.setProductIds(productIds);
Task<ProductInfoResult> task = Iap.getIapClient(MainActivity.this).obtainProductInfo(req);
task.addOnCompleteListener(new OnCompleteListener<ProductInfoResult>() {
@Override
public void onComplete(Task<ProductInfoResult> task) {
if (task.isSuccessful()) {
List<ProductInfo> productInfoList = task.getResult().getProductInfoList();
String text = "productInfoList: ";
for (ProductInfo p: productInfoList ) {
text += p.getProductName();
}
textView.setText(text);
System.out.println("===== "+text);
} else {
if (task.getException() instanceof IapApiException) {
System.out.println("===== "+ ((IapApiException) task.getException()).getStatus().getStatusCode());
textView.setText("===== "+ ((IapApiException) task.getException()).getStatus().getStatusCode());
}
}
}
});
}
private void queryEnvIsReady() {
Task<IsEnvReadyResult> task = Iap.getIapClient(MainActivity.this).isEnvReady();
task.addOnCompleteListener(new OnCompleteListener<IsEnvReadyResult>() {
@Override
public void onComplete(Task<IsEnvReadyResult> task) {
if (task.isSuccessful()) {
if (task.getResult().getReturnCode() == OrderStatusCode.ORDER_STATE_SUCCESS) {
System.out.println("===== account area supported");
}
} else {
if (task.getException() instanceof IapApiException) {
Status status = ((IapApiException) task.getException()).getStatus();
if (status.getStatusCode() == OrderStatusCode.ORDER_HWID_NOT_LOGIN) {
if (status.hasResolution()) {
try {
status.startResolutionForResult(MainActivity.this, 6666);
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
}
}
} else if(status.getStatusCode() == OrderStatusCode.ORDER_ACCOUNT_AREA_NOT_SUPPORTED) {
System.out.println("===== account area not supported");
}
}
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 8888) {
PurchaseResultInfo purchaseResultInfo = Iap.getIapClient(MainActivity.this).parsePurchaseResultInfoFromIntent(data);
String inAppPurchaseData = purchaseResultInfo.getInAppPurchaseData();
String inAppDataSignature = purchaseResultInfo.getInAppDataSignature();
System.out.println("===== inAppPurchaseData: "+inAppPurchaseData+"\n inAppDataSignature: "+inAppDataSignature);
}
if (requestCode == 6666) {
int respCode = IapClientHelper.parseRespCodeFromIntent(data);
String respMessage = IapClientHelper.parseRespMessageFromIntent(data);
System.out.println("===== respCode: "+respCode+"\n respMessage: "+respMessage);
}
}
}