OpenItem is a right approach. The only my concern is that it could make library usage more difficult (you will need to write more code).
There are few options:
1. Use JSON string instead of OpenItem. Something like
String sku = "{\"google\" : \"xxx\", \"amazon\" : \"yyy\"};
public void launchPurchaseFlow(Activity act, String sku, int requestCode, IabHelper.OnIabPurchaseFinishedListener listener);
But I am concern about readability of this syntax. Too many \ symbols. We can ignore official JSON specification and allow single quotes, it will make syntax more readable:
String sku = "{'google' : 'xxx', 'amazon' : 'yyy'};
2. Use OpenItem class but make a constructor that takes JSON string like
OpenItem sku = new OpenItem("{'google' : 'xxx', 'amazon' : 'yyy'});
I would vote for #1 but both ways are OK.
Best regards,
Vassili