SlideShare ist ein Scribd-Unternehmen logo
1 von 148
Zaawansowany marketing
w aplikacjach mobilnych
na przykładzieVemma Office 3.0
VEMMA OFFICE
iPhone & Android
Aplikacja do zarządzania
biznesem i binarną siecią
kontaktów
VEMMA OFFICE
iPhone & Android
Aplikacja do zarządzania
biznesem i binarną siecią
kontaktów
- pierwszy na świecie mobilny Multi Level Marketing
VEMMA OFFICE
iPhone & Android
Aplikacja do zarządzania
biznesem i binarną siecią
kontaktów
- pierwszy na świecie mobilny Multi Level Marketing
- pełen dostęp do wszystkich aktywności w sieci
VEMMA OFFICE
iPhone & Android
Aplikacja do zarządzania
biznesem i binarną siecią
kontaktów
- pierwszy na świecie mobilny Multi Level Marketing
- pełen dostęp do wszystkich aktywności w sieci
- zaawansowany marketing to interakcja z dystrybutorami
WYZWANIA PO
RELEASIE 2.0
WYZWANIA PO
RELEASIE 2.0
- rosnąca liczba użytkowników
WYZWANIA PO
RELEASIE 2.0
- rosnąca liczba użytkowników
- zapotrzebowanie na mobilny
dostęp do większej ilości danych
WYZWANIA PO
RELEASIE 2.0
- rosnąca liczba użytkowników
- zapotrzebowanie na mobilny
dostęp do większej ilości danych
- optymalizacja kodu, komunikacji
z API oraz funkcjonalności
aplikacji
WYZWANIA PO
RELEASIE 2.0
- rosnąca liczba użytkowników
- zapotrzebowanie na mobilny
dostęp do większej ilości danych
- optymalizacja kodu, komunikacji
z API oraz funkcjonalności
aplikacji
- wsparcie dla nowych urządzeń i
nowych wersji mobilnych
systemów operacyjnych
WYZWANIA PO
RELEASIE 2.0
- rosnąca liczba użytkowników
- zapotrzebowanie na mobilny
dostęp do większej ilości danych
- optymalizacja kodu, komunikacji
z API oraz funkcjonalności
aplikacji
- wsparcie dla nowych urządzeń i
nowych wersji mobilnych
systemów operacyjnych
-Vemma 3.0 - odpowiedź na
wyzwania
Vemma 2.0
Vemma 2.0
Klasyczna nawigacja i UI oparty na tab barach
Vemma 2.0
Klasyczna nawigacja i UI oparty na tab barach
Konieczność refactoringu i ulepszenia kodu
Vemma 2.0
Klasyczna nawigacja i UI oparty na tab barach
Konieczność refactoringu i ulepszenia kodu
Brak miejsca na nowe funkcje
Vemma 3.0
Vemma 2.0
Klasyczna nawigacja i UI oparty na tab barach
Konieczność refactoringu i ulepszenia kodu
Brak miejsca na nowe funkcje
Zupełnie nowy layout i nawigacja
Vemma 3.0
Vemma 2.0
Klasyczna nawigacja i UI oparty na tab barach
Konieczność refactoringu i ulepszenia kodu
Brak miejsca na nowe funkcje
Zupełnie nowy layout i nawigacja
Vemma 3.0
Wsparcie iPhone 5
Vemma 2.0
Klasyczna nawigacja i UI oparty na tab barach
Konieczność refactoringu i ulepszenia kodu
Brak miejsca na nowe funkcje
Zupełnie nowy layout i nawigacja
Vemma 3.0
Wsparcie iPhone 5
Nowe funkcje
Vemma 2.0
Klasyczna nawigacja i UI oparty na tab barach
Konieczność refactoringu i ulepszenia kodu
Brak miejsca na nowe funkcje
Funkcjonalność
Funkcjonalność
- obsługa bazy setek tys. kontaktów
Funkcjonalność
- obsługa bazy setek tys. kontaktów
- liczne kanały komunikacji w aplikacji
Funkcjonalność
- obsługa bazy setek tys. kontaktów
- liczne kanały komunikacji w aplikacji
- telefon, sms, email
Funkcjonalność
- obsługa bazy setek tys. kontaktów
- liczne kanały komunikacji w aplikacji
- telefon, sms, email
- pełna interakcja: wiadomości hotlist
Funkcjonalność
- obsługa bazy setek tys. kontaktów
- liczne kanały komunikacji w aplikacji
- telefon, sms, email
- pełna interakcja: wiadomości hotlist
- videozaproszenia
Funkcjonalność
- obsługa bazy setek tys. kontaktów
- liczne kanały komunikacji w aplikacji
- telefon, sms, email
- pełna interakcja: wiadomości hotlist
- videozaproszenia
- push notifications jako
biznesowy feedback
Funkcjonalność
- obsługa bazy setek tys. kontaktów
- liczne kanały komunikacji w aplikacji
- telefon, sms, email
- pełna interakcja: wiadomości hotlist
- videozaproszenia
- push notifications jako
biznesowy feedback
Design na miarę potrzeb
Funkcjonalność
- slide menu
- obsługa bazy setek tys. kontaktów
- liczne kanały komunikacji w aplikacji
- telefon, sms, email
- pełna interakcja: wiadomości hotlist
- videozaproszenia
- push notifications jako
biznesowy feedback
Design na miarę potrzeb
Funkcjonalność
- slide menu
- obsługa bazy setek tys. kontaktów
- liczne kanały komunikacji w aplikacji
- telefon, sms, email
- pełna interakcja: wiadomości hotlist
- videozaproszenia
- push notifications jako
biznesowy feedback
Design na miarę potrzeb
- metro tiles
Funkcjonalność
- slide menu
- obsługa bazy setek tys. kontaktów
- liczne kanały komunikacji w aplikacji
- telefon, sms, email
- pełna interakcja: wiadomości hotlist
- videozaproszenia
- push notifications jako
biznesowy feedback
Design na miarę potrzeb
- metro tiles
- autorskie rozwiązania (browse)
Funkcjonalność
- slide menu
- obsługa bazy setek tys. kontaktów
- liczne kanały komunikacji w aplikacji
- telefon, sms, email
- pełna interakcja: wiadomości hotlist
- videozaproszenia
- push notifications jako
biznesowy feedback
Design na miarę potrzeb
- metro tiles
- autorskie rozwiązania (browse)
- web views
Komunikacja aplikacji
na przykładzie funkcji
Events
Komunikacja aplikacji
na przykładzie funkcji
Events
YouTube
Komunikacja aplikacji
na przykładzie funkcji
Events
European
users Server
YouTube
Komunikacja aplikacji
na przykładzie funkcji
Events
USA users
Server
European
users Server
YouTube
Komunikacja aplikacji
na przykładzie funkcji
Events
USA users
Server
European
users Server
YouTube
Komunikacja aplikacji
na przykładzie funkcji
Events Maps
USA users
Server
European
users Server
YouTube
Komunikacja aplikacji
na przykładzie funkcji
Events Maps
APNS
GCM
Skala ruchu
Skala ruchu
80.000+ aktywni userzy
Skala ruchu
130.000+ push notifications / mc
80.000+ aktywni userzy
Skala ruchu
130.000+ push notifications / mc
80.000+ aktywni userzy
400.000+ wiadomości hotlist / mc
Skala ruchu
130.000+ push notifications / mc
80.000+ aktywni userzy
25.000 + API hits / h
400.000+ wiadomości hotlist / mc
Skala ruchu
100.000+ downloads
130.000+ push notifications / mc
80.000+ aktywni userzy
25.000 + API hits / h
400.000+ wiadomości hotlist / mc
Skala ruchu
100.000+ downloads
130.000+ push notifications / mc
80.000+ aktywni userzy
25.000 + API hits / h
400.000+ wiadomości hotlist / mc
25.000+ nowych klientów
zapisanych przez aplikację
(prospecting)
90.000+
uruchomień dziennie
90.000+
uruchomień dziennie
0,002%
współczynnik crashy
90.000+
uruchomień dziennie
0,002%
współczynnik crashy
70%
crashe niewywołane
przez aplikację
90.000+
uruchomień dziennie
0,002%
współczynnik crashy
70%
crashe niewywołane
przez aplikację
Optymalizacja
developmentu i kodu
Nowe funkcje iOS
w aplikacji
Dlaczego iOS 6?
Dlaczego iOS 6?
Wsparcie od iPhone 3GS
Dlaczego iOS 6?
Wsparcie od iPhone 3GS
Nowe funkcje
Dlaczego iOS 6?
Wsparcie od iPhone 3GS
Szybka reakcja użytkowników
Nowe funkcje
Wykorzystane funkcje iOS 6
raywenderlich.com
Wykorzystane funkcje iOS 6
Autolayout
raywenderlich.com
Wykorzystane funkcje iOS 6
Autolayout
Mapkit
raywenderlich.com
Wykorzystane funkcje iOS 6
Autolayout
Mapkit
Social framework
raywenderlich.com
Storyboards
Storyboards
Szybkie tworzenie
widoków i nawigacji
Storyboards
Szybkie tworzenie
widoków i nawigacji
Łatwe łączenie
widoków z kodem
Storyboards
Szybkie tworzenie
widoków i nawigacji
Łatwe łączenie
widoków z kodem
Możliwość tłumaczeń
(lokalizacja)
Oszczędność kodu
Oszczędność kodu
Rozbudowane Storyboardy
Rozbudowane Storyboardy
43 różne ekrany
Rozbudowane Storyboardy
43 różne ekrany
Problem współdzielenia
Rozbudowane Storyboardy
43 różne ekrany
Problem współdzielenia
Podzielone na
11 storyboardów
Podział na Storyboardy
CGRectMake
Autolayout
Autolayout
Autolayout
Brak autosizing mask
Autolayout
Brak autosizing mask
Proste reguły
Autolayout
Brak autosizing mask
Proste reguły
Precyzyjne wartości marginesów,
wymiarów itp
Autolayout
Brak autosizing mask
Proste reguły
Precyzyjne wartości marginesów,
wymiarów itp
Dobre wsparcie IB
Biblioteki i narzędzia
Uniwersalna aplikacja
Uniwersalna aplikacja
Dobre rozdzielenie
w Xcode
Uniwersalna aplikacja
Dobre rozdzielenie
w Xcode
Wspólna część
komunikacji i danych
Uniwersalna aplikacja
Dobre rozdzielenie
w Xcode
Wspólna część
komunikacji i danych
Push notifications
Uniwersalna aplikacja
Dobre rozdzielenie
w Xcode
Wspólna część
komunikacji i danych
Wykorzystanie
niektórychVC
Push notifications
Android
Ewolucja mechanizmów
komunikacji
Od samodzielnego
tworzenia zapytań do
JsonCallbacks
Ręczne tworzenie zapytań
Ręczne tworzenie zapytań
Samodzielne budowanie zapytań
Ręczne tworzenie zapytań
Samodzielne budowanie zapytań
Parsowanie wyników prostym parserem
wbudowanym w Android
Ręczne tworzenie zapytań
Samodzielne budowanie zapytań
Parsowanie wyników prostym parserem
wbudowanym w Android
Podatność na błędy
Ręczne tworzenie zapytań
Samodzielne budowanie zapytań
Parsowanie wyników prostym parserem
wbudowanym w Android
Podatność na błędy
Niepotrzebny nakład pracy
Serializacja za pomocą
Gson
Serializacja za pomocą
Gson
Serializacja obiektów żądań
Serializacja za pomocą
Gson
Serializacja obiektów żądań
Deserializacja odpowiedzi
Serializacja za pomocą
Gson
Serializacja obiektów żądań
Deserializacja odpowiedzi
Tworzenie klas reprezentujących parametry
żądania
JsonCallbacks
JsonCallbacks
Komunikacja oparta na interfejsach i proxy
JsonCallbacks
Komunikacja oparta na interfejsach i proxy
Nacisk na podejście asynchroniczne
JsonCallbacks
Komunikacja oparta na interfejsach i proxy
Nacisk na podejście asynchroniczne
Przejrzystość kodu
JsonCallbacks
Komunikacja oparta na interfejsach i proxy
Nacisk na podejście asynchroniczne
Przejrzystość kodu
Łatwość wprowadzania zmian
JsonCallbacks
Komunikacja oparta na interfejsach i proxy
Nacisk na podejście asynchroniczne
Przejrzystość kodu
Łatwość wprowadzania zmian
Niska podatność na błędy
Przykład użycia
Implementacja wzorca obserwator
Implementacja wzorca obserwator
Wyświetlenie prostych danych bez pisania kodu
Implementacja wzorca obserwator
Wyświetlenie prostych danych bez pisania kodu
Wsparcie dla aplikacji opartych na fragmentach
Implementacja wzorca obserwator
Wyświetlenie prostych danych bez pisania kodu
Wsparcie dla aplikacji opartych na fragmentach
Łączenie zapytań
Łączenie zapytań
Automatyczne i manualne
Łączenie zapytań
Automatyczne i manualne
Czytelność kodu i zmniejszenie zużycia baterii
Łączenie zapytań
Automatyczne i manualne
Czytelność kodu i zmniejszenie zużycia baterii
Cachowanie wyników
Cachowanie wyników
Określenie maksymalnej wielkości
Cachowanie wyników
Określenie maksymalnej wielkości
Kontrola czasu życia obiektów
Cachowanie wyników
Określenie maksymalnej wielkości
Kontrola czasu życia obiektów
Więcej możliwości
- Obsługa Base64 przy przesyłaniu obiektów binarnych
- Protokół HTTP(S) lub SPDY
- Zapytania z parametrami nazwanymi i nienazwanymi
- Optymalizacja wywołań na podstawie zebranych statystyk
- Obsługa standardu JSON-RPC 1.1 i 2.0 oraz metody GET
- Automatyczne dołączanie klucza uwierzytelniającego
- Kompatybilność z systemem Android w wersji 2.x+
Open source
Biblioteka JsonCallbacks jest już dostępna pod adresem:
github.com/kubatatami/JsonCallbacks
Mniej znaczy więcej
czyli
AndroidAnnotations
view.findViewById(R.id.view_id)
view.setOnClickListener(new View.OnClickListener())
context.getSystemService(Context.NOTIFICATION_SERVIC
onSaveInstanceState(Bundle) / onRestoreInstanceState(Bundle)
listView.setOnItemSelectedListener(AdapterView.OnItemSelectedListener)
new Thread(Runnable()).start() / Handler.post(Runnable)
// Set layout.
setContentView(R.layout.three_camp);
// Fullscreen
feature.getWindow().setFlags(WindowManager.LayoutPara
ms.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
// NoTitle feature.
getWindow().requestFeature(Window.FEATURE_NO_TITLE);
// Set layout.
setContentView(R.layout.three_camp);
// Fullscreen
feature.getWindow().setFlags(WindowManager.LayoutPara
ms.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
// NoTitle feature.
getWindow().requestFeature(Window.FEATURE_NO_TITLE);
@HierarchyViewerSupport // AA 3.0
@Fullscreen
@NoTitle
@EActivity(R.layout.three_camp)
public class TCActivity extends FragmentActivity {
	 ...
}
// Dostęp do TextView.
TextView trzyCampTv = (TextView)
findViewById(R.id.tv_trzy_camp);
// Dostęp do TextView.
TextView trzyCampTv = (TextView)
findViewById(R.id.tv_trzy_camp);
@ViewById(R.id.tv_trzy_camp)
TextView trzyCampTv;
// Button onClick.
Button button = (Button)
findViewById(R.id.btn_trzy_camp);
button.setOnClickListener(new View.OnClickListener()
{
	 @Override
	 public void onClick(View view) {
	 	 // Handle on click.
	 }
});
// Button onClick.
Button button = (Button)
findViewById(R.id.btn_trzy_camp);
button.setOnClickListener(new View.OnClickListener()
{
	 @Override
	 public void onClick(View view) {
	 	 // Handle on click.
	 }
});
@Click(R.id.btn_trzy_camp)
protected void handleButtonClick(View clickedView) {
	 // Handle on click.
}
// OnTouch na image view.
ImageView imageView = (ImageView)
findViewById(R.id.imgv_trzy_camp);
imageView.setOnTouchListener(new
View.OnTouchListener() {
	 @Override
	 public boolean onTouch(View view, MotionEvent
motionEvent) {
	 	 // Handle on touch.
	 	 return false;
	 }
});
// OnTouch na image view.
ImageView imageView = (ImageView)
findViewById(R.id.imgv_trzy_camp);
imageView.setOnTouchListener(new
View.OnTouchListener() {
	 @Override
	 public boolean onTouch(View view, MotionEvent
motionEvent) {
	 	 // Handle on touch.
	 	 return false;
	 }
});
@Touch(R.id.imgv_trzy_camp)
protected boolean onViewTouch(MotionEvent motionEvent, View touchedView) {
	 // Handle on touch.
	 return true;
}
// Kliknięcie w item list view.
listView.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
	 @Override
	 public void onItemClick(AdapterView<?>
adapterView, View view, int i, long l) {
	 	 // Handle click.
	 }
});
// Kliknięcie w item list view.
listView.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
	 @Override
	 public void onItemClick(AdapterView<?>
adapterView, View view, int i, long l) {
	 	 // Handle click.
	 }
});
@ItemClick(R.id.lv_trzy_camp)
protected void handleListViewItemClick(int clickedPosition) {
	 // Handle click.
}
// Long click na itemie w list view.
listView.setOnItemLongClickListener(new
AdapterView.OnItemLongClickListener() {
@Override
	 public boolean onItemLongClick(AdapterView<?>
adapterView, View view, int i, long l) {
	 	 // Handle long click.
	 	 return false;
	 }
});
// Long click na itemie w list view.
listView.setOnItemLongClickListener(new
AdapterView.OnItemLongClickListener() {
@Override
	 public boolean onItemLongClick(AdapterView<?>
adapterView, View view, int i, long l) {
	 	 // Handle long click.
	 	 return false;
	 }
});
@ItemLongClick(R.id.lv_trzy_camp)
protected void handleListViewItemLongClick(int clickedPosition) {
	 // Handle long click.
}
/ Zaznaczenie itemu list view.
listView.setOnItemSelectedListener(new
AdapterView.OnItemSelectedListener() {
	 @Override
	 public void onItemSelected(AdapterView<?>
adapterView, View view, int i, long l) {
	 	 // Handle selected item.
	 }
	 @Override
	 public void onNothingSelected(AdapterView<?>
adapterView) {
	 	 // Other.
	 }
/ Zaznaczenie itemu list view.
listView.setOnItemSelectedListener(new
AdapterView.OnItemSelectedListener() {
	 @Override
	 public void onItemSelected(AdapterView<?>
adapterView, View view, int i, long l) {
	 	 // Handle selected item.
	 }
	 @Override
	 public void onNothingSelected(AdapterView<?>
adapterView) {
	 	 // Other.
	 }
@ItemSelect(R.id.lv_trzy_camp)
protected void handleListViewItemSelect(boolean isSelect, int
selectedPosition) {
	 // Handle selected item.
}
// Dostęp do obiektu application.
MyApplication applicationApp = (MyApplication)
getApplication();
// Dostęp do obiektu application.
MyApplication applicationApp = (MyApplication)
getApplication();
@App
MyApplication applicationApp;
runOnUiThread(new Runnable() {
	 @Override
	 public void run() {
	 	 // Kod do UI.
	 }
});
runOnUiThread(new Runnable() {
	 @Override
	 public void run() {
	 	 // Kod do UI.
	 }
});
@UiThread
protected void stuffInUiThread() {
	 // Kod do UI.
}
Bundle bundle = new Bundle();
bundle.putString("myString_key", "myString_value");
...
TrzyCampFragment fragment = new TrzyCampFragment();
fragment.setArguments(bundle);
Bundle bundle = new Bundle();
bundle.putString("myString_key", "myString_value");
...
TrzyCampFragment fragment = new TrzyCampFragment();
fragment.setArguments(bundle);
TrzyCampFragment_.builder().myString("myString_value").build();
@FragmentArg
String myString;
@Override
public void onSaveInstanceState(Bundle
savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putBoolean("MyBoolean",
myBoolean);
...
}
@Override
public void onRestoreInstanceState(Bundle
savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
myBoolean =
savedInstanceState.getBoolean("MyBoolean");
...
@Override
public void onSaveInstanceState(Bundle
savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putBoolean("MyBoolean",
myBoolean);
...
}
@Override
public void onRestoreInstanceState(Bundle
savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
myBoolean =
savedInstanceState.getBoolean("MyBoolean");
...
@InstanceState
boolean myBoolean;
http://www.coolfbcovers.net
http://androidannotations.org/
DZIĘKUJEMY
ZA UWAGĘ!

Weitere ähnliche Inhalte

Andere mochten auch

15K fanów w 6 tygodni
15K fanów w 6 tygodni15K fanów w 6 tygodni
15K fanów w 6 tygodni
3camp
 
Optymalizacja SEO on-page
Optymalizacja SEO on-pageOptymalizacja SEO on-page
Optymalizacja SEO on-page
3camp
 

Andere mochten auch (15)

Czy w dużym projekcie można być Agile? – business case SKOK Ubezpieczenia
Czy w dużym projekcie można być Agile? – business case SKOK UbezpieczeniaCzy w dużym projekcie można być Agile? – business case SKOK Ubezpieczenia
Czy w dużym projekcie można być Agile? – business case SKOK Ubezpieczenia
 
Tadamm po babsku czyli historia pozytywnego zaskoczenia
Tadamm po babsku czyli historia pozytywnego zaskoczeniaTadamm po babsku czyli historia pozytywnego zaskoczenia
Tadamm po babsku czyli historia pozytywnego zaskoczenia
 
Single Page Applications przy wykorzystaniu REST
Single Page Applications przy wykorzystaniu RESTSingle Page Applications przy wykorzystaniu REST
Single Page Applications przy wykorzystaniu REST
 
Marzenia Marketerów o skutecznej geolokalizacji właśnie się spełniają. Mobiln...
Marzenia Marketerów o skutecznej geolokalizacji właśnie się spełniają. Mobiln...Marzenia Marketerów o skutecznej geolokalizacji właśnie się spełniają. Mobiln...
Marzenia Marketerów o skutecznej geolokalizacji właśnie się spełniają. Mobiln...
 
Jak to dobrze robić? E-mail marketing i marketing automation krok po kroku – ...
Jak to dobrze robić? E-mail marketing i marketing automation krok po kroku – ...Jak to dobrze robić? E-mail marketing i marketing automation krok po kroku – ...
Jak to dobrze robić? E-mail marketing i marketing automation krok po kroku – ...
 
Prezentacja firmy IHS Global
Prezentacja firmy IHS GlobalPrezentacja firmy IHS Global
Prezentacja firmy IHS Global
 
Projektowanie serwisow wideo
Projektowanie serwisow wideoProjektowanie serwisow wideo
Projektowanie serwisow wideo
 
Search & User Optymalization (SUO) na przykładzie serwisu Motofakty.pl;
Search & User Optymalization (SUO) na przykładzie serwisu Motofakty.pl; Search & User Optymalization (SUO) na przykładzie serwisu Motofakty.pl;
Search & User Optymalization (SUO) na przykładzie serwisu Motofakty.pl;
 
Gluster FS
Gluster FSGluster FS
Gluster FS
 
Hity i Kity Email Marketingu w pigulce
Hity i Kity Email Marketingu w pigulceHity i Kity Email Marketingu w pigulce
Hity i Kity Email Marketingu w pigulce
 
15K fanów w 6 tygodni
15K fanów w 6 tygodni15K fanów w 6 tygodni
15K fanów w 6 tygodni
 
Sklepy z aplikacjami mobilnymi
Sklepy z aplikacjami mobilnymiSklepy z aplikacjami mobilnymi
Sklepy z aplikacjami mobilnymi
 
Optymalizacja SEO on-page
Optymalizacja SEO on-pageOptymalizacja SEO on-page
Optymalizacja SEO on-page
 
Czy klient musi wiedzieć, czego chce - o zbieraniu wymagań-v.1.1
Czy klient musi wiedzieć, czego chce - o zbieraniu wymagań-v.1.1Czy klient musi wiedzieć, czego chce - o zbieraniu wymagań-v.1.1
Czy klient musi wiedzieć, czego chce - o zbieraniu wymagań-v.1.1
 
Wprowadzenie do BDD czyli co jest zlego w starym dobrym TDD
Wprowadzenie do BDD czyli co jest zlego w starym dobrym TDDWprowadzenie do BDD czyli co jest zlego w starym dobrym TDD
Wprowadzenie do BDD czyli co jest zlego w starym dobrym TDD
 

Ähnlich wie Zaawansowany marketing w aplikacjach mobilnych na przykładzie Vemma Office 3.0

Seminarium - Tworzenie Aplikacji Mobilnych 2004
Seminarium - Tworzenie Aplikacji Mobilnych 2004Seminarium - Tworzenie Aplikacji Mobilnych 2004
Seminarium - Tworzenie Aplikacji Mobilnych 2004
Tomasz Cieplak
 
PLNOG 5: Janusz Dziemidowicz - OpenSocial w nk.pl
PLNOG 5: Janusz Dziemidowicz - OpenSocial w nk.pl PLNOG 5: Janusz Dziemidowicz - OpenSocial w nk.pl
PLNOG 5: Janusz Dziemidowicz - OpenSocial w nk.pl
PROIDEA
 
Ewolucja serwisu mobilnego - case study mobi.kolporter.pl - Robert Sołkiewicz...
Ewolucja serwisu mobilnego - case study mobi.kolporter.pl - Robert Sołkiewicz...Ewolucja serwisu mobilnego - case study mobi.kolporter.pl - Robert Sołkiewicz...
Ewolucja serwisu mobilnego - case study mobi.kolporter.pl - Robert Sołkiewicz...
Biznes 2.0
 
infoShare 2011 - Łukasz Korzeniowski - Różnorodność mobilnych systemów operac...
infoShare 2011 - Łukasz Korzeniowski - Różnorodność mobilnych systemów operac...infoShare 2011 - Łukasz Korzeniowski - Różnorodność mobilnych systemów operac...
infoShare 2011 - Łukasz Korzeniowski - Różnorodność mobilnych systemów operac...
Infoshare
 
TARGI MOBILNE, DZIEN I, SALA B, Budowanie zaangażowania użytkownika w oparciu...
TARGI MOBILNE, DZIEN I, SALA B, Budowanie zaangażowania użytkownika w oparciu...TARGI MOBILNE, DZIEN I, SALA B, Budowanie zaangażowania użytkownika w oparciu...
TARGI MOBILNE, DZIEN I, SALA B, Budowanie zaangażowania użytkownika w oparciu...
ecommerce poland expo
 
infoShare 2011 - Joanna Chwastowska - Google TV rewolucja w salonie
infoShare 2011 - Joanna Chwastowska - Google TV rewolucja w salonieinfoShare 2011 - Joanna Chwastowska - Google TV rewolucja w salonie
infoShare 2011 - Joanna Chwastowska - Google TV rewolucja w salonie
Infoshare
 
Gemini Cloud - Salesforce.com
Gemini Cloud - Salesforce.comGemini Cloud - Salesforce.com
Gemini Cloud - Salesforce.com
Maciej Morawski
 

Ähnlich wie Zaawansowany marketing w aplikacjach mobilnych na przykładzie Vemma Office 3.0 (20)

Seminarium - Tworzenie Aplikacji Mobilnych 2004
Seminarium - Tworzenie Aplikacji Mobilnych 2004Seminarium - Tworzenie Aplikacji Mobilnych 2004
Seminarium - Tworzenie Aplikacji Mobilnych 2004
 
Fuckup Case study: Wdrożenie mikroserwisów dla nowej funkcjonalności w istnie...
Fuckup Case study: Wdrożenie mikroserwisów dla nowej funkcjonalności w istnie...Fuckup Case study: Wdrożenie mikroserwisów dla nowej funkcjonalności w istnie...
Fuckup Case study: Wdrożenie mikroserwisów dla nowej funkcjonalności w istnie...
 
XVI Targi eHandlu - Global4Net - Andrzej Szylar " Jak Progressive Web App zmi...
XVI Targi eHandlu - Global4Net - Andrzej Szylar " Jak Progressive Web App zmi...XVI Targi eHandlu - Global4Net - Andrzej Szylar " Jak Progressive Web App zmi...
XVI Targi eHandlu - Global4Net - Andrzej Szylar " Jak Progressive Web App zmi...
 
Prezentacja IDG Polska
Prezentacja IDG PolskaPrezentacja IDG Polska
Prezentacja IDG Polska
 
PLNOG 5: Janusz Dziemidowicz - OpenSocial w nk.pl
PLNOG 5: Janusz Dziemidowicz - OpenSocial w nk.pl PLNOG 5: Janusz Dziemidowicz - OpenSocial w nk.pl
PLNOG 5: Janusz Dziemidowicz - OpenSocial w nk.pl
 
Współdzielenie kodu aplikacji Windows Phone i Windows 8
Współdzielenie kodu aplikacji Windows Phone i Windows 8Współdzielenie kodu aplikacji Windows Phone i Windows 8
Współdzielenie kodu aplikacji Windows Phone i Windows 8
 
RIA - przyszłość aplikacji internetowych
RIA - przyszłość aplikacji internetowychRIA - przyszłość aplikacji internetowych
RIA - przyszłość aplikacji internetowych
 
Ewolucja serwisu mobilnego - case study mobi.kolporter.pl - Robert Sołkiewicz...
Ewolucja serwisu mobilnego - case study mobi.kolporter.pl - Robert Sołkiewicz...Ewolucja serwisu mobilnego - case study mobi.kolporter.pl - Robert Sołkiewicz...
Ewolucja serwisu mobilnego - case study mobi.kolporter.pl - Robert Sołkiewicz...
 
PLNOG 7: Maciej Stawiarski - VoIP otwiera nowe możliwości komunikacji
PLNOG 7: Maciej Stawiarski - VoIP otwiera nowe możliwości komunikacjiPLNOG 7: Maciej Stawiarski - VoIP otwiera nowe możliwości komunikacji
PLNOG 7: Maciej Stawiarski - VoIP otwiera nowe możliwości komunikacji
 
Nowe kanały w eCommerce
Nowe kanały w eCommerceNowe kanały w eCommerce
Nowe kanały w eCommerce
 
iBabel
iBabeliBabel
iBabel
 
JS in the intelligent buildings @ meet.js Krk
JS in the intelligent buildings @ meet.js KrkJS in the intelligent buildings @ meet.js Krk
JS in the intelligent buildings @ meet.js Krk
 
infoShare 2011 - Łukasz Korzeniowski - Różnorodność mobilnych systemów operac...
infoShare 2011 - Łukasz Korzeniowski - Różnorodność mobilnych systemów operac...infoShare 2011 - Łukasz Korzeniowski - Różnorodność mobilnych systemów operac...
infoShare 2011 - Łukasz Korzeniowski - Różnorodność mobilnych systemów operac...
 
TARGI MOBILNE, DZIEN I, SALA B, Budowanie zaangażowania użytkownika w oparciu...
TARGI MOBILNE, DZIEN I, SALA B, Budowanie zaangażowania użytkownika w oparciu...TARGI MOBILNE, DZIEN I, SALA B, Budowanie zaangażowania użytkownika w oparciu...
TARGI MOBILNE, DZIEN I, SALA B, Budowanie zaangażowania użytkownika w oparciu...
 
infoShare 2011 - Joanna Chwastowska - Google TV rewolucja w salonie
infoShare 2011 - Joanna Chwastowska - Google TV rewolucja w salonieinfoShare 2011 - Joanna Chwastowska - Google TV rewolucja w salonie
infoShare 2011 - Joanna Chwastowska - Google TV rewolucja w salonie
 
Projektowanie i programowanie aplikacji nowej generacji
Projektowanie i programowanie aplikacji nowej generacjiProjektowanie i programowanie aplikacji nowej generacji
Projektowanie i programowanie aplikacji nowej generacji
 
GG.pl prezentacja nowego serwisu
GG.pl prezentacja nowego serwisuGG.pl prezentacja nowego serwisu
GG.pl prezentacja nowego serwisu
 
Prawdziwi znajomi - prawdziwe rozmowy
Prawdziwi znajomi - prawdziwe rozmowyPrawdziwi znajomi - prawdziwe rozmowy
Prawdziwi znajomi - prawdziwe rozmowy
 
Gemini Cloud - Salesforce.com
Gemini Cloud - Salesforce.comGemini Cloud - Salesforce.com
Gemini Cloud - Salesforce.com
 
Html5 i css3
Html5 i css3Html5 i css3
Html5 i css3
 

Mehr von 3camp

Marcin Szeląg, InnovationNest, Startup Risk Model
Marcin Szeląg, InnovationNest, Startup Risk ModelMarcin Szeląg, InnovationNest, Startup Risk Model
Marcin Szeląg, InnovationNest, Startup Risk Model
3camp
 

Mehr von 3camp (20)

Ochrona podatnych webaplikacji za pomocą wirtualnych poprawek
Ochrona podatnych webaplikacji za pomocą wirtualnych poprawekOchrona podatnych webaplikacji za pomocą wirtualnych poprawek
Ochrona podatnych webaplikacji za pomocą wirtualnych poprawek
 
HTTPS bez wymówek
HTTPS bez wymówekHTTPS bez wymówek
HTTPS bez wymówek
 
Jak udokumentować bazę danych
Jak udokumentować bazę danychJak udokumentować bazę danych
Jak udokumentować bazę danych
 
ORM - tuningujemy podejście do mapowania
ORM - tuningujemy podejście do mapowaniaORM - tuningujemy podejście do mapowania
ORM - tuningujemy podejście do mapowania
 
No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.
No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.
No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.
 
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
 
Wykorzystanie języka Kotlin do aplikacji na platformie Android
Wykorzystanie języka Kotlin do aplikacji na platformie AndroidWykorzystanie języka Kotlin do aplikacji na platformie Android
Wykorzystanie języka Kotlin do aplikacji na platformie Android
 
Learn you some rx for the greater good
Learn you some rx for the greater goodLearn you some rx for the greater good
Learn you some rx for the greater good
 
Google App Engine i Google Play Services w Twoich aplikacjach
Google App Engine i Google Play Services w Twoich aplikacjachGoogle App Engine i Google Play Services w Twoich aplikacjach
Google App Engine i Google Play Services w Twoich aplikacjach
 
Reakcja łańcuchowa, czyli React.js w praktyce
Reakcja łańcuchowa, czyli React.js w praktyceReakcja łańcuchowa, czyli React.js w praktyce
Reakcja łańcuchowa, czyli React.js w praktyce
 
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
 
AngularJS (nie) nadaje się do dużego projektu
AngularJS (nie) nadaje się do dużego projektuAngularJS (nie) nadaje się do dużego projektu
AngularJS (nie) nadaje się do dużego projektu
 
Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...
Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...
Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...
 
Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?
Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?
Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?
 
Artur Senk, OKE Poland, Big Data na zakupach
Artur Senk, OKE Poland, Big Data na zakupachArtur Senk, OKE Poland, Big Data na zakupach
Artur Senk, OKE Poland, Big Data na zakupach
 
Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...
Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...
Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...
 
Marcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnie
Marcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnieMarcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnie
Marcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnie
 
Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...
Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...
Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...
 
Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...
Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...
Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...
 
Marcin Szeląg, InnovationNest, Startup Risk Model
Marcin Szeląg, InnovationNest, Startup Risk ModelMarcin Szeląg, InnovationNest, Startup Risk Model
Marcin Szeląg, InnovationNest, Startup Risk Model
 

Zaawansowany marketing w aplikacjach mobilnych na przykładzie Vemma Office 3.0