Home Tags Tech tip

Tag: tech tip

Add custom font to iOS and Android mobile App

How do I add a custom font to my mobile app for iOS and...

Dear Geek,   I have built a mobile app for iOS and Android using Titanium and I want to embed a custom font that I can...

Debugging in VS Code

Everyone's been there before. Your code doesn't work like you expect, your coffee cup is dry, and you're out of ideas. You need something...

Freedom of Choice: Alternative Editors for Building Titanium Apps

What is your IDE of choice? Developers love their IDEs! An IDE will often have a large and faithful following who will spend a good deal...

API for Cache Management

Out of the box, API Gateway doesn’t have a filter to create, read, update and delete content of the cache. Specially clearing the cache...

Give your Titanium App a Turbo Boost – Part 2

Exploring the power and extensibility of Axway Titanium Alloy In Part 1 of this series, we talked about the different ways you can use and...
Crossroad in green forest

APIs, Connectors and Proxies, Oh My!

The AMPLIFY Platform provides several methods for easily connecting to, cataloging, and consuming existing services. Whether you are looking at a cloud service, third-party...

Create an API Builder Multi-Container Application Using Kubernetes – Part 1

In this blog post, we'll replicate the simple API Builder + MongoDB multi-container application described in the Create an API Builder Multi-Container Application Using...

Mastering the API lifecycle – Part 4 | Sharing APIs with a Catalog

After importing and securing your APIs, you can easily share them with the world using the AMPLIFY Catalog – a place where partners, developers, and...

Mastering the API Lifecycle – Part 3 | Enhancing Observability

AMPLIFY Central allows you to observe your API traffic using a variety of helpful filters. You can even easily dive down into each individual...
Axway Integration Builder – Variable Persistence

Integration Builder – Manually Triggered Flow Example

In prior blog posts, we described how to trigger an Integration Builder flow from a Connector Event and from a Connector Request. In this...

Mastering the API Lifecycle – Part 2 | Securing your API

In Part 1 of this series, we learned how easy it is to design a custom API using tools like https://stoplight.io and import it...
Kubernetes

API Gateway Helm Chart

As with many Kubernetes solutions, we use Helm to manage the deployment of the API Gateway infrastructure. Helm is a very powerful tool that...

Mastering the API lifecycle – Part 1 | Design an API

AMPLIFY Central provides security and monitoring tools for your APIs. In this video, see how easy it is to design a custom API using tools...
Axway Integration Builder – Variable Persistence

Integration Builder – Connector Request Triggered Flow Example

Often, Integration Builder flows are triggered by an event received from an Integration Builder connector based on polling or a webhook from a change...

VIDEO: Configure API Portal – Public API Mode Part 3

This video is the third in a series. So, be sure to watch these parts first: Part 1 ...

VIDEO: Configure API Portal – Public API Mode Part 2

This video is a follow up to Part 1. So, if you haven't seen it yet, watch Part 1 here first. Then, watch this video to learn...

VIDEO: Configure API Portal – Public API Mode Part 1

API Portal is a tool that allows you to easily promote APIs and enables organizations to foster innovative culture. Watch this video to learn how...
Integration Builder and HubSpot

Create a Simple Integration Builder Flow

In this blog, we'll build a simple Integration Builder flow which monitors HubSpot CRM for new contacts. If a new contact is created in...
Alloy Tech Tip

How to Chain Controller Methods in Titanium by Using Alloy

A nice feature of Titanium and Alloy is the ability to create controllers and be reactive to triggers OR call methods without creating a...

How to Connect your App to Microsoft Azure Active Directory with AMPLIFY API Management

There are different scenarios in which you might want to integrate with Microsoft Azure Active Directory (AD): You want to let...

Get Started with AMPLIFY Central – Secure an API

Watch this video to learn how to secure an API in AMPLIFY Central using an API key as an example. You'll learn how to...

From Zero to App (with a Camera)

Guest poster, Michael Gangolf, has been using Titanium since 2010, been a Titan since 2017 and Android lover since the beginning. You can follow...

Get Started with AMPLIFY Central – Register an API

Watch this video to learn how to register an API as an API proxy in AMPLIFY Central using the Star Wars API as an...
Geolocation

Geolocation with Titanium – Part 1

As a freelance Titanium developer, I often get enquiries that relate to apps that require Geolocation services; either pin-pointing the user to a location...

AMPLIFY Central Fundamental Concepts – API Proxy

Watch this video to learn what an API proxy is and how API proxies help you manage your APIs in API Central. This video is...

Featured Module — RESTe

If you have been working with mobile apps very long, you have probably have seen that APIs are a huge chunk of your workload....

How to Access your CHANGELOG within your App to Implement a “What’s New” Feature

This guest post was authored by Adam Armstrong. Adam has been using Titanium since 2010 and is an Appcelerator Titan. He is the Manager...

API Builder Tutorial Series Ch. 5: What is a Flow and Flownode?

The fifth installment of our API Builder Tutorial series takes a deep dive on what is a Flow, Flownode, and how they interact with...

How to Create Flow-Nodes for API Builder with Axway Flow SDK

API Builder is tool that enables developers to rapidly create APIs and microservices with a low-code/no-code approach. API Builder achieves this by enabling you...

How to Write Titanium iOS Native Modules with Swift

We are thrilled to announce that with the upcoming Titanium SDK 8.0.0 release, you can finally write native modules for iOS in Swift! With...

How to Create App Names with Special Characters

If you're building cross-platform, native mobile apps with Titanium, you may have come across a need to have an app name that includes special...

How to Run your API Builder Standalone Docker Image on AWS Fargate

In my last blog post on Running API Builder 4.0 Docker Images on AWS EC2, we described how to set up multiple AWS EC2...

How to Run your API Builder Standalone Docker Image on AWS EC2 with High...

This guide describes how to run your API Builder 4.0 Docker image on AWS EC2 with high availability by creating two instances in two...

How to Connect to External Swagger Services with API Builder

Calling Google Cloud Translation service API Builder is tool that enables developers to rapidly create APIs and microservices with a low-code/no-code approach. API Builder achieves...

How to Run your API Builder Docker Image on AWS EC2

This guide describes how to run your API Builder Standalone Docker image on an AWS EC2 instance. This is suitable for test and development...

Hyperloop and Android: Using Third Party Android Libraries

Guest poster, Michael Gangolf, has been using Titanium since 2010, been a Titan since 2017 and Android lover since the beginning. You can follow...

How to Make your App Future Proof

If you've been using Titanium for a while, you know it can sometimes be frustrating to have to make the app work again after...

8 Tips to Speed Up Titanium App Development – Now and in the Future

There are always things that you need to do while developing apps. Things that keep coming back, or things you don’t do often enough....

Running API Builder on Raspberry Pi Cluster using Docker Swarm – Part 3

In Part 2 of this series, I showed how I was able to run API Builder on RasPi.  In Part 3, I'm going to...

From Zero to App (with a Map)

Guest poster, Michael Gangolf, has been using Titanium since 2010, been a Titan since 2017 and Android lover since the beginning. You can follow...

Over-Engineering Trivial Tasks Using AMPLIFY API Builder and Amazon Alexa

Are you like me and tired of doing anything with your hands? I mean that’s so 2015. Since the advent of Amazon’s Alexa (echo)...

Running API Builder on Raspberry Pi Cluster using Docker Swarm – Part 2

In Part 1 of this series, I gave a quick overview of the Raspberry Pi cluster configuration and how Docker Swarm is setup. This post provides the details on how to...

How to Use Modules from GitHub

Guest poster, Michael Gangolf, has been using Titanium since 2010, been a Titan since 2017 and Android lover since the beginning. You can follow...
Blog medical

Debrief of AMPLIFY Medical Adherence Demo

Last week, we posted a video and blog walk thru for our Axway AMPLIFY Medication Adherence Demonstration. One of the great things about this illustration...

Running API Builder on Raspberry Pi Cluster using Docker Swarm – Part 1

Raspberry Pi Cluster A cluster is a group of computers performing the same task, operating as a single system. Although Raspberry Pi's are pretty incredible...

API Builder Environment Variables

An environment variable is a dynamic-named value that can affect the way running processes will behave on a computer. Since API Builder is used to create...
Alloy Tech Tip

Taking Classes in Titanium Alloy to the Next Level

Styling in Titanium is done by applying properties to a UI component. In both classic and Alloy, this is done by properties. myUIElement.backgroundColor = "#ffffff";   In...

API Builder Standalone: Extend Flow Editor with Template Plugin

A template engine enhances a developer's ability to transform a given data into a different format with minimal coding. By default, the API Builder...

Adapting Titanium Apps for Different Screen Sizes

I once read someone on Twitter say that “Type is the one constant across all screen sizes” — it’s true if you don’t include...

API Builder: Geocode Your API Requests

API Builder provides a dashboard for viewing your API Analytics. An example is show below. The analytics provide useful information, such as which API was called, its...
Alloy Tech Tip

Moving A Classic Titanium App to Alloy

Last month, we explained some of the benefits of using Alloy instead of classic Titanium to build your apps. So, if you've got a...

6 Steps to Extensive Titanium App Build Automation

As a Mobile Solution Expert at ACA IT-Solutions, I’ve been using Titanium to build cross-platform native apps for a couple of years now. When...

How to Publish an API Builder Standalone App to Azure

I was playing with our new AMPLIFY API Builder Standalone release and decided to cook up an automation recipe. Here are the ingredients – make...

API Builder Tutorial Series Ch. 4: Model Composition & Parallel Flows

The fourth installment of our API Builder Tutorial series walks through how to use API Builder's flow editor to compose models and leverage the...

API Builder 4.0 Standalone – From Zero to Dockerized Microservice

In this blog post, we'll discuss how to use API Builder Standalone to go from zero to a Dockerized API Builder service that can...

Build Streaming APIs with AMPLIFY API Management and Streamdata

With streaming APIs, it's possible to push relevant updates to client devices from the server, which offers a couple of interesting benefits for large,...

Patch Your Titanium SDK Using Cherry Picking

In this quick post, I'd like to show you how to patch your current stable SDK (e.g. 7.2.0.GA) with features and bug fixes that...

API Builder and MQTT for IoT – Part 2

In Part 1, we introduced MQTT for IOT and how API Builder can leverage MQTT to communicate with IOT devices. In this blog post,...

Building Re-usable Components In Alloy

Titanium + Alloy is the fastest way to develop cross-platform, native mobile apps. Not only does Alloy use a Model, View, Controller paradigm (MVC),...

Using Custom Conditional Statements in Titanium Alloy Views

One of the many great features of Alloy (and I’ll be covering more in an upcoming post) is how it separates the business logic...

Build, Test & Deploy a Titanium Cross-Platform App with Fastlane

This guest post was authored by Adam Armstrong. Adam has been using Titanium since 2010 and is an Appcelerator Titan. He is the Manager...

Create Turntable Animation with Titanium

Guest poster, Michael Gangolf, has been using Titanium since 2010, been a Titan since 2017 and Android lover since the beginning. You can follow...

Using NPM Packages in Titanium

Let's begin with the fact that the above – Using NPM Packages in Titanium – is possible. Yep, it truly is. I noticed a...

API Builder Tutorial Series Ch. 3: API First Development

The third installment in our API Builder Tutorial Series walks through how to use API Builder's API First development. Watch below to learn how...

Guarantee Quality by Unit Testing Your Titanium Apps

Guest poster, David Cypers, is a freelance (mobile) solution developer with a strong focus on testability, UX and automation whose broad knowledge about the...

Dynamically Style Your App Based on Device Orientation

Alloy has some really interesting ways of styling your app. Not only can you create styles based on IDs and classes, but it's also...

Creating Cross-Platform Alloy Tags

Creating Cross-Platform Alloy Tags One of the great features of Alloy is the ability to customise and write Alloy tags. I use this feature a...

Using Base Controllers With Alloy

There are plenty of ways to re-use components with Alloy: widgets, CommonJS, and even redefining or creating new Alloy tags. One way that’s not...

Updating User Interface Elements Using Alloy & Backbone — Part 2

In Part 1, we showed how it was possible to use Titanium and Alloy and the built-in Backbone to manipulate user-interface elements, turn on...

API Builder Tutorial Series Ch. 2: Model First Development

The second installment in our API Builder Tutorial Series walks through how to use API Builder’s Model First development. Watch below to learn how...

API Builder and MQTT for IoT – Part 1

MQTT is a machine-to-machine (M2M)/Internet of Things (IoT) connectivity protocol and is the de facto communication protocol for IoT. While you could use HTTP(S)...

Create a Custom Android Actionbar in Titanium with Icons and Optional Badges

Ray Belisle is an Appcelerator Titan, Appcelerator Trainer and Developer from Calgary, Canada with 6+ years using Appcelerator. He has been developing and sharing...

API Builder Tutorial Series Ch. 1: Setup & Tour

Eager to incorporate API Builder into your workflow, but not sure how to get started? This video demonstrates how to install API Builder and...

API Builder 3.0: API First Simple Parameter Example

In part 1 of this blog post series, we introduced the two main new features of API Builder 3.0, namely API First API development...

Building Titanium Apps For HomePod

On February 9, 2018, Apple released HomePod, a “connected speaker” that plays Apple Music, and streams audio using AirPlay — all controlled with just...

Update User Interface Elements Using Alloy & Backbone

If you’re developing apps in Titanium and Alloy, you’ve probably used the Backbone to bind collections and models to Tables, ListViews, Views and other...

9 Tips for Improving Titanium Native App Performance

In my previous post, I detailed the steps I took to improve performance on an existing Titanium app. In this post, I summarize the...

Improving Titanium Native App Performance – A Real World Example

Using Titanium SDK, it’s possible for anyone to build native applications for iOS and Windows mobile devices using a combination of JavaScript, XML and...

Introducing API Builder 3.0 with API First & Flow Editor

Prior to API Builder 3.0, API's were tied to models exposed by connectors. While this is a powerful and easy way to expose data...
Gartner

WATCH: Demo of the Titanium Package for Atom

Last month marked a big milestone for Axway Appcelerator with the major release of SDK 7.0.0. With this release, we introduced an Atom package,...

Colour Animation in Titanium

Simon Buckingham is a designer, UX specialist, animator, creative and technical director and developer with more than 20 years experience. He has been making...

WATCH: Building Bots and Alexa Skills with API Builder

In this video from our Nov 16th SPARK event, Leor Brenman demonstrates the following: How to use API Builder to build...

Cool Technique to Use Vector Icons

This post was originally published on Medium by Prashant Saini, a mobile developer with Ushyaku Software Solutions LLP who loves creating high performing mobile...

ArrowDB Connector Dev & Production Environments

When you create an API Builder project you will find that the ArrowDB Connector is installed in your project. If you don't find it...

API Builder Spreadsheet Import

Currently API Builder does not provide a means of importing data into a model from a spreadsheet. For example, if you have an ArrowDB...

Titanium 101: Building Native Apps with JavaScript

Note: This post was originally published on Medium. Rene Pot is an Appcelerator Titan, long time member of the Titanium community, and runs the...

Android Fingerprint Authentication Using Titanium

This guest post was authored by Adam Armstrong. Adam has been using Titanium since 2010 and is an Appcelerator Titan. He is the Manager...

Titanium Tip: Secret Way to Add New Features to Titanium

This guest post was written by Brenton House. Brenton is a Senior Mobile Architect for Shockoe with over 20 years experience in mobile, API,...

Tech Tutorial: API Builder

In this Tech Tutorial, Principal Architect Darren Mason provides a hands-on introduction to API Builder (formerly Arrow). The video highlights how to model data...

Twilio SMS Messaging — Axway Titanium Cross-Platform Library

This guest post was authored by Adam Armstrong. Adam has been using Titanium since 2010 and is an Appcelerator Titan. He is the Manager...

API Builder: Facebook Chatbot Example

In a prior post, we described how to use API Builder to implement a Twitter Bot that posted tweets, retweeted and also followed anyone...

Optimising Titanium App File Sizes

In this post, Jason Kneen describes some simple techniques that can be used to reduce Titanium application file size.

API Builder: Twitter Bot Example

A bot is a device or piece of software that can execute commands, reply to messages, or perform routine tasks, such as online searches,...

Using JavaScript Promises in Titanium

This guest post was authored by Adam Paxton and originally published on adampaxton.com. Adam is a freelance mobile app developer for Polanco Media, and...

Using Faker for Mock Data

In a prior post, we discussed how to use mock data for your API. This post describes how to use faker in an API...

Creating an Alloy Library for Titanium: xhr.js

This guest post was authored by Adam Paxton and originally published on adampaxton.com. Adam is a freelance mobile app developer for Polanco Media, and...

Arrow Builder Debugging Tip – ngrok Secure Tunnel to localhost

During the development of Arrow Builder APIs, you are often running and debugging your Arrow Builder project locally on your machine prior to publishing....

Using the iOS 10.3 Request Review Dialog

We've all used those apps that constantly popup an interface to ask you to review the app with "Not now" or "Remind me later"...

Enhancing Titanium: How to use Images that require authentication

Note: This post was originally published on Medium. Rene Pot is an Appcelerator Titan, long time member of the Titanium community, and runs the...

Host Your Alexa Skill Service on AMPLIFY using API Builder, Part 2

In my Part 1 post, I described how easy it is to host an Alexa Skill Service on AMPLIFY using API Builder. I used...

Host Your Alexa Skill Service on AMPLIFY using API Builder, Part 1

Amazon Alexa Skills are comprised of two components, the Amazon Alexa Skill Interface hosted on Amazon and the Skill Service, which can be hosted...

Supercharging Alloy Controllers

Developing Titanium apps with Alloy means following a Model View Controller (MVC) pattern -- views are XML-based, Controllers contain JavaScript code and data is handled using...

Arrow Builder API Development with Cloud9

The Arrow Builder API development flow is to develop, run and test your APIs on your local machine using your favorite text editor and...

Titanium Basics: 11 Steps to a Maintainable App

Note: This post was originally published on Medium. Rene Pot is an Appcelerator Titan, long time member of the Titanium community, and runs the...

Arrow Builder Custom Fields

In prior blog posts and videos we discussed how to use Arrow Builder to create payload-optimized models & APIs and composite models & APIs...

Arrow Builder API Server Sizing using Load Testing

So, you've designed and tested your Arrow Builder Project (APIs) and are ready to publish it. What size container should you choose? Small, Medium,...

Arrow API Swagger Interface

When you create Arrow Builder APIs, the Arrow Admin Console displays your automatically-generated API docs in the API Docs tab as described here. An...

How to use Boot Camp for Windows 10 Development on a Mac

Most Appcelerator developers work on Macs. Which makes sense for cross-platform developers, since you can develop for Android on both Mac OS and Windows,...

How to change the color of links in Attributed Strings

Since Titanium 3.2 you can use Attributed Strings on iOS and in 4.0 we added support for Android. They are a great alternative for...

How to detect and run code specific to Genymotion Emulators

When you are running test you might need to differentiate for specific environments. For example, if you haven't patched your Genymotion emulators to include...

Sample App Walkthrough: Corporate Directory App

Appcelerator Studio contains a number of samples for new developers to use as learning tools. The Corporate Directory app showcases cross-platform development, the benefits...

Appcelerator Arrow Two-Factor Authentication

Background Mobile phone two-factor authentication is the identification of a user by means of the combination of two different components, namely the user’s login credentials...

Communicating between a Titanium App and an Xcode watchOS 2 App

Last week we published the beta of Titanium SDK 5.0.0. Among lots of other enhancements, this release adds support for bundling and communicating with...

Appcelerator PDF Viewer Demo

Viewing a PDF file in a mobile app is a fairly common use case. However, how you do this on Android and iOS are...

How to Use Density Specific Images

Mobile phones and tablets come in all shapes and sizes. This week we'll look at how to prepare your app with images that match...
Android Actionbar

Hiding the Android ActionBar

With the introduction of the AppCompat library in SDK 3.3.0, the Android ActionBar is displayed by default. However, there are times when your app's...
blog product titanium

Using the SendGrid API to send emails from your mobile apps

SendGrid is a cloud-based service that exposes and easy-to-use API to send emails from your apps, and Appcelerator apps are no exception. Sendgrid just...

Creating a MySQL-powered Web Service using Node.ACS

.appc_code{ background-color: #000; color: #f2f2f2; padding: 5px; margin: 5px; } Often Enterprises need to create mobile applications, such as a Sales Flash Report or Executive Dashboard application that integrate with...

Callbacks in Appcelerator Titanium Modules

.appc_code{ background-color: #000; color: #f2f2f2; padding: 5px; margin: 5px; } Today's guest post comes from Titanium developer Andrew Glover. Andrew talks about implementing "JavaScript-ish callbacks" associated with a native App47...
3D architecture abstract

Beginners: Javascript Objects and Arrays

If you're new to Titanium, first of all Welcome! If you are just starting out with Javascript, this post will definitely help you understand two...

Quick Tip: Increase the storage size of your Android Emulator

.appc_snippet{ border: 1px solid #a8a8a8; padding: 5px; ...

Consuming Web Services

In a previous post I talked about a library that makes it super easy to communicate with web services. In this post, I'll step...

Getting To Know Alloy (Part Two)

code { color:#fff; background-color:#000; padding:1px 3px 1px 3px; margin:1px 3px 1px 3px; ...
3D architecture abstract

Getting To Know Alloy (Part One)

This blog post refers to a previous version of Alloy. For updated Alloy reference see the Official Alloy Guides. The following is the first in...

Five Ways To Load Images Faster On Browser

If you’re running a heavy-app, you most likely will end up looking for ways to optimize its load time. Sometimes the issues are in...

Internationalization of App Names

Editor's Note: This and all further updates to internationalization can be found in the wiki. In the wiki we have pretty extensive documentation on internationalization...

Integrating an external library in an Android module

In my previous blog post, I talked about the Module Development Guide reference modules available for iOS and Android and how you can use...

How-To: Create a JavaScript module for CommonJS, Ti.include, or the browser

A common question we get is around techniques for code re-use between projects that use different types of JavaScript evaluation mechanisms, like the CommonJS...

How-To: Create a JavaScript module for CommonJS, Ti.include, or the browser

A common question we get is around techniques for code re-use between projects that use different types of JavaScript evaluation mechanisms, like the CommonJS...

Sharing Project Assets with Android Intents

As discussed in prior posts on the Developer Blog (here and here), Intents are one of the most powerful features of Android. They allow...

Customized TabBar for iOS in pure JS

Back when I first started using Titanium, I was working on an app that I wanted to have a color button (aka not use...

Versioning Your Android App

Editor’s note: This blog post is a basic tutorial. The most up-to-date version is available in the wiki. To change the version of the app...

Versioning Your Android App

Editor’s note: This blog post is a basic tutorial. The most up-to-date version is available in the wiki. To change the version of the app...

Handling Remote Data with HTTPClient and JSON

Editor’s note: This blog post is a basic tutorial. The most up-to-date version is available in the wiki. Between RESTful and SOAP-based web services, there's...

How to resize the Android Emulator

Editor’s note: This blog post is a basic tutorial. The most up-to-date version is available in the wiki. In this tutorial we'll cover a couple...

How to create and install a pre-populated database

pre { border:1px solid #9A0707; color:#333344; ...

Changing the Log Level in TiStudio

Editor’s note: This blog post is a basic tutorial, a more update version of this tutorial is always available on the wiki. Titanium Studio is...

Dealing with multiple screens and multiple languages

In the upcoming 1.5, we're adding some additional functionality to help you improve dealing with the various screens (thank you Android and RIM) as...

How-To: Perform CRUD operations on a local database

One of the most requested items from our Skribit widget was a step by step example of how to do database operations in Titanium....

How to create an iPad menu with animation

In this tutorial, we're going to show a technique used by the popular USA Today iPad application. The USA Today application combines the use...

Background Animation Visual Effect Tutorial

One of the coolest things about building a platform like Titanium is how people use it. Often, we look at what you've done and...

How-To: Create an iPhone Navigation Group

A question that's come up a bit in Q&A, chats, tweets, and e-mails I get from folks in the community is the question of...

How-To: Full Page CSS 3 Layout (Desktop)

Cross-browser full page layouts have long been a pain point for web developers. Luckily, for Titanium Desktop developers, you get to use all the...

How-To: Persist Complex JavaScript Objects

Everyone who has developed a Titanium application is likely familiar with the Properties API, which allows you to store key/value pairs without needing to...

How-To: Add A Drop Shadow to a View

A question recently came up in Q&A on how to add a drop shadow to a view, so I thought I would put together...

Building an Advanced Transaction UI with Titanium

Building advanced user interfaces in Titanium is pretty easy - once you get the hang of it. In this tutorial, I'm going to walk...

How to create a Tweetie-like pull to refresh table

We've had very many requests to add the ability to build Tweetie-like pull to refresh TableView functionality. This UI metaphor seems to have become...

Adding custom fonts to iPad

One of the nice capabilities of the iPad and 3.2 iPhone SDK is the ability to add your own custom fonts to your application....

Stay Connected

2,209FansLike
4,991FollowersFollow
1,330SubscribersSubscribe