/flooz-ios

flooz ios app

Primary LanguageC++

Flooz

build passing version 4.2.0 platform ios dependencies deprecated twitter @floozme

Installation

Flooz uses CocoaPods as dependency manager, which automates and simplifies the process of using 3rd-party libraries.

Installation process

$ git clone https://github.com/larafale/flooz-ios.git
$ cd flooz-ios
$ pod install
$ open Flooz.xcworkspace

CocoaPods 1.+ and Xcode 8 are required to build Flooz.

Architecture

Name Version Notes
ActionSheetPicker-3.0 2.2.0 Quickly reproduce the dropdown UIPickerView / ActionSheet functionality on iOS
AFNetworking 3.1.0 A delightful networking framework for iOS, OS X, watchOS, and tvOS
Branch 0.12.3 Branch helps mobile apps grow with deep links / deeplinks that power referral systems, sharing links and invites with full attribution and analytics
CardIO 5.3.2 Card.io provides fast, easy credit card scanning in mobile apps
Crashlytics 3.7.2 Part of Twitter Fabric, Crashlytics offers the most powerful, yet lightest weight crash reporting solution for iOS
EAIntroView 2.9.0 Highly customizable drop-in solution for introduction views
Fabric 1.6.7 With Fabric, you’ll have instant access to the same features you love within Crashlytics and more. Get a snapshot of your app’s health in real-time, understand what’s truly important and fix the most prevalent crashes
FBSDKCoreKit 4.13.1 Used to integrate iOS apps with Facebook Platform
FBSDKLoginKit 4.13.1 Used to integrate iOS apps with Facebook Platform
FBSDKMessengerShareKit 1.3.2 Used to integrate iOS apps with Facebook Messenger Platform
FBSDKShareKit 4.13.1 Used to integrate iOS apps with Facebook Platform
FXBlurView 1.6.4 UIView subclass that replicates the iOS 7 realtime background blur effect, but works on iOS 5 and above
GBDeviceInfo 4.1.0 Detects the hardware, software and display of the current iOS or Mac OS X device at runtime
HHRouter 0.1.9 URL Router for iOS. Clean, Fast & Flexible. Inspired by ABRouter & Routable iOS
HMSegmentedControl 1.5.2 A drop-in replacement for UISegmentedControl mimicking the style of the segmented control used in Google Currents and various other Google products
iCarousel 1.8.2 A simple, highly customisable, data-driven 3D carousel for iOS and Mac OS
IDMPhotoBrowser 1.8.4 Photo Browser / Viewer inspired by Facebook's and Tweetbot's with ARC support, swipe-to-dismiss, image progress and more
JPSVolumeButtonHandler 1.0.1 JPSVolumeButtonHandler provides an easy block interface to hardware volume buttons on iOS devices
JTHelper 0.3.0 List of common helpers for iOS projects
JTSImageViewController 1.5.1 An interactive iOS image viewer that does it all: double tap to zoom, flick to dismiss, et cetera
libPhoneNumber-iOS 0.8.14 iOS port from libphonenumber (Google's phone number handling library)
MGSwipeTableCell 1.5.5 An easy to use UITableViewCell subclass that allows to display swippable buttons with a variety of transitions
Mixpanel 3.0.0 iPhone tracking library for Mixpanel Analytics
MZFormSheetController 3.1.3 MZFormSheetController provides an alternative to the native iOS UIModalPresentationFormSheet, adding support for iPhone and additional opportunities to setup controller size and feel form sheet
NSDate+Calendar 0.0.9 NSDate categories to access date components and many more
OneSignal 1.13.3 OneSignal is a free push notification service for mobile apps. This plugin makes it easy to integrate your native iOS app with OneSignal
PonyDebugger 0.4.5 Remote network and data debugging for your native iOS app using Chrome Developer Tools
PPHelpMe 1.0.2 List of common helpers for iOS projects
RDVTabBarController 1.1.9 Highly customizable tabBar and tabBarController for iOS
SDWebImage 3.8.1 Asynchronous image downloader with cache support as a UIImageView category
SMPageControl 1.2 A drop in replacement for UIPageControl with a slew of additional customization options
Stripe 8.0.0 Stripe bindings for iOS and OS X
TTTAttributedLabel 2.0.0 A drop-in replacement for UILabel that supports attributes, data detectors, links, and more
TUSafariActivity 1.0.4 A UIActivity subclass that opens URLs in Safari
UICKeyChainStore 2.1.0 UICKeyChainStore is a simple wrapper for Keychain on iOS. Makes using Keychain APIs as easy as NSUserDefaults
UIFloatLabelTextField 1.2.5 A subclassed UITextField that follows the Float Label UI design pattern
VCTransitionsLibrary 1.5.0 A collection of iOS7 animation controllers and interaction controllers, providing flip, fold and all kinds of other transitions
VENCalculatorInputView 1.5.4 Calculator keyboard used in the Venmo iOS app

#####The models are initialized from API calls, several kinds of models are available:

  • FLAlert In-App alert object (appear from top)
  • FLComment Transaction and pot comment object
  • FLCountry Country object with flag, phone prefix...
  • FLCreditCard Credit card object with holder, card number, expires...
  • FLFriendRequest Pending friend request object
  • FLInvitationTexts Invitations texts used for app sharing (Fb, twitter, mail, sms)
  • FLNotification Notification object (text, cAt)
  • FLPreset Preset object used for initalizing new collect or new flooz view from Triggers
  • FLReport Report object used when sending user or transaction report to the API
  • FLShopItem Shop item can be a product or category
  • FLSocial Social data from collect and transactions (nbLikes, nbComments, ...)
  • FLTexts Texts sent from API, used to manage all kinds of content within the app
  • FLTransaction Transaction object (can be a pot)
  • FLTrigger Trigger object with next triggers, data and kind
  • FLUser User object with all visible informations

UI

The UI part of Flooz is based entirely on code, no xibs or storyboards are used in the project, almost every view is a specific class that can be found in the Views folder. Lot of widgets are available in this folder including but not only:

Controllers used in the project are subclasses of GlobalViewController or BaseViewController, wich handle view template generation (backgroundColor, contentView, navigationBar, navigationItems).

Networking

Api documentation can be found here, it contains all routes and their parameters. AFNetworking is used for all network requests and all responses are formatted in JSON. User access token is added, with several other infos (device, version, os, ...), in every requests as an URL parameter. The Flooz singleton contains all requests, user data, texts sent from api and socket handler.

Succeeding requests will return one of the following template:

  • Unique object

     	{
     		code: 200,
     		item: Object,
     		triggers: [Trigger],
     		popup: PopupData
     	}
  • List of objects

     	{
     		code: 200,
     		items: [Object],
     		triggers: [Trigger],
     		popup: PopupData
     	}
  • List of objects with pagination

     	{
     		code: 200,
     		items: [Object],
     		next: NextURL
     		triggers: [Trigger],
     		popup: PopupData
     	}

Sockets are used in this project for live events or updating information, sockets are handled with SocketIO. Two sockets feed are listening:

  • event can contain popup or triggers
  • feed update number of unread notifications, can also contain triggers

Triggers

A Trigger is a special object sent by the API, it's used for multiple purposes and is defined by a key. Triggers will be encapsulated in an array, each element of this array will be executed one after another by the FLTriggerManager, only some specific button Triggers or Pickers and the Triggers generated in the app are executed alone by the same manager.

Structure

	{
		key: 'namespace:view:action',
		delay: 0,
		data: {},
		triggers: [Trigger]
	}

key : string (required)

The key is a string formatted in three part with namespace first, then view and finally an action. Only the view part can be left empty. Between each component a : is required.

Key format: namespace:view:action

  • namespace: represent the context of the trigger (ex: app, pay, card, shop, settings, ...)
  • view: define the specific view in the namespace where the trigger will take effect
  • action: define the kind of effects the trigger will have; several actions are available:
    • ask (request permissions (notifs, facebook)
    • call (http::call used to make http request on the API or a specific URL)
    • clear (clear local data)
    • hide (hide specific view defined by the namespace and the view)
    • login (force user identification)
    • logout (logout current user from the app)
    • open (open specific URL with native phone view)
    • picker (pick specific content and send it through its next triggers)
    • send (send images from current transaction or pot)
    • show (show specific view defined by the namespace and the view)
    • sync (force updating specific data)

delay : float

Execution of a trigger can be delayed with this parameter. Value has to be set in seconds.

data : jsonObject

Parameters specific to each trigger. Learn more using the push playground here.

data : array<Trigger>

Array of Triggers executed one after another when the current Trigger is done.

Usage

Buttons

Lots of buttons within the app use Triggers to do actions and are sets by the API. It's the case for all home menu buttons, popup buttons, accept/refuse/participate/close buttons, ...

Payment Process

The payment process in any part of the app is actually based on triggers sent by one http request. The API respond with a list of Triggers starting with a confirmation popup, then authenticate user using fingerprint or secure code and finally process the payment (if necessary a process where the user can register his credit card or cash-in from audiotel can be added in the process).

Pickers

Pickers are specific kind of triggers used for picking an user, an image or a scope and send it in the data of its successTrigger.

URL Scheme

Flooz can be opened using a url scheme and in this url can be inserted Triggers that will be executed when the app is running and the user authenticated.

URL: flooz://

Notifications

In push notifications or internal notifications Triggers are used to handle what the app has to do when the user interacts with these notifications.

Credits

Flooz is owned and maintained by the Flooz SAS.

Security Disclosure

If you believe you have identified a security vulnerability with Flooz, you should report it as soon as possible via email to dev@flooz.me. Please do not post it to a public issue tracker.