{"id":17472374,"url":"https://github.com/pranavpandey/dynamic-billing","last_synced_at":"2025-04-22T10:46:37.684Z","repository":{"id":53149128,"uuid":"510065391","full_name":"pranavpandey/dynamic-billing","owner":"pranavpandey","description":"Implement Google Play in-app products and subscriptions on Android.","archived":false,"fork":false,"pushed_at":"2025-03-05T19:40:05.000Z","size":954,"stargazers_count":10,"open_issues_count":1,"forks_count":3,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-12T20:27:41.621Z","etag":null,"topics":["android","billing","in-app","library","payment","product","purchase","subscription"],"latest_commit_sha":null,"homepage":"https://dynamic.pranavpandey.com","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pranavpandey.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null},"funding":{"github":"pranavpandey","patreon":"pranavpandey","open_collective":"pranavpandeydev","ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":["paypal.me/pranavpandeydev"]}},"created_at":"2022-07-03T15:42:45.000Z","updated_at":"2025-03-05T19:40:09.000Z","dependencies_parsed_at":"2023-12-19T01:02:17.823Z","dependency_job_id":"aa554bdc-b741-41b6-9650-68a06c794be1","html_url":"https://github.com/pranavpandey/dynamic-billing","commit_stats":{"total_commits":43,"total_committers":1,"mean_commits":43.0,"dds":0.0,"last_synced_commit":"1c3013b3b5ed9f38f1a188fa44f85f402d15b9d3"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pranavpandey%2Fdynamic-billing","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pranavpandey%2Fdynamic-billing/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pranavpandey%2Fdynamic-billing/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pranavpandey%2Fdynamic-billing/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pranavpandey","download_url":"https://codeload.github.com/pranavpandey/dynamic-billing/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249191698,"owners_count":21227623,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","billing","in-app","library","payment","product","purchase","subscription"],"created_at":"2024-10-18T17:08:55.807Z","updated_at":"2025-04-16T16:31:54.708Z","avatar_url":"https://github.com/pranavpandey.png","language":"Java","funding_links":["https://github.com/sponsors/pranavpandey","https://patreon.com/pranavpandey","https://opencollective.com/pranavpandeydev","paypal.me/pranavpandeydev","https://paypal.me/pranavpandeydev"],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"./graphics/icon.png\" height=\"160\"\u003e\n\n# Dynamic Billing\n\n[![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg?)](https://www.apache.org/licenses/LICENSE-2.0.html)\n[![Release](https://img.shields.io/maven-central/v/com.pranavpandey.android/dynamic-billing)](https://search.maven.org/artifact/com.pranavpandey.android/dynamic-billing)\n\n**A library to implement Google Play in-app products and subscriptions on Android \n4.1 (API 16) and above.**\n\n\u003e [!IMPORTANT]\n\u003e It uses [AndroidX][androidx] so, first [migrate][androidx-migrate] your project to AndroidX.\n\u003cbr/\u003eIt is dependent on Java 8 due to the dependency on [Dynamic Utils][dynamic-utils].\n\u003cbr/\u003eSince v1.1.0, it is targeting Java 17 to provide maximum compatibility.\n\u003cbr/\u003eSince v1.2.0, the minimum SDK is Android 4.4 (API 19) to comply with the latest policies.\n\n---\n\n## Contents\n\n- [Installation](#installation)\n- [Usage](#usage)\n    - [Initialize](#initialize)\n    - [Listener](#listener)\n    - [Sponsor](#sponsor)\n    - [Dependency](#dependency)\n- [License](#license)\n\n---\n\n## Installation\n\nIt can be installed by adding the following dependency to your `build.gradle` file:\n\n```groovy\ndependencies {\n    // For AndroidX enabled projects.\n    implementation 'com.pranavpandey.android:dynamic-billing:1.2.0'\n}\n```\n\n---\n\n## Usage\n\nIt provides an `interface` that can be implemented by the `application` or `activity` class to \nperform various operations accordingly. It also has support to create an in-app `product` \nor `subscription` that can be linked to a `feature` so that it can be enabled on-demand after \na successful purchase.\n\n\u003e For a complete reference, please read the [documentation][documentation].\n\n### Initialize\n\n`DynamicBilling` must be initialized once before accessing its methods.\n\n\u003e Please make sure that you have enabled [Google Play Billing][google play billing] for your app\nand have in-app products or subscriptions properly setup within the console.\n\n```java\n// Initialize with application context.\nDynamicBilling.initializeInstance(applicationContext);\n```\n\n### Listener\n\n`DynamicBillingListener` is an `interface` that can be implemented by the `application` or\n`activity` class to perform various operations and receive `billing` callbacks.\n\n```java\n/**\n * An activity implementing the dynamic billing listener.\n */\npublic class BillingActivity extends Activity implements DynamicBillingListener {\n\n    ...\n\n    @Override\n    public void onBillingServiceDisconnected() { }\n\n    @Override\n    public void onBillingSetupFinished(@NonNull BillingResult billingResult) { \n        // Try to query available products from the billing library.\n        DynamicBilling.getInstance().queryProductDetailsAsync(\n                QueryProductDetailsParams.newBuilder()\n                        .setProductList(Arrays.asList(\n                                QueryProductDetailsParams.Product.newBuilder()\n                                        .setProductId(Feature.ID)\n                                        .setProductType(Feature.TYPE)\n                                        .build()\n                        )).build());\n\n        // Try to query the user purchases.\n        DynamicBilling.getInstance().queryPurchasesAsync(Subscription.QUERY_PURCHASES_PARAMS);\n    }\n\n    @Override\n    public void onPurchasesUpdated(@NonNull BillingResult billingResult,\n            @Nullable List\u003cPurchase\u003e purchases) {\n        // Update products state according to the user purchases.\n    }\n\n    @Override\n    public void onProductDetailsResponse(@NonNull BillingResult billingResult,\n            @NonNull List\u003cProductDetails\u003e productDetails) { \n        // Show available products to the user.\n    }\n\n    @Override\n    public void onQueryPurchasesResponse(@NonNull BillingResult billingResult,\n            @NonNull List\u003cPurchase\u003e purchases) {\n        // Update products state according to the user purchases.\n    }\n  \n    @Override\n    public void onConsumeResponse(@NonNull BillingResult billingResult,\n            @NonNull String purchaseToken) { }\n  \n    @Override\n    public void onAcknowledgePurchaseResponse(@NonNull BillingResult billingResult) {\n        // Automatically acknowledge purchases if required.\n        DynamicBilling.getInstance().acknowledgePurchases(billingResult, purchases);\n    }\n}\n```\n\n### Sponsor\n\nPlease become a [sponsor][sponsor] to get a detailed guide and priority support.\n\n### Dependency\n\nIt depends on the [dynamic-utils][dynamic-utils] to perform various internal operations. \nSo, its functions can also be used to perform other useful operations.\n\n---\n\n## Author\n\nPranav Pandey\n\n[![GitHub](https://img.shields.io/github/followers/pranavpandey?label=GitHub\u0026style=social)](https://github.com/pranavpandey)\n[![Follow on Twitter](https://img.shields.io/twitter/follow/pranavpandeydev?label=Follow\u0026style=social)](https://twitter.com/intent/follow?screen_name=pranavpandeydev)\n[![Donate via PayPal](https://img.shields.io/static/v1?label=Donate\u0026message=PayPal\u0026color=blue)](https://paypal.me/pranavpandeydev)\n\n---\n\n## License\n\n    Copyright 2022-2024 Pranav Pandey\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n[androidx]: https://developer.android.com/jetpack/androidx\n[androidx-migrate]: https://developer.android.com/jetpack/androidx/migrate\n[documentation]: https://pranavpandey.github.io/dynamic-billing\n[google play billing]: https://developer.android.com/google/play/billing/integrate\n[sponsor]: https://github.com/sponsors/pranavpandey\n[dynamic-utils]: https://github.com/pranavpandey/dynamic-utils\n[dynamic-support]: https://github.com/pranavpandey/dynamic-support\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpranavpandey%2Fdynamic-billing","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpranavpandey%2Fdynamic-billing","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpranavpandey%2Fdynamic-billing/lists"}