# Woocommerce Android SDK This is an woocommerce api client for android Built-based on the documentation: http://woocommerce.github.io/woocommerce-rest-api-docs/#introduction ## Installation Please note that files are still being moved around - the project should be stable before end Feb 2019 ### Maven dependency: Step 1. Add the JitPack repository to your build file ```xml jitpack.io https://jitpack.io ``` Step 2. Add the dependency ```xml com.github.gilokimu woodroid 0.2.0 ``` ### Gradle dependency: Step 1. Add the JitPack repository to your build file ```gradle allprojects { repositories { ... maven { url 'https://jitpack.io' } } } ``` Step 2. Add the dependency ```gradle dependencies { implementation 'com.github.gilokimu:woodroid:0.2.0' } ``` ## Getting started Generate API credentials (Consumer Key & Consumer Secret) following this instructions . Check out the WooCommerce API endpoints and data that can be manipulated in . ## Demo I have left consumer key and secret within the app, for you to test the app without an installation of wordpress. To use my installation of wordpress, here are the credentials: username: demo password: demo2019 https://gilo.me/store/wp-admin PS/ Do no harm ## Setup Setup for the new WP REST API integration (WooCommerce 2.6 or later): ```kotlin val woocommerce = Woocommerce.Builder() .setSiteUrl("http://example.com") .setApiVersion(Woocommerce.API_V2) .setConsumerKey("ck_XXXXX") .setConsumerSecret("cs_XXXX") .build() ``` ## Usage Getting products example ```kotlin woocommerce.ProductRepository().products().enqueue(object : Callback> { override fun onResponse(call: Call>, response: Response>) { val productsResponse = response.body() for (product in productsResponse!!) { products.add(product) } adapter.notifyDataSetChanged() } override fun onFailure(call: Call>, t: Throwable) { } }) ``` ## Supported resources The sdk currently supports : 1. Order Notes 2. Refunds 3. Attributes 4. Attribute Terms 5. Product Category 6. Shipping Class 7. Product Tags 8. Variations 9. Coupons 10. Customers 11. Orders 12. Products 13. Reports ### Coming soon 14. Settings 15. Payment gateway ## API Methods The general resource method calls are 1. Create - Pass the object to create 2. List - a list of all items 3. View single method - retries a single item 4. Delete - deletes the resource 5. Filter - provides a list that meets a criteria ### Create Method Create an instance of the resource then pass onto a .create() function on the resource repository ```kotlin val coupon = Coupon() coupon.code = code coupon.description = description woocommerce.CouponRepository().create(coupon).enqueue(object : Callback { override fun onResponse(call: Call, response: Response) { val couponResponse = response.body() finish() } override fun onFailure(call: Call, t: Throwable) { } }) ``` ### List Method ```kotlin woocommerce.CouponRepository().coupons().enqueue(object : Callback> { override fun onResponse(call: Call>, response: Response>) { val couponResponse = response.body() for (coupon in couponResponse!!) { coupons.add(coupon) } adapter.notifyDataSetChanged() } override fun onFailure(call: Call>, t: Throwable) { } }) ``` ### View single item ```kotlin val couponId = intent.getIntExtra("couponId", 0) woocommerce.CouponRepository().coupon(couponId).enqueue(object : Callback { override fun onResponse(call: Call, response: Response) { val coupon = response.body()!! etCode.setText(coupon.code.toUpperCase()) etDescription.setText(coupon.description) } override fun onFailure(call: Call, t: Throwable) { } }) ``` ### Delete item ```kotlin woocommerce.CouponRepository().delete(couponId).enqueue(object : Callback { override fun onResponse(call: Call, response: Response) { if (response.isSuccessful) { val coupon = response.body()!! finish() }else{ Toast.makeText(this@CouponActivity, "" + response.code() + " : " + response.message(), Toast.LENGTH_SHORT).show() } } override fun onFailure(call: Call, t: Throwable) { stopShowingLoading() } }) ``` ### Filter item ```kotlin val filter = CouponFilter() filter.search = "FEB" woocommerce.CouponRepository().coupons(filter).enqueue(object : Callback> { override fun onResponse(call: Call>, response: Response>) { val couponResponse = response.body() for (coupon in couponResponse!!) { coupons.add(coupon) } adapter.notifyDataSetChanged() } override fun onFailure(call: Call>, t: Throwable) { } }) ``` ### Sample app The sample app implements an MVVM approach which would look slightly different from the above. The methods are the same though ## Contribution Contributions are highly welcomed, just create a PR ## Slack You can also reach out through slack in case of any issues with installation or feature request ## Love the Project? You can donate to support the project futher.