android - 将优惠保存到 Google 电子钱包

标签 android android-pay

在我的应用中,我需要实现从我的应用到 Google 电子钱包的储蓄优惠。我找到了这个教程:Developer Documentation- wallet ,但是当我尝试实现它时,我遇到了一个问题。页面中有代码:

OfferWalletObject wob = OfferWalletObject
        .newBuilder()...

但是我的环境说那个类没有这个方法。此页面中没有任何关于此方法的说明:Developer Reference Document

有人可以帮忙解决这个问题,或者说一下在谷歌钱包中保存优惠的其他方法。

最佳答案

通过此视频,我已成功集成 Google 电子钱包。 Link

  public class MainActivity extends ActionBarActivity implements  GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener{


private GoogleApiClient mGoogleApiClient;
private SupportWalletFragment mWalletFregment;
private SupportWalletFragment mXmlWalletFregment;

private MaskedWallet mMaskedWallet;
private FullWallet mFullWallet;

public static final int MASKED_WALLET_REQUEST_CODE=888;
public static final int FULL_WALLET_REQUEST_CODE=889;
public static final String WALLET_FRAGMENT_ID="wallet_fragment";


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    mWalletFregment=(SupportWalletFragment) getSupportFragmentManager()
            .findFragmentByTag(WALLET_FRAGMENT_ID);

    WalletFragmentInitParams startParams;
    WalletFragmentInitParams.Builder startParamsBuilder=WalletFragmentInitParams.newBuilder()
            .setMaskedWalletRequest(generateMaskedwalletRequest())
            .setMaskedWalletRequestCode(MASKED_WALLET_REQUEST_CODE);

    startParams=startParamsBuilder.build();

    Log.e("FREGMENT",""+mWalletFregment);
    if(mWalletFregment==null){
        WalletFragmentStyle walletFragmentStyle=new WalletFragmentStyle()
                .setBuyButtonText(BuyButtonText.BUY_WITH_GOOGLE)
                .setBuyButtonWidth(Dimension.MATCH_PARENT);

        WalletFragmentOptions walletFragmentOptions=WalletFragmentOptions.newBuilder()
                .setEnvironment(WalletConstants.ENVIRONMENT_SANDBOX)
                .setFragmentStyle(walletFragmentStyle)
                .setTheme(WalletConstants.THEME_HOLO_LIGHT)
                .setMode(WalletFragmentMode.BUY_BUTTON)
                .build();

        mWalletFregment=SupportWalletFragment.newInstance(walletFragmentOptions);
        mWalletFregment.initialize(startParams);

    }
    Log.e("FREGMENT",""+mWalletFregment);
    getSupportFragmentManager().beginTransaction()
            .replace(R.id.wallet_button_holder,mWalletFregment,WALLET_FRAGMENT_ID)
            .commit();

    mGoogleApiClient=new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(Wallet.API,new Wallet.WalletOptions.Builder()
                        .setEnvironment(WalletConstants.ENVIRONMENT_SANDBOX)
                        .setTheme(WalletConstants.THEME_HOLO_LIGHT)
                        .build())
            .build();

    setContentView(R.layout.activity_main);
}


@Override
protected void onStart() {
    mGoogleApiClient.connect();
    super.onStart();
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode){
        case MASKED_WALLET_REQUEST_CODE :
            switch (resultCode){
                case Activity.RESULT_OK :
                    mMaskedWallet=data.getParcelableExtra(WalletConstants.EXTRA_MASKED_WALLET);
                    break;
                case Activity.RESULT_CANCELED :
                    break;
                default:
                    Toast.makeText(this,"An Error Occured",Toast.LENGTH_LONG).show();
                    break;
            }
            break;
        case FULL_WALLET_REQUEST_CODE :
            switch (resultCode){
                case Activity.RESULT_OK :
                    mFullWallet= data.getParcelableExtra(WalletConstants.EXTRA_FULL_WALLET);
                    Toast.makeText(this,mFullWallet.getProxyCard().getPan().toString(),Toast.LENGTH_LONG).show();
                    Wallet.Payments.notifyTransactionStatus(mGoogleApiClient,
                            generateNotifyTransactionStatusrequest(mFullWallet.getGoogleTransactionId(),
                                    NotifyTransactionStatusRequest.Status.SUCCESS));
                    break;
                default:
                    Toast.makeText(this,"An Error Occured",Toast.LENGTH_LONG).show();
                    break;

            }
            break;
        case WalletConstants.RESULT_ERROR:
            Toast.makeText(this,"An Error Occured",Toast.LENGTH_LONG).show();
            break;
    }

}


public static NotifyTransactionStatusRequest generateNotifyTransactionStatusrequest(
        String googleTransactionId,int status ){

    return NotifyTransactionStatusRequest.newBuilder()
            .setGoogleTransactionId(googleTransactionId)
            .setStatus(status)
            .build();
}

private MaskedWalletRequest generateMaskedwalletRequest(){
    MaskedWalletRequest maskWalletRequest=MaskedWalletRequest.newBuilder()
            .setMerchantName("Google I/O CoadeLab")
            .setPhoneNumberRequired(true)
            .setShippingAddressRequired(true)
            .setCurrencyCode("INR")
            .setEstimatedTotalPrice("10.00")
            .setCart(Cart.newBuilder()
                      .setCurrencyCode("INR")
                      .setTotalPrice("10.00")
                      .addLineItem(LineItem.newBuilder().setCurrencyCode("INR")
                                      .setQuantity("1")
                                      .setUnitPrice("10.00")
                                       .setTotalPrice("10.00")
                                       .build() )
                      .build())
            .build();
    return maskWalletRequest;
}


private FullWalletRequest generateFullWalletRequest(String googleTransactionId){
     FullWalletRequest fullWalletRequest=FullWalletRequest.newBuilder()
             .setCart(Cart.newBuilder()
                      .setCurrencyCode("INR")
                       .setTotalPrice("10.10")
                        .addLineItem(LineItem.newBuilder()
                                .setCurrencyCode("INR")
                                .setQuantity("1")
                                .setUnitPrice("10.00")
                                .setTotalPrice("10.00")
                                .build())
                     .addLineItem(LineItem.newBuilder()
                             .setCurrencyCode("INR")
                             .setDescription("Tax")
                             .setRole(LineItem.Role.TAX)
                             .setTotalPrice(".10")
                             .build())
                     .build())
             .build();
    return fullWalletRequest;
}


public void requestFullWallet(View view){
       if(mGoogleApiClient.isConnected()){
           Wallet.Payments.loadFullWallet(mGoogleApiClient,
                   generateFullWalletRequest(mMaskedWallet.getGoogleTransactionId()),
                   FULL_WALLET_REQUEST_CODE);
       }
}

@Override
public void onConnected(Bundle bundle) {

}

@Override
public void onConnectionSuspended(int i) {

}

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {

}
}

希望这对你有用。

关于android - 将优惠保存到 Google 电子钱包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26467437/

相关文章:

java - 奇怪的 AlarmManager 行为

android - 它什么时候会在 Android 应用程序的 admob 上生效

android - 可以在谷歌钱包中取消测试购买吗

android - 此商家未启用 Google Pay。 [Android, React-Native]

google-checkout - 无法创建 Google 电子钱包商家帐户

java - 添加 'ndk { abiFilters ' armeabi-v7a' ,'arm64-v8a' ,'x86' ,'x86_64' }' 后 Android 应用程序不兼容 64 位

java - 您如何从 servlet 中的 HttpResponse 获取内容?

android - 当我有一个字符串时,为什么 toast 输出中出现空白文本?

Android Pay - 以编程方式单击 "Buy Now"按钮

google-play - 移动 Chrome 应用程序支付 API