Skip to content

Commit

Permalink
Merge pull request #25 from qonversion/release/0.1.0
Browse files Browse the repository at this point in the history
Release/0.1.0
  • Loading branch information
suriksarkisyan authored Jul 28, 2022
2 parents 61fa0ff + a419037 commit 7a7d64c
Show file tree
Hide file tree
Showing 111 changed files with 10,801 additions and 87 deletions.
87 changes: 87 additions & 0 deletions .github/workflows/pr-checks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
name: PR checks

on:
pull_request:
types: [opened, synchronize, reopened]

jobs:
lint:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./sdk
steps:
- name: Checkout commit
uses: actions/checkout@v2

- name: Use Node.js
uses: actions/setup-node@v1
with:
node-version: '12.x'

- name: Cache NPM # leverage npm cache on repeated workflow runs if package.json didn't change
uses: actions/cache@v1
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
- name: Install Dependencies
run: yarn

- name: Run linter
run: yarn lint

typecheck:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./sdk
steps:
- name: Checkout commit
uses: actions/checkout@v2

- name: Use Node.js
uses: actions/setup-node@v1
with:
node-version: '12.x'

- name: Cache NPM # leverage npm cache on repeated workflow runs if package.json didn't change
uses: actions/cache@v1
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
- name: Install Dependencies
run: yarn

- name: Run tsc
run: yarn build

test:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./sdk
steps:
- name: Checkout commit
uses: actions/checkout@v2

- name: Use Node.js
uses: actions/setup-node@v1
with:
node-version: '12.x'

- name: Cache NPM
uses: actions/cache@v1
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
- name: Install Dependencies
run: yarn

- name: Run tests
run: yarn test
19 changes: 19 additions & 0 deletions .github/workflows/prerelease_github.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: Pre-release Github

on:
push:
branches:
- "main"

jobs:
pre-release:
runs-on: macos-latest

steps:
- uses: "marvinpinto/action-automatic-releases@latest"
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "latest"
prerelease: true
title: "Development Build"
files: LICENSE.txt
32 changes: 32 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Publish

on:
release:
types: [released]

jobs:
publish:
name: Upload archives
runs-on: macos-latest
steps:
- name: Check out code
uses: actions/checkout@v3

- name: Build typescript
run: |
cd sdk/
yarn
yarn build
- name: Setup node for publishing
uses: actions/setup-node@v3
with:
node-version: '16.x'
registry-url: 'https://registry.npmjs.org'

- name: Publish to npm
run: |
cd sdk/
npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
52 changes: 52 additions & 0 deletions .github/workflows/release_pull_requests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: Release pull requests

on:
push:
tags:
- prerelease/*

jobs:
prerelease:
runs-on: macos-latest

steps:
- uses: actions/checkout@v2
name: Checkout all
with:
fetch-depth: 0

- uses: olegtarasov/[email protected]
id: tagName
with:
tagRegex: 'prerelease\/(\d*\.\d*\.\d*)'

- name: Bump version
run: |
fastlane bump version:${{ steps.tagName.outputs.tag }}
- name: Create pull request
uses: peter-evans/create-pull-request@v3
with:
title: Release ${{ steps.tagName.outputs.tag }}
body: Release PR
labels: autocreated
branch: release/${{ steps.tagName.outputs.tag }}
base: develop

- uses: actions/checkout@v2
with:
ref: main

- name: Reset main branch
run: |
git fetch origin release/${{ steps.tagName.outputs.tag }}:release/${{ steps.tagName.outputs.tag }}
git reset --hard release/${{ steps.tagName.outputs.tag }}
- name: Create Pull Request
uses: peter-evans/create-pull-request@v3
with:
title: Release ${{ steps.tagName.outputs.tag }}
body: Release PR
labels: autocreated
branch: release/${{ steps.tagName.outputs.tag }}
base: main
46 changes: 1 addition & 45 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,45 +1 @@
# OSX
#
.DS_Store

# node.js
#
node_modules/
npm-debug.log
yarn-error.log

# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace

# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml

# BUCK
buck-out/
\.buckd/
*.keystore

# vscode
.vscode
.idea
46 changes: 15 additions & 31 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@
<a href="https://qonversion.io" target="_blank"><img width="360" height="45" src="https://qcdn3.sfo3.digitaloceanspaces.com/github/qonversion_logo.png"></a>
</p>

Qonversion is the data platform to power in-app subscription revenue growth.
Qonversion is the data platform to power subscription revenue growth.

* fast in-app subscriptions implementation
* fast subscriptions implementation
* back-end infrastructure to validate user receipts
* manage cross-platform user access to paid content on your app
* manage cross-platform user access to paid content on your mobile or web app
* comprehensive subscription analytics
* out-of-the-box integrations with the leading marketing, attribution, and product analytics platforms
* push notifications and in-app messaging to win back lapsed subscribers
* push notifications and in-app messaging for mobile apps to win back lapsed subscribers
* A/B Testing for in-app purchases

<p align="center">
Expand All @@ -28,14 +28,15 @@ Qonversion is the data platform to power in-app subscription revenue growth.
</a>
</p>

1. Application calls the purchase method of Qonversion SDK.
2. Qonversion SDK communicates with StoreKit or Google Billing Client to make a purchase.
3. If a purchase is successful, the SDK sends a request to Qonversion API for server-to-server purchase validation. Qonversion server receives accurate information on the in-app purchase status and user entitlements.
4. SDK returns control to the application with a processing state.
1. You communicate with Stripe to make a purchase.
2. If a purchase is successful, you send its' data to the Qonversion SDK.
3. The SDK sends a request to Qonversion API for server-to-server purchase validation.
4. Qonversion server receives accurate information on the purchase status and user entitlements.
5. The SDK returns handled user purchase.

## Analytics

Monitor your in-app revenue metrics. Understand your customers and make better decisions with precise subscription revenue data.
Monitor your revenue metrics. Understand your customers and make better decisions with precise subscription revenue data.

<p align="center">
<a href="https://documentation.qonversion.io/docs/analytics"><img width="90%" src="https://qonversion.io/img/screenshots/desktop/mobile_subscription_analytics.jpg">
Expand All @@ -51,30 +52,13 @@ Send subscription data to your favorite platforms. Share your mobile and web sub
</a>
</p>

## Personalized push notifications & in-app messaging

Qonversion allows sending automated, personalized push notifications and in-app messages initiated by in-app purchase events. This feature is designed to increase your app's revenue and retention, provide cancellation insights, reduce subscriber churn, and improve your subscribers' user experience.


See more in the [documentation](https://documentation.qonversion.io/docs/automations)
![](https://qonversion.io/img/@2x/automation/in-app-constructor.gif)

## A/B Testing for in-app purchases

Boost conversion rates with paywalls and in-app purchases A/B testing. Find the best pricing and paywall variations. Be flexible to prove hypotheses without app releases.

<p align="center">
<a href="https://documentation.qonversion.io/docs/subscription-ab-testing"><img width="90%" src="https://qcdn3.sfo3.digitaloceanspaces.com/github/ab_test.png">
</a>
</p>

## Why Qonversion?

* **No headaches with Apple's StoreKit & Google Billing.** Qonversion provides simple methods to handle Apple StoreKit & Google Billing purchase flow.
* **Receipt validation.** Qonversion validates user receipts with Apple and Google to provide 100% accurate purchase information and subscription statuses. It also prevents unauthorized access to the premium features of your app.
* **Receipt validation.** Qonversion validates user receipts with Stripe, Apple and Google to provide 100% accurate purchase information and subscription statuses. It also prevents unauthorized access to the premium features of your app.
* **Track and increase your revenue.** Qonversion provides detailed real-time revenue analytics including cohort analysis, trial conversion rates, country segmentation, and much more.
* **Integrations with the leading mobile platforms.** Qonversion allows sending data to platforms like AppsFlyer, Adjust, Branch, Tenjin, Facebook Ads, Amplitude, Mixpanel, and many others.
* **Change promoted in-app products.** Change promoted in-app products anytime without app releases.
* **No headaches with Apple's StoreKit & Google Billing.** Qonversion provides simple methods to handle Apple StoreKit & Google Billing purchase flow.
* **Win back lapsed subscribers.** Qonversion allows sending highly targeted push notifications triggered by server-side subscription events. You can send special offers to users who just canceled a free trial or a subscription. Plus you can deliver in-app messages with a beautiful native design that you create in Qonversion.
* **A/B test** and identify winning in-app purchases, subscriptions or paywals.
* **Cross-device and cross-platform access management.** If you provide user authorization in your app, you can easily set Qonversion to provide premium access to authorized users across devices and operating systems.
Expand All @@ -86,10 +70,10 @@ Convinced? Let's go!

## Getting Started

1. [Create a project and register your app](https://documentation.qonversion.io/docs/quickstart#1-create-a-project-and-register-your-app)
1. [Create a project and register your web app](https://documentation.qonversion.io/docs/quickstart#1-create-a-project-and-register-your-app)
2. [Configure entitlements](https://documentation.qonversion.io/docs/quickstart#2-configure-products--permissions-entitlements)
3. [Install the SDK](https://documentation.qonversion.io/docs/android-sdk)
4. [Use all SDK features in a few lines](https://documentation.qonversion.io/docs/using-the-sdks)
3. [Install the SDK](https://documentation.qonversion.io/docs/web-sdk#install)
4. [Use all SDK features in a few lines](https://documentation.qonversion.io/docs/web-sdk#launching-the-sdk)

## Documentation

Expand Down
38 changes: 38 additions & 0 deletions fastlane/Fastfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
# https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
# https://docs.fastlane.tools/plugins/available-plugins
#

# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane

default_platform(:mac)

def update_package_json(new_version)
path = "../sdk/package.json"
regex = /"version": ".*",/
result_value = "\"version\": \"#{new_version}\","

update_file(path, regex, result_value)
end

def update_file(path, regex, result_value)
file = File.read(path)
new_content = file.gsub(regex, result_value)
File.open(path, 'w') { |line| line.puts new_content }
end

platform :mac do
lane :bump do |options|
new_version = options[:version]

update_package_json(new_version)
end
end
2 changes: 2 additions & 0 deletions sdk/.eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
tests
babel.config.js
16 changes: 16 additions & 0 deletions sdk/.eslintrc.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
module.exports = {
root: true,
parser: '@typescript-eslint/parser',
plugins: [
'@typescript-eslint',
],
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'prettier',
],
rules: {
'@typescript-eslint/no-inferrable-types': "off",
'@typescript-eslint/no-empty-function': ["warn", { "allow": ["private-constructors"] }],
},
};
Loading

0 comments on commit 7a7d64c

Please sign in to comment.