上个月google play内支付这个功能,这功能我是花了很长时间才完成的。从官方下载回来Demo是一个充汽油的例子,,我自己整理下了,说说我的看法,可能不一定都对,但希望能给你们提供帮助。
开发前的准备,如果没,就向你们公司申请吧:
1、root过的android手机一部
2、工具(VPN)
3、Google帐号一个 (需绑定visa等信用卡) 用做测试帐号
4、开通一个google平台帐号(能把sdk发布上去)
首先说下base64EncodedPublicKey的作用的吧,这个是每个app发布到google play后台时,google会生成的一个非常长key ,这个key是用在google交易中的安全验证,建议
把它放在服务端,通过请求服务端时获取;
接下来是productid,它是你在后台设置的一个产品id,当你发布你的app上去并设置好产品id时,你就可以通过这个id来获取该商品的相关信息,如:价格、产品名、详细说明等,这个也是连接google play内支付的第一个步骤;
当你获取到以上信息时,就证明你的后台设置正确了,并且可以进入google的支付界面了,用户在上面的操作,会通过onActivityResult返回数据,你只需要判断requestCode 和resultCode 是否正常,(返回相关参数,请参看api吧,正常是requestCode == 1001,resultCode == RESULT_OK)以上操作完成后,还需一个“消耗”(consumePurchase)的步骤,官网也提到过,因为这些交易不一定都是只交易一次而已,像游戏币这些的话,是一种虚拟的货币,是可多次购买的,所有消耗这一步其实就是为了告诉google,这件商品是可被买家多次购买的,“消耗”这一步骤可调用多次,Demo上在各个环节上也调用过的。
注意事项:
1、 在上传app时,为了前期开发方便 ,可随意上传,但必须要加上权限
2、如果app没正式发布,那么测试时,需要在后台添加测试人员,该测试人员就是以上讲的第三点,而且需要正式打包出来测试(keystore一定要保持好)
代码简单说明:
mHelper :是一个帮助类,可在demo上查看
SKU_GAS:商品的名字(后台定义的)
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
// 这是连接的第一步,通常是初始化和检查设备是否符合购买要求 TODO...
mHelper.queryInventoryAsync(mGotInventoryListener, list);
}
//查询商品
IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(final IabResult result,
final Inventory inventory) {
// 这是查询其商品的相关信息,如价格,商品说明等。 TODO...
mHelper.launchPurchaseFlow(activity, SKU_GAS, RC_REQUEST,
mPurchaseFinishedListener, payload);
}
//购买商品
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(final IabResult result,
final Purchase purchase) {
// 是否购买成功。 TODO...
mHelper.consumeAsync(purchase, mConsumeFinishedListener);
}
//通知google消耗商品
IabHelper.OnConsumeFinishedListener mConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener() {
public void onConsumeFinished(final Purchase purchase,
final IabResult result) {
// 查询该商品是否以消耗成功,为下一次购买做准备。 TODO...
}