Commit f64f35b1 authored by 王雪伟's avatar 王雪伟

[提交人]:王雪伟

[提交简述] :加入google 权限
[实现方案] :
parent e8e55e30
...@@ -10,12 +10,12 @@ ...@@ -10,12 +10,12 @@
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- <uses-permission android:name="android.permission.READ_PHONE_STATE" /> &lt;!&ndash; 用于写入缓存数据到扩展存储卡 &ndash;&gt;--> <!-- <uses-permission android:name="android.permission.READ_PHONE_STATE" /> &lt;!&ndash; 用于写入缓存数据到扩展存储卡 &ndash;&gt;-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- <uses-permission android:name="android.permission.READ_CONTACTS" />--> <!-- <uses-permission android:name="android.permission.READ_CONTACTS" />-->
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" /> <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
<!--必要权限,解决安全风险漏洞,发送和注册广播事件需要调用带有传递权限的接口--> <!--必要权限,解决安全风险漏洞,发送和注册广播事件需要调用带有传递权限的接口-->
...@@ -24,6 +24,8 @@ ...@@ -24,6 +24,8 @@
android:protectionLevel="signature" /> android:protectionLevel="signature" />
<uses-permission android:name="com.zhangxin.magicbox.openadsdk.permission.TT_PANGOLIN" /> <uses-permission android:name="com.zhangxin.magicbox.openadsdk.permission.TT_PANGOLIN" />
<!-- GooglePay-->
<uses-permission android:name="com.android.vending.BILLING" />
<uses-sdk tools:overrideLibrary="com.bun.miitmdid" /> <uses-sdk tools:overrideLibrary="com.bun.miitmdid" />
......
...@@ -37,11 +37,14 @@ class GooglePayActivity : BaseActivity() { ...@@ -37,11 +37,14 @@ class GooglePayActivity : BaseActivity() {
} }
startConnection() startConnection()
// GooglePayHelper(this).init()
} }
fun startConnection() { fun startConnection() {
if(billingClient.isReady){
}
billingClient.startConnection(object : BillingClientStateListener { billingClient.startConnection(object : BillingClientStateListener {
override fun onBillingSetupFinished(billingResult: BillingResult) { override fun onBillingSetupFinished(billingResult: BillingResult) {
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) { if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
......
package com.zxhl.cms.googlepay
import android.app.Activity
import android.util.Log
import com.android.billingclient.api.*
import com.android.billingclient.api.BillingClient.SkuType
import com.zxhl.cms.AppContext
/**
* @author (wangXuewei)
* @datetime 2022-03-09 15:12 GMT+8
* @detail :
*/
class GooglePayHelper {
private val TAG = "GooglePayHelper"
private var mActivity: Activity;
private var mSku: String = ""
constructor(mActivity: Activity,mSku:String) {
this.mActivity = mActivity
this.mSku = mSku
}
/**
* 购买监听
*/
private val purchasesUpdatedListener =
PurchasesUpdatedListener { billingResult, purchases ->
// To be implemented in a later section.
}
private var billingClient = BillingClient.newBuilder(AppContext.get())
.setListener(purchasesUpdatedListener)
.enablePendingPurchases()
.build()
fun init() {
//已经连接查询订单
if (billingClient.isReady) {
Log.d(TAG, "init 已连接")
purchase()
} else {
//开始连接
Log.d(TAG, "init 开始连接")
billingClient.startConnection(object : BillingClientStateListener {
override fun onBillingSetupFinished(billingResult: BillingResult) {
Log.d(TAG, "init 开始连接 code:" + billingResult.responseCode)
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
//BillingClient准备好了。你可以在这里查询购买情况。
//查询商品购买
purchase()
}
}
override fun onBillingServiceDisconnected() {
// Try to restart the connection on the next request to
// Google Play by calling the startConnection() method.
Log.d(TAG, "init onBillingServiceDisconnected")
}
})
}
}
private fun purchase() {
val skuList: MutableList<String> = ArrayList()
skuList.add("premium_upgrade")
skuList.add("gas")
val params = SkuDetailsParams.newBuilder()
params.setSkusList(skuList).setType(SkuType.INAPP)
billingClient.querySkuDetailsAsync(
params.build()
) { billingResult, skuDetailsList ->
// Process the result.
Log.d(TAG, "purchase billingResult " + billingResult.responseCode)
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK && !skuDetailsList.isNullOrEmpty()) {
val skuDetails = skuDetailsList[0]
val flowParams = BillingFlowParams.newBuilder()
.setSkuDetails(skuDetails)
.build()
val responseCode =
billingClient.launchBillingFlow(mActivity, flowParams).responseCode
Log.d(TAG, "purchase 去支付 code $responseCode")
} else {
Log.d(TAG, "purchase 查询失败")
}
}
}
}
\ No newline at end of file
package com.zxhl.cms.googlepay;
import android.app.Activity;
import android.text.TextUtils;
import com.android.billingclient.api.BillingClient;
import com.android.billingclient.api.BillingClientStateListener;
import com.android.billingclient.api.BillingFlowParams;
import com.android.billingclient.api.BillingResult;
import com.android.billingclient.api.ConsumeParams;
import com.android.billingclient.api.ConsumeResponseListener;
import com.android.billingclient.api.Purchase;
import com.android.billingclient.api.PurchasesUpdatedListener;
import com.android.billingclient.api.SkuDetails;
import com.android.billingclient.api.SkuDetailsParams;
import com.android.billingclient.api.SkuDetailsResponseListener;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
/**
* @author (wangXuewei)
* @datetime 2022-03-09 15:25 GMT+8
* @detail :
*/
public class GooglePlayHelper {
private static final String TAG = GooglePlayHelper.class.getSimpleName();
private static final int GAME_ORDER_ID=0x01;
// //订单号
// private String mOrderID;
// //用户信息
// private String mUserID;
// //商品集合
// private WeakReference<Activity> mActivityRef;
// //回调
// private OnRechargeStateListener mListener;
// //商品
// private String mSku;
// private String goods_number;// 商品ID,游戏提供
// private BillingClient mBillingClient;
// private int mPayTest;
// private String mConsume = "0";
//
// GooglePlayHelper(Activity activity,
// String goods_number, int mPayTest,
// String sku, OnRechargeStateListener mListener) {
// this.mActivityRef = new WeakReference<>(activity);
// this.goods_number = goods_number;
// this.mSku = sku;
// this.mPayTest = mPayTest;
// this.mListener = mListener;
// }
//
// public GooglePlayHelper(Activity activity, int mPayTest) {
// this.mActivityRef = new WeakReference<>(activity);
// this.mPayTest = mPayTest;
// }
//
//
//
//
// /**
// * 初始化
// */
// void init() {
// mBillingClient = BillingClient.newBuilder(mActivityRef.get())
// .setListener(mPurchasesUpdatedListener)
// .enablePendingPurchases()
// .build();
// if (!mBillingClient.isReady()) {
// mBillingClient.startConnection(new BillingClientStateListener() {
// @Override
// public void onBillingSetupFinished(BillingResult billingResult) {
// if (billingResult != null) {
// if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
// if (!TextUtils.isEmpty(PreferencesUtils.getString(mActivityRef.get(),
// Constants.USER_LT_UID_KEY))) {
// getLTOrderID();
// } else {
// mListener.onState(mActivityRef.get(), RechargeResult.failOf(LTGameError.make(
// LTResultCode.STATE_GP_CREATE_ORDER_FAILED,
// "order create failed:user key is empty"
// )));
// mActivityRef.get().finish();
// }
// }
// }
//
// }
//
// @Override
// public void onBillingServiceDisconnected() {
// }
// });
// } else {
// if (!TextUtils.isEmpty(PreferencesUtils.getString(mActivityRef.get(),
// Constants.USER_LT_UID_KEY))) {
// getLTOrderID();
// } else {
// mListener.onState(mActivityRef.get(), RechargeResult.failOf(LTGameError.make(
// LTResultCode.STATE_GP_CREATE_ORDER_FAILED,
// "order create failed:user key is empty"
// )));
// mActivityRef.get().finish();
// }
// }
// }
//
//
// /**
// * 购买回调
// */
// private PurchasesUpdatedListener mPurchasesUpdatedListener = new PurchasesUpdatedListener() {
// @Override
// public void onPurchasesUpdated(BillingResult billingResult, List<Purchase> list) {
// String debugMessage = billingResult.getDebugMessage();
// Log.e(TAG, debugMessage);
// if (list != null && list.size() > 0) {
// if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
// for (Purchase purchase : list) {
// mConsume = "2";
// uploadToServer(purchase.getPurchaseToken(), purchase.getOrderId(),mOrderID, mPayTest);
// }
//
// }
// } else {
// switch (billingResult.getResponseCode()) {
// case BillingClient.BillingResponseCode.SERVICE_TIMEOUT: {//服务连接超时
// mListener.onState(mActivityRef.get(), RechargeResult.failOf("-3"));
// mActivityRef.get().finish();
// break;
// }
// case BillingClient.BillingResponseCode.FEATURE_NOT_SUPPORTED: {
// mListener.onState(mActivityRef.get(), RechargeResult.failOf("-2"));
// mActivityRef.get().finish();
// break;
// }
// case BillingClient.BillingResponseCode.SERVICE_DISCONNECTED: {//服务未连接
// mListener.onState(mActivityRef.get(), RechargeResult.failOf("-1"));
// mActivityRef.get().finish();
// break;
// }
// case BillingClient.BillingResponseCode.USER_CANCELED: {//取消
// mListener.onState(mActivityRef.get(), RechargeResult.failOf("1"));
// mActivityRef.get().finish();
// break;
// }
// case BillingClient.BillingResponseCode.SERVICE_UNAVAILABLE: {//服务不可用
// mListener.onState(mActivityRef.get(), RechargeResult.failOf("2"));
// mActivityRef.get().finish();
// break;
// }
// case BillingClient.BillingResponseCode.BILLING_UNAVAILABLE: {//购买不可用
// mListener.onState(mActivityRef.get(), RechargeResult.failOf("3"));
// mActivityRef.get().finish();
// break;
// }
// case BillingClient.BillingResponseCode.ITEM_UNAVAILABLE: {//商品不存在
// mListener.onState(mActivityRef.get(), RechargeResult.failOf("4"));
// mActivityRef.get().finish();
// break;
// }
// case BillingClient.BillingResponseCode.DEVELOPER_ERROR: {//提供给 API 的无效参数
// mListener.onState(mActivityRef.get(), RechargeResult.failOf("5"));
// mActivityRef.get().finish();
// break;
// }
// case BillingClient.BillingResponseCode.ERROR: {//错误
// mListener.onState(mActivityRef.get(), RechargeResult.failOf("6"));
// mActivityRef.get().finish();
// break;
// }
// case BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED: {//未消耗掉
// mConsume = "1";
// queryHistory();
// break;
// }
// case BillingClient.BillingResponseCode.ITEM_NOT_OWNED: {//不可购买
// mListener.onState(mActivityRef.get(), RechargeResult.failOf("8"));
// mActivityRef.get().finish();
// break;
// }
// }
// }
// }
// };
//
// /**
// * 购买
// */
// private void recharge() {
// if (mBillingClient.isReady()) {
// List<String> skuList = new ArrayList<>();
// skuList.add(mSku);
// SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
// params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
// mBillingClient.querySkuDetailsAsync(params.build(),
// new SkuDetailsResponseListener() {
// @Override
// public void onSkuDetailsResponse(BillingResult billingResult,
// List<SkuDetails> skuDetailsList) {
// if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK
// && skuDetailsList != null) {
// for (SkuDetails skuDetails : skuDetailsList) {
// String sku = skuDetails.getSku();
// if (mSku.equals(sku)) {
// BillingFlowParams purchaseParams =
// BillingFlowParams.newBuilder()
// .setSkuDetails(skuDetails)
// .setObfuscatedAccountId(mUserID)
// .setObfuscatedProfileId(mOrderID)
// .build();
// mBillingClient.launchBillingFlow(mActivityRef.get(), purchaseParams);
// }
// }
// }
//
// }
// });
//
// }
//
//
// }
//
//
// /**
// * 消耗
// */
// private void consume(String purchaseToken) {
// if (mBillingClient.isReady()) {
// ConsumeParams consumeParams = ConsumeParams.newBuilder()
// .setPurchaseToken(purchaseToken)
// .build();
// mBillingClient.consumeAsync(consumeParams, new ConsumeResponseListener() {
// @Override
// public void onConsumeResponse(BillingResult billingResult, String s) {
//
// }
// });
// } else {
// mBillingClient.startConnection(new BillingClientStateListener() {
// @Override
// public void onBillingSetupFinished(BillingResult billingResult) {
// if (billingResult != null) {
// if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
// ConsumeParams consumeParams = ConsumeParams.newBuilder()
// .setPurchaseToken(purchaseToken)
// .build();
// mBillingClient.consumeAsync(consumeParams, new ConsumeResponseListener() {
// @Override
// public void onConsumeResponse(BillingResult billingResult, String s) {
//
// }
// });
// }
// }
//
// }
//
// @Override
// public void onBillingServiceDisconnected() {
// }
// });
// }
//
// }
//
// /**
// * 消耗
// */
// private void consume2(String purchaseToken) {
// if (mBillingClient.isReady()) {
// ConsumeParams consumeParams = ConsumeParams.newBuilder()
// .setPurchaseToken(purchaseToken)
// .build();
// mBillingClient.consumeAsync(consumeParams, new ConsumeResponseListener() {
// @Override
// public void onConsumeResponse(BillingResult billingResult, String s) {
//
// }
// });
// recharge();
// } else {
// mBillingClient.startConnection(new BillingClientStateListener() {
// @Override
// public void onBillingSetupFinished(BillingResult billingResult) {
// if (billingResult != null) {
// if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
// ConsumeParams consumeParams = ConsumeParams.newBuilder()
// .setPurchaseToken(purchaseToken)
// .build();
// mBillingClient.consumeAsync(consumeParams, new ConsumeResponseListener() {
// @Override
// public void onConsumeResponse(BillingResult billingResult, String s) {
//
// }
// });
// }
// }
//
// }
//
// @Override
// public void onBillingServiceDisconnected() {
// }
// });
// recharge();
// }
//
// }
//
// /**
// * 补单操作
// */
// private void queryHistory() {
// Purchase.PurchasesResult mResult = mBillingClient.queryPurchases(BillingClient.SkuType.INAPP);
// for (int i = 0; i < mResult.getPurchasesList().size(); i++) {
// if (mResult.getPurchasesList().get(i).isAcknowledged()) {
// consume2(mResult.getPurchasesList().get(i).getPurchaseToken());
// } else {
// uploadToServer2(mResult.getPurchasesList().get(i).getPurchaseToken(),
// mResult.getPurchasesList().get(i).getOrderId(),
// mResult.getPurchasesList().get(i).getAccountIdentifiers().getObfuscatedProfileId(),
// mPayTest);
// }
// }
//
// }
//
// /**
// * 获取订单ID
// */
// private void getLTOrderID() {
// //自己获取订单ID的接口(和你们自己的服务器进行商量)
// LoginRealizeManager.createOrder(mActivityRef.get(), xx, xx, xx,
// new OnRechargeStateListener() {
//
// @Override
// public void onState(Activity activity, RechargeResult result) {
// if (result != null) {
// if (result.getResultModel() != null) {
// if (result.getResultModel().getData() != null) {
// if (result.getResultModel().getCode() == 0) {
// if (result.getResultModel().getData().getOrder_number() != null) {
// mOrderID = result.getResultModel().getData().getOrder_number();
// PreferencesUtils.init(mActivityRef.get());
// PreferencesUtils.putString(mActivityRef.get(), GAME_ORDER_ID, mOrderID);
// recharge();
// }
// } else {
// mListener.onState(mActivityRef.get(),
// RechargeResult.failOf(result.getResultModel().getMsg()));
// mActivityRef.get().finish();
// activity.finish();
// }
//
// }
//
// }
// }
// }
//
// });
//
// }
//
// /**
// * 上传到服务器验证接口(具体传值和你们的服务器进行沟通确认)
// */
// private void uploadToServer(final String purchaseToken,String mGoogleOrder, String mOrderID, int mPayTest) {
// LoginRealizeManager.googlePlay(mActivityRef.get(),
// purchaseToken, mOrderID, mPayTest, new OnRechargeStateListener() {
// @Override
// public void onState(Activity activity, RechargeResult result) {
// if (result != null) {
// if (result.getResultModel() != null) {
// if (result.getResultModel().getCode() == 0) {
// mListener.onState(mActivityRef.get(), RechargeResult
// .successOf(result.getResultModel()));
// consume(purchaseToken);
// } else if (result.getResultModel().getCode() == 10500) {//网络中断再次重新上传验证上传
// uploadToServer(purchaseToken,mGoogleOrder, mOrderID, mPayTest);
// } else {//上传订单验证错误日志信息到服务器
// LoginRealizeManager.sendGooglePlayFailed(mActivityRef.get(), mOrderID, purchaseToken,
// mGoogleOrder,
// mPayTest, result.getResultModel().getMsg(), mListener);
// }
// }
//
// }
//
// }
//
// });
//
// }
//
// /**
// * 上传到服务器验证接口(具体传值和你们的服务器进行沟通确认)
// */
// private void uploadToServer2(final String purchaseToken,String mGoogleOrder, String mOrderID, int mPayTest) {
// LoginRealizeManager.googlePlay(mActivityRef.get(),
// purchaseToken, mOrderID, mPayTest, new OnRechargeStateListener() {
// @Override
// public void onState(Activity activity, RechargeResult result) {
// if (result != null) {
// if (result.getResultModel() != null) {
// if (result.getResultModel().getCode() == 0) {
// consume2(purchaseToken);
// if (mConsume.equals("1")) {
// recharge();
// }
// } else if (result.getResultModel().getCode() == 10500) {
// uploadToServer2(purchaseToken,mGoogleOrder, mOrderID, mPayTest);
// } else {
// LoginRealizeManager.sendGooglePlayFailed(mActivityRef.get(), mOrderID, purchaseToken,
// mGoogleOrder,
// mPayTest, result.getResultModel().getMsg(), mListener);
// }
// }
//
// }
//
// }
//
// });
//
// }
//
// /**
// * 上传到服务器验证
// */
// private void uploadToServer3(final String purchaseToken, String mGoogleOrder,String mOrderID, int mPayTest) {
// LoginRealizeManager.googlePlay(mActivityRef.get(),
// purchaseToken, mOrderID, mPayTest, new OnRechargeStateListener() {
// @Override
// public void onState(Activity activity, RechargeResult result) {
// if (result != null) {
// if (result.getResultModel() != null) {
// if (result.getResultModel().getCode() == 0) {
// consume2(purchaseToken);
// } else if (result.getResultModel().getCode() == 10500) {
// uploadToServer3(purchaseToken,mGoogleOrder, mOrderID, mPayTest);
// } else {
// LoginRealizeManager.sendGooglePlayFailed(mActivityRef.get(), mOrderID, purchaseToken,
// mGoogleOrder,
// mPayTest, result.getResultModel().getMsg(), mListener);
// }
// }
//
// }
//
// }
//
// });
//
// }
//
//
// /**
// * 释放
// */
// void release() {
// if (mBillingClient.isReady()) {
// mBillingClient.endConnection();
// }
// }
//
// /**
// * 补单操作
// */
// public void addOrder() {
// mBillingClient = BillingClient.newBuilder(mActivityRef.get())
// .setListener(mPurchasesUpdatedListener)
// .enablePendingPurchases()
// .build();
// mBillingClient.startConnection(new BillingClientStateListener() {
// @Override
// public void onBillingSetupFinished(BillingResult billingResult) {
// if (billingResult != null) {
// if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
// Purchase.PurchasesResult mResult = mBillingClient.queryPurchases(BillingClient.SkuType.INAPP);
// for (int i = 0; i < mResult.getPurchasesList().size(); i++) {
// if (mResult.getPurchasesList().get(i).isAcknowledged()) {//服务器验证
// consume2(mResult.getPurchasesList().get(i).getPurchaseToken());
// } else {//服务器未验证走验证流程
// uploadToServer3(mResult.getPurchasesList().get(i).getPurchaseToken(),
// mResult.getPurchasesList().get(i).getOrderId(),
// mResult.getPurchasesList().get(i).getAccountIdentifiers().getObfuscatedProfileId(),
// mPayTest);
// }
// }
// }
// }
//
// }
//
// @Override
// public void onBillingServiceDisconnected() {
// }
// });
// }
//
}
...@@ -73,7 +73,7 @@ class PayActivity : BaseActivity(), PayContract.View, ...@@ -73,7 +73,7 @@ class PayActivity : BaseActivity(), PayContract.View,
) )
id_img_back?.setOnClickListener { id_img_back?.setOnClickListener {
finish() finish()
startActivity(Intent(this,GooglePayActivity::class.java)) // startActivity(Intent(this,GooglePayActivity::class.java))
} }
id_activity_member_close?.setOnClickListener { id_activity_member_close?.setOnClickListener {
finish() finish()
......
...@@ -76,7 +76,7 @@ ...@@ -76,7 +76,7 @@
<string name="box_detail_open_box_tips">FAIRNESS GUARANTEED</string> <string name="box_detail_open_box_tips">FAIRNESS GUARANTEED</string>
<string name="box_detail_open_box_rule">Rule</string> <string name="box_detail_open_box_rule">Rule</string>
<string name="box_detail_open_box_test_play">TRY FOR FREE</string> <string name="box_detail_open_box_test_play">TRY FOR FREE</string>
<string name="box_detail_open_box_re_pumping">reopen card</string> <string name="box_detail_open_box_re_pumping">Reopen card</string>
<string name="box_detail_open_box_shop_pool">Items in this box</string> <string name="box_detail_open_box_shop_pool">Items in this box</string>
<string name="box_detail_open_box_one_lottery_btn">Open</string> <string name="box_detail_open_box_one_lottery_btn">Open</string>
<string name="box_detail_open_box_five_lottery_btn">Open 5x</string> <string name="box_detail_open_box_five_lottery_btn">Open 5x</string>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment