ΔΘΝΙΚΟ ΜΔΣΟΒΙΟ ΠΟΛΤΣΔΥΝΔΙΟ

Σχετικά έγγραφα
ΔΘΝΙΚΟ ΜΔΣΟΒΙΟ ΠΟΛΤΣΔΥΝΔΙΟ

ΗΛΕΚΣΡΟΝΙΚΗ ΤΠΗΡΕΙΑ ΑΠΟΚΣΗΗ ΑΚΑΔΗΜΑΪΚΗ ΣΑΤΣΟΣΗΣΑ

ΕΝΟΤΗΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 5: Γνωριμία με το λογιςμικό του υπολογιςτι

Πωσ δθμιουργώ φακζλουσ;

Κάνουμε κλικ ςτθν επιλογι του οριηόντιου μενοφ «Get Skype»για να κατεβάςουμε ςτον υπολογιςτι μασ το πρόγραμμα του Skype.

Περιεχόμενα. χολι Χοροφ Αντιγόνθ Βοφτου - Πολιτικι Διαχείριςθσ Cookie 1

Ηλεκτρονικι Επιχειρθςιακι Δράςθ Εργαςτιριο 1

Σφντομεσ Οδθγίεσ Χριςθσ

Virtualization. Στο ςυγκεκριμζνο οδηγό, θα παρουςιαςτεί η ικανότητα δοκιμήσ τησ διανομήσ Ubuntu 9.04, χωρίσ την ανάγκη του format.

ΛΕΙΤΟΥΓΙΚΆ ΣΥΣΤΉΜΑΤΑ. 5 ο Εργαςτιριο Ειςαγωγι ςτθ Γραμμι Εντολϊν

Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Εθνικό Τυπογραφείο)

Joomla! - User Guide

Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Εθνικό Τυπογραφείο)

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 2 ο Εργαςτιριο Διαχείριςθ Διεργαςιϊν

ΟΔΗΓΙΕ ΔΗΜΙΟΤΡΓΙΑ ΚΑΙ ΡΤΘΜΙΗ ΔΩΡΕΑΝ ΗΛΕΚΣΡΟΝΙΚΟΤ ΣΑΧΤΔΡΟΜΕΙΟΤ ΣΟ GOOGLE (G-MAIL)

assessment.gr USER S MANUAL (users)

Εγχειρίδιο Χρήςησ Support

Epsilon Cloud Services

ΟΔΗΓΙΕ ΓΙΑ ΣΗΝ ΕΙΑΓΩΓΗ ΕΚΔΡΟΜΩΝ & ΝΕΩΝ - ΑΝΑΚΟΙΝΩΕΩΝ ΣΗΝ ΙΣΟΕΛΙΔΑ ΣΗ Δ.Δ.Ε. ΘΕΠΡΩΣΙΑ

ΕΝΟΣΗΣΑ 1: ΓΝΩΡIΖΩ ΣΟΝ ΤΠΟΛΟΓΙΣΗ. ΚΕΦΑΛΑΙΟ 2: Σο Τλικό του Τπολογιςτι

ΕΝΟΤΗΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 6: Το γραφικό περιβάλλον Επικοινωνίασ (Γ.Π.Ε)

Internet a jeho role v našem životě Το Διαδίκτυο και ο ρόλοσ του ςτθ ηωι μασ

SingularLogic Application. Παραμετροποίηση Galaxy Application Server

Εγχειρίδιο Χριςθσ τθσ διαδικτυακισ εφαρμογισ «Υποβολι και παρακολοφκθςθ τθσ ζγκριςθσ Εκπαιδευτικών Πακζτων»

ΔΙΑΔΙΚΑΙΑ ΚΑΙ ΡΤΘΜΙΕΙ ΓΙΑ ΤΝΔΕΗ ΣΟ INTRANET ΣΟΤ ΕΚΕΣΑ-ΙΣΧΗΔ

ΕΦΑΡΜΟΓΕ ΒΑΕΩΝ ΔΕΔΟΜΕΝΩΝ ΣΗ ΝΟΗΛΕΤΣΙΚΗ. Φιλιοποφλου Ειρινθ

Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Περιφέρειες)

ΕΦΑΡΜΟΓΖσ ΒΆΕΩΝ ΔΕΔΟΜΖΝΩΝ ΚΑΙ ΔΙΑΔΙΚΣΥΟΤ. Ειρινθ Φιλιοποφλου

Σφςτημα Κεντρικήσ Υποςτήριξησ τησ Πρακτικήσ Άςκηςησ Φοιτητών ΑΕΙ

Οδηγίες Πρόζβαζης ζηο EndNote Web. Πρόζβαζη ζηο EndNote Web

Οδηγός χρήσης Blackboard Learning System για φοιτητές

Διαδικασία Δημιοσργίας Ειδικών Λογαριασμών. (v.1.0.7)

Διαδικαςία Διαχείριςθσ Στθλϊν Βιβλίου Εςόδων - Εξόδων. (v.1.0.7)

Λειτουργικά υςτιματα Windows XP

1. Κατέβαςμα του VirtueMart

Διαδικαζία Διατείριζης Εκηύπωζης Ιζοζσγίοσ Γενικού - Αναλσηικών Καθολικών. (v )

Πρόςβαςη και δήλωςη μαθημάτων ςτον Εφδοξο

Οδηγίεσ για τη ςφνδεςη του υπολογιςτή ςασ ςτουσ προβολείσ των αιθουςών Ι 1, Ι 2, Ι 3 και του 10 ου ορόφου

Διαχείριςθ του φακζλου "public_html" ςτο ΠΣΔ

Δείκτεσ Διαχείριςθ Μνιμθσ. Βαγγζλθσ Οικονόμου Διάλεξθ 8

Οδηγίες αναβάθμισης χαρτών

ΑΛΕΞΑΝΔΡΕΙΟ ΣΕΙ ΘΕΑΛΟΝΙΚΗ ΣΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗ Σ.Ε. ΜΑΘΗΜΑ : ΑΛΓΟΡΙΘΜΙΚΗ ΚΑΙ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΔΙΔΑΚΩΝ : ΓΟΤΛΙΑΝΑ ΚΩΣΑ

ΕΝΟΤΗΤΑ 2: ΕΠΙΚΟΙΝΩΝΩ ΜΕ ΤΟΝ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 5: Αρχεία - Φάκελοι

Εγκατάσταση & Διαχείριση Joomla στο Π.Σ.Δ. ΣΥΜΒΟΥΛΟ ΡΛΗΟΦΟΙΚΗΣ Ν. ΣΕΩΝ & ΚΕ.ΡΛΗ.ΝΕ.Τ. Ν. ΣΕΩΝ

Διαδικαςία Προγράμματοσ Ωρομζτρθςθσ. (v.1.0.7)

ΟΔΗΓΙΕ ΓΙΑ ΣΗ ΔΗΜΙΟΤΡΓΙΑ ΚΑΙ ΣΗΝ ΤΠΟΒΟΛΗ ΑΙΣΗΗ ΓΙΑ «ΚΟΤΠΟΝΙ ΚΑΙΝΟΣΟΜΙΑ»

Εγχειρίδιο Χριςθσ: Εφαρμογι Αιτιςεων για τα Εκπαιδευτικά Προγράμματα του Προςωπικοφ των Επιχειριςεων Τροφίμων

τατιςτικά ςτοιχεία ιςτότοπου Κ.Ε.Π.Α. Α.Ν.Ε.Μ, για τθν περίοδο 1/1/ /12/2014

Σμιμα Marketing & Sales

1. Εγκατάςταςη κειμενογράφου JCE

Megatron ERP Βάςη δεδομζνων Π/Φ - κατηγοριοποίηςη Databox

Εφδοξοσ+ Συνδεκείτε ςτθν Εφαρμογι Φοιτθτϊν και μεταβείτε ςτθ ςελίδα «Ανταλλαγι Βιβλίων (Εφδοξοσ+)».

Οδηγόσ εγκατάςταςησ και ενεργοποίηςησ

ΕΝΟΤΘΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΘ. ΚΕΦΑΛΑΙΟ 8: Πειρατεία Λογιςμικοφ

Modellus 4.01 Συ ντομοσ Οδηγο σ

Διαχείριςη Αριθμοδεικτών (v.1.0.7)

Οδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο του Άβακα

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 7 θ Διάλεξθ Διαχείριςθ Μνιμθσ Μζροσ Γ

Σμιμα Marketing & Sales

Αυτόματη δημιουργία στηλών Αντιστοίχηση νέων λογαριασμών ΦΠΑ

Εισαγωγικές έννοιες. Αντώνησ Κ Μαώργιώτησ

1 Εγκατϊςταςη λογαριαςμού

TIM Εικονικό Περιβάλλον Συνεργασίας Οδθγίεσ Χριςθσ

Seventron Limited. Οδηγίες χρήσης EnglishOnlineTests.com

1. ΕΝΗΜΕΡΩΗ My Cosmos

Ηλεκτρονικι Υπθρεςία Ολοκλθρωμζνθσ Διαχείριςθσ Συγγραμμάτων και Λοιπϊν Βοθκθμάτων

Extra Λογιςτική Διαχείριςη & Extra Μιςθοδοςία

ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΗ ΗΛΕΚΣΡΟΝΙΚΟΤ ΤΣΗΜΑΣΟ ΑΡΧΑΙΡΕΙΩΝ

Ειδικά Θζματα Βάςεων Δεδομζνων

Οδηγίεσ ρφθμιςησ Cisco ATA186. Υπηρεςία Επικοινωνίασ & υνεργαςίασ

Διδάςκων: Κωνςταντίνοσ τεφανίδθσ

Εγχειρίδιο Χρήςησ Αυτοματοποίηςησ Κυκλώματοσ Πληρωμών ΟΛΠ μζςω e-banking VERSION <Final>

5 ΜΕΘΟΔΟΙ - ΠΑΡΑΜΕΤΡΟΙ

Οδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο τησ Αριθμογραμμήσ

ΕΝΟΣΗΣΑ 1: ΓΝΩΡIΖΩ ΣΟΝ ΤΠΟΛΟΓΙΣΗ Ω ΕΝΙΑΙΟ ΤΣΗΜΑ. ΚΕΦΑΛΑΙΟ 2: Σο Εςωτερικό του Τπολογιςτι

ΕΓΦΕΙΡΙΔΙΟ ΑΝΑΛΤΣΙΚΩΝ ΟΔΗΓΙΩΝ ΓΙΑ ΣΗΝ ΗΛΕΚΣΡΟΝΙΚΗ ΑΙΣΗΗ ΤΝΣΑΞΙΟΔΟΣΗΗ ΣΟΤ ΕΥΚΑ

ΕΝΟΣΗΣΑ 1: ΓΝΩΡIΖΩ ΣΟΝ ΤΠΟΛΟΓΙΣΗ. ΚΕΦΑΛΑΙΟ 3: Εργονομία

Εγκατάσταση & Διαχείριση Joomla ΤΜΒΟΤΛΟ ΠΛΗΡΟΦΟΡΙΚΗ Ν. ΕΡΡΩΝ & ΚΕ.ΠΛΗ.ΝΕ.Σ. Ν. ΕΡΡΩΝ

ΟΔΗΓΙΕΣ ΔΗΜΙΟΥΡΓΙΑΣ ΚΑΙ ΡΥΘΜΙΣΗΣ ΔΩΡΕΑΝ ΗΛΕΚΤΡΟΝΙΚΟΥ ΤΑΧΥΔΡΟΜΕΙΟΥ ΣΤΟ YAHOO

Οδθγόσ εγκατάςταςθσ προγραμμάτων για ανάπτυξθ εφαρμογών ςε iphone

Ζρευνα ικανοποίθςθσ τουριςτϊν

Ιδιότθτεσ πεδίων Γενικζσ.

Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Επιμελητήρια)

Ζτοιμα πακζτα λογιςμικοφ για μθ ςτατικοφσ ιςτότοπουσ

ΠΑΝΕΠΙΣΤΗΜΙΟΥ ΠΕΛΟΠΟΝΝΗΣΟΥ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ

Σύντομος Οδηγός Χρήσης της web εφαρμογής ΠΥΑΝΕΑ. 1 ο Βή μα

ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΗ. του ΙΑΣΡΟΦΑΡΜΑΚΕΤΣΙΚΟΤ ΦΑΚΕΛΟΤ ΑΘΕΝΩΝ Για τον ΟΙΚΟ ΝΑΤΣΟΤ ΕΡΓΑΣΗΡΙΑΚΟΙ ΓΙΑΣΡΟΙ. iknowhow Πληροφορική A.E

ΠΑΝΕΠΙΣΤΗΜΙΟΥ ΠΕΛΟΠΟΝΝΗΣΟΥ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ

Οδθγόσ για τθν αξιοποίθςθ τθσ διαςφνδεςθσ του myschool με το Εκνικό Δθμοτολόγιο

ΕΝΟΤΗΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΡΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 7: Ρροςταςία Λογιςμικοφ - Ιοί

Μάθημα 9 ο ΤΕΧΝΙΚΕΣ ΔΙΑΧΕΙΡΙΣΗΣ ΕΙΚΟΝΙΚΗΣ ΜΝΗΜΗΣ

Εισαγωγή Νέου Παγίου

ελ. 11/235, Περιεχόμενα Φακζλου "Σεχνικι Προςφορά"

Οδθγίεσ Ρρόςβαςθσ Στισ Εφαρμογζσ EMCS και AIS Και τθν Διαχείριςθ Ηλεκτρονικϊν Εξουςιοδοτιςεων

Οδηγίεσ για την πρόςβαςη των δικαιοφχων ςτο ΟΠΣΑΑ

ΕΝΟΤΗΤΑ 3: Χριςθ εργαλείων ζκφραςθσ, επικοινωνίασ, ανακάλυψθσ και δθμιουργίασ. ΚΕΦΑΛΑΙΟ 7: Υπθρεςίεσ Αναηιτθςθσ ςτον Παγκόςμιο Ιςτό

φντομη Παρουςίαςη epr.gr

Σ ΤΑΤ Ι Σ Τ Ι Κ Η. Statisticum collegium V

Διαχείριςη Εκπαιδευτικού Υλικού (ΠΑΚΕ) Πληροφοριακό Σύςτημα (MIS)

Οντοκεντρικόσ Προγραμματιςμόσ

Transcript:

ΔΘΝΙΚΟ ΜΔΣΟΒΙΟ ΠΟΛΤΣΔΥΝΔΙΟ ΥΟΛΗ ΗΛΔΚΣΡΟΛΟΓΩΝ ΜΗΥΑΝΙΚΩΝ ΚΑΙ ΜΗΥΑΝΙΚΩΝ ΤΠΟΛΟΓΙΣΩΝ ΣΟΜΔΑ ΔΠΙΚΟΙΝΩΝΙΩΝ,ΗΛΔΚΣΡΟΝΙΚΗ ΚΑΙ ΤΣΗΜΑΣΩΝ ΠΛΗΡΟΦΟΡΙΚΗ Ανάπηςξη εθαπμογήρ κοινυνικών δικηύυν ζε Android ΓΙΠΛΩΜΑΣΙΚΗ ΔΡΓΑΙΑ ηεο Άνναρ Ξενάκη Επιβλέπυν: Θενδώξα Βαξβαξίγνπ Καζεγήηξηα Δ.Μ.Π Αζήλα, Μάηνο 2013

2

ΔΘΝΙΚΟ ΜΔΣΟΒΙΟ ΠΟΛΤΣΔΥΝΔΙΟ ΥΟΛΗ ΗΛΔΚΣΡΟΛΟΓΩΝ ΜΗΥΑΝΙΚΩΝ ΚΑΙ ΜΗΥΑΝΙΚΩΝ ΤΠΟΛΟΓΙΣΩΝ ΣΟΜΔΑ ΣΔΥΝΟΛΟΓΙΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΤΠΟΛΟΓΙΣΩΝ Ανάπηςξη εθαπμογήρ κοινυνικών δικηύυν ζε Android ΓΙΠΛΩΜΑΣΙΚΗ ΔΡΓΑΙΑ ηεο ΑΝΝΑΣ ΞΕΝΑΚΗ Επιβλέπυν: Θενδώξα Βαξβαξίγνπ Καζεγήηξηα Δ.Μ.Π Δγθξίζεθε από ηελ ηξηκειή εμεηαζηηθή επηηξνπή ηελ 18 ε Φεβξνπαξίνπ 1999 (Τπνγξαθή) (Τπνγξαθή) (Τπνγξαθή)......... ΘενδώξαΒαξβαξίγνπ Διεπζέξηνο Καγηάθαο Βαζίιεηνο Λνύκνο Καζεγήηξηα Δ.Μ.Π. Καζεγεηήο Δ.Μ.Π. Καζεγεηήο Δ.Μ.Π. Αζήλα, Μάηνο 2013 3

(Τπνγξαθή)... Ξελάθε Άλλα Γηπισκαηνύρνο Ηιεθηξνιόγνο Μεραληθόο θαη Μεραληθόο Τπνινγηζηώλ Δ.Μ.Π. Copyright Άλλα Ξελάθε Με επηθύιαμε παληόο δηθαηώκαηνο. All rights reserved. Απαγνξεύεηαη ε αληηγξαθή, απνζήθεπζε θαη δηαλνκή ηεο παξνύζαο εξγαζίαο, εμ νινθιήξνπ ή ηκήκαηνο απηήο, γηα εκπνξηθό ζθνπό. Δπηηξέπεηαη ε αλαηύπσζε, απνζήθεπζε θαη δηαλνκή γηα ζθνπό κε θεξδνζθνπηθό, εθπαίδεπηηθήο ή εξεπλεηηθήο θύζεο, ππό ηελ πξνππόζεζε λα αλαθέξεηαη ε πεγή πξνέιεπζεο θαη λα δηαηεξείηαη ην παξόλ κήλπκα. Δξσηήκαηα πνπ αθνξνύλ ηε ρξήζε ηεο εξγαζίαο γηα θεξδνζθνπηθό ζθνπό πξέπεη λα απεπζύλνληαη πξνο ηνλ ζπγγξαθέα. Οη απόςεηο θαη ηα ζπκπεξάζκαηα πνπ πεξηέρνληαη ζε απηό ην έγγξαθν εθθξάδνπλ ηνλ ζπγγξαθέα θαη δελ πξέπεη λα εξκελεπζεί όηη αληηπξνζσπεύνπλ ηηο επίζεκεο ζέζεηο ηνπ Δζληθνύ Μεηζόβηνπ Πνιπηερλείνπ. 4

Πεπίλητη Ο ζθνπόο ηεο δηπισκαηηθήο εξγαζίαο ήηαλ ε δεκηνπξγία κίαο εθαξκνγήο πνπ ζα αλαζύξεη δεδνκέλα από ην δίθηπν θνηλσληθήο δηθηύσζεο LinkedIn θαη ζηε ζπλέρεηα ζα ηα παξνπζηάδεη. Η πινπνίεζε ηεο εθαξκνγήο έγηλε πάλσ ζην ζύζηεκα Android. Σν Android είλαη έλα Λεηηνπξγηθό ύζηεκα γηα θηλεηά ηειέθσλα ην νπνίν καο επηηξέπεη λα δεκηνπξγνύκε εθαξκνγέο γη απηά. Ο ζρεδηαζκόο ηεο εθαξκνγήο έγηλε ζηε πιαηθόξκα eclipse κε ηε βνήζεηα εηδηθώλ εξγαιείσλ ζρεδηαζκνύ γηα android. Πην ζπγθεθξηκέλα ε εθαξκνγή, κε ηελ άδεηα ηνπ ρξήζηε, δεηά δεδνκέλα ηνπ βαζηθνύ πξνθίι ηνπ ρξήζηε, ηηο επαθέο ηνπ θαη όζα δεδνκέλα πάλσ ζε απηέο παξέρεη ην LinkedIn. ηε ζπλέρεηα πξνβάιεη ην πξνθίι ηνπ ρξήζηε, ηε ιίζηα κε ηηο επαθέο ηνπ ρξήζηε νλνκαζηηθά θαη θαηεγνξηνπνηεί ηηο επαθέο ηνπ ρξήζηε κε βάζε ην θιάδν ηεο επηρείξεζεο πνπ έρνπλ δειώζεη γηα λα κπνξεί ν ρξήζηεο λα βξεη ζπλεξγάηεο ζηνλ θύθιν ησλ επαθώλ ηνπ αλα θαηεγνξία. Η εθαξκνγή απηή ρξεζηκνπνηεί ηελ ππάξρνπζα βηβιηνζήθε ηνπ socialauth γηα android 1.0 θαζώο θαη ηελ αληίζηνηρε θύξηα βηβιηνζήθε πνπ δηεπθνιύλεη ηελ επηθνηλσλία κε θνηλσληθά δίθηπα. Λέξειρ κλειδιά: θηλεηό, android, LinkedIn, δίθηπα θνηλσληθήο δηθηύσζεο, εθαξκνγή 5

6

Abstract The purpose of my diplomatic work was to create an application that will retrieve data from the social network LinkedIn and then present them on a mobile phone screen. The application will run in mobile phones over Android. Android is a Linux- based operating system designed primarily for touch screen mobile devices such as smartphones and tablet computers which provides tools for creating applications. The application was designed on the eclipse platform with the assistance of android tools. The application logs in with the user's profile in LinkedIn and requests permission for basic profile information and user's connections as well as information provided from LinkedIn for those connections. Later it presents a user profile view, a connection list view and a view with categorized connections by industry so users can find associates by category. This application uses the library of socialauth for android and its compatible basic library for communication with social networks. keywords: mobile phone, android, LinkedIn, social networks, application 7

8

Πίνακασ Περιεχομζνων 1. Ειςαγωγι... 11 1.1. Κινθτι Τθλεφωνία... 11 1.2. Android... 12 1.2.1. Ιςτορία... 12 1.2.2. Διεπιφάνεια (Interface)... 13 1.2.3. Εφαρμογζσ και Ανάπτυξθ... 14 1.2.4. Linux... 14 1.2.5. Διαχείρθςθ Μνιμθσ... 16 1.2.6. Αςφάλεια... 17 1.2.7. Licensing... 17 2. Σκοπόσ τθσ εργαςίασ... 19 3. Συμπλθρωματικά προγράμματα- εργαλεία... 20 3.1. Socialauth... 20 3.2. Socialauth-android... 23 3.3. Eclipse-Εργαλεία Σχεδιαςμοφ Android Εφαρμογϊν... 24 3.4. Apigee... 25 3.5. LinkedIn... 25 3.6. OAuth - Εξουςιοδότθςθ... 27 3.6.1. OAuth 1.0... 27 3.6.2. OAuth 2.0... 33 3.7. Εξουςιοδότθςθ ςτο LinkedIn... 34 3.8. Άδειεσ... 35 4. Αναλυτικι περιγραφι τθσ εφαρμογισ... 36 4.1. Χειριςμόσ εφαρμογισ... 36 9

4.2. Υλοποίθςθ... 39 4.3. Άδειεσ Λογιςμικοφ... 52 5. Παράρτθμα Α... 53 5.1. Κϊδικασ εφαρμογισ... 53 6. Βιβλιογραφία... 98 10

1. Ειζαγωγή Στθν ενότθτα αυτι κα κάνουμε μία ςφντομθ ιςτορικι αναδρομι ςτθ κινθτι τθλεφωνία εμβακφνοντασ ςτα smartphones και ςτο λειτουργικό ςφςτθμα Android για να κατανοιςουμε καλφτερα τθν εφαρμογι που δθμιουργιςαμε. 1.1. Κινηηή Τηλεθωνία Κινθτό τθλζφωνο (ι απλά κινθτό), ονομάηεται κατά κφριο λόγο το τθλζφωνο που δεν εξαρτάται από φυςικι καλωδιακι ςφνδεςθ με δίκτυο παροχισ τθλεφωνίασ και δεν εξαρτάται από κάποια τοπικι αςφρματθ ςυςκευι εκπομπισ ραδιοφωνικοφ ςιματοσ χαμθλισ ςυχνότθτασ. Τα κινθτά τθλζφωνα χρθςιμοποιοφν τεχνολογία κυψελϊν (cells) και εκπζμπουν ςε υψθλζσ ςυχνότθτεσ. Για τθν εκπομπι και λιψθ των ςθμάτων χρθςιμοποιείται πλζον, αποκλειςτικά ψθφιακι τεχνολογία με κωδικοποίθςθ. Από το 1990 μζχρι το 2011 οι χριςτεσ των κινθτϊν ςυςκευϊν αυξικθκαν ραγδαία απο 12.4 εκατομμφρια ςε 6 δισ εκατομμφρια, προςεγγίηοντασ το 87% του πλθκυςμοφ. Σθμζρα τα κινθτά τθλζφωνα υποςτθρίηουν πολφ περιςςότερεσ δυνατότθτεσ πζρα από τθ διεξαγωγι απλϊν κλιςεων. Κάποιεσ από αυτζσ είναι τα μθνφματα, MMS, email, internet, υπζρυκρεσ, bluetooth, επαγγελματικζσ εφαρμογζσ, παιχνίδια και θ φωτογραφικι μθχανι. Οι ςυςκευζσ που προςφζρουν όλεσ αυτζσ τισ υπθρεςίεσ και γενικότερα ιδιότθτεσ υπολογιςτϊν αναφζρονται γενικότερα ωσ smartphones. Η πρϊτθ κινθτι ςυςκευι τθλεφϊνου χειρόσ δθμιουργικθκε από τουσ John F. Mitchell και Dr Martin Cooper για τθ Motorola το 1973 και ηφγιηε περίπου 1 κιλό. Το πρϊτο διαφθμιςτικό ζγινε απο το δίκτυο ΝΤΤ τθσ Ιαπωνίασ το 1979 αρχικά ςτθ πρωτεφουςα του Τοκυο. Το 1981 ακολοφκθςαν διαφθμίςεισ για το Nordic Mobile Telephone (NMT) ςτισ Δανία, Φινλανδία,Σουθδία και Νορβθγία. Πολλζσ άλλεσ χϊρεσ ακολοφκθςαν ςυμπεριλαμβανομζνων τθσ Αγγλίασ, του Μεξικοφ και του Καναδά. Στισ 6 Μαρτίου του 1983 θ Ameritech κυκλοφόρθςε ςτθν αγορά το 11

μοντζλο DynaTAc το οποιο ειχε 1G, ϊρεσ ομιλίασ 0,5 και για τθ λειτουργία του απαιτοφςε 10 ϊρεσ φόρτθςθσ. Το 1991 θ Radiolinja ςτθ Φινλανδία ζβγαλε τα πρϊτα κινθτά τθλζφωνα 2G βαςιςμζνα ςτο πρότυπο GSM. Δζκα χρόνια αργότερα το 2001 τα πρϊτα κινθτά 3G κυκλοφόρθςαν ςτθν Ιαπωνία από τθν NTT DoCoMo βαςιςμζνα ςτο πρότυπο WCDMA. Στθ ςυνζχεια ακολοφκθςαν 3.5G, 3G+, turbo 3G βαςιςμζνα ςτο high-speed packet access (HSPA) παρζχοντασ τθ δυνατότθτα ςτα δίκτυα UMTS να κάνουν ταχφτερθ μεταφορά δεδομζνων και μεγαλφτερθ χωρθτικότθτα. Μζχρι το 2009 είχε γίνει ςαφζσ ότι τα δίκτυα 3G δε μποροφςαν να υποςτθρίξουν εφαρμογζσ που ςχετίηονταν με εφαρμογζσ πολυμζςων του ιντερνετ (streaming media). Κατά ςυνζπεια άρχιςαν να αναπτφςςονται τα κινθτά 4θσ γενιάσ με ζωσ και 10 φορζσ καλφτερεσ ταχφτθτεσ ςε ςχζςθ με τα δίκτυα 3θσ γενίασ. Τα κινθτά 4G ςτθρίηονταν ςε δφο πρότυπα, το WiMAX και το LTE που παρουςιάςτθκαν πρϊτα από τθ Σκανδιναβικι TeliaSonera. Όμωσ οι εξελίξεισ ςτθ κινθτι τθλεφωνία δε ςταμάτθςαν εκεί το 2005 θ Android Inc. καταςκεφαςε τo λογιςμικό για τα πρϊτα κινιτα smartphones και tablets το οποίο αργότερα αγοράςτθκε από τθ Google. Σν πξώην θηλεηό κε ινγηζκηθό android πνπιήζεθε ηνλ Οθηώβξην ηνπ 2008. 1.2. Android 1.2.1. Ιζηοπία Το Android είναι λειτουργικό ςφςτθμα για ςυςκευζσ κινθτισ τθλεφωνίασ το οποίο τρζχει τον πυρινα του λειτουργικοφ Linux. Αρχικά αναπτφχκθκε από τθν Google και αργότερα από τθν Open Handset Alliance. Επιτρζπει ςτουσ καταςκευαςτζσ λογιςμικοφ να ςυνκζτουν κϊδικα με τθν χριςθ τθσ γλϊςςασ προγραμματιςμοφ Java, ελζγχοντασ τθν ςυςκευι μζςω βιβλιοκθκϊν λογιςμικοφ ανεπτυγμζνων από τθν Google. Η Android Inc. ιδρφκθκε ςτο Palto Alto τθσ Καλιφόρνια τον Οκτϊβριο του 2003 από τουσ Andy Rubin, Rich Miner, Nick Sears, Chris White. Αρχικόσ ςκοπόσ τθσ 12

εταιρείασ ιταν θ καταςκευι λογιςμικοφ για ψθφιακζσ μθχανζσ όταν ςυνειδθτοποίθςαν ότι δεν αφορά μεγάλο αγοραςτικό κοινό και ζςτρεψαν τισ προςπάκειεσ τουσ ςτθ καταςκευι μιασ κινθτισ ςυςκευισ που να δουλεφει με λογιςμικό παραπλιςιο τθσ Symbian και τθσ Windows Mobile (τότε δεν είχε ακόμθ κυκλοφοριςει το iphone τθσ Apple). Η Google αγόραςε τθν Android Inc. ςτισ 17 Αυγοφςτου 2005. Μετά τθν αγορά οι Rubin, Miner και White παρζμειναν ςτθν εταιρεία. Στθ Google θ ομάδα του Rubin ανζπτυξε λογιςμό με βάθ τον φλοιό των Linux. Η πρϊτθ παρουςίαςθ τθσ πλατφόρμασ Android ζγινε ςτισ 5 Νοεμβρίου 2007, παράλλθλα με τθν ανακοίνωςθ τθσ ίδρυςθσ του οργανιςμοφ Open Handset Alliance, μιασ κοινοπραξίασ 48 τθλεπικοινωνιακϊν εταιριϊν, εταιριϊν λογιςμικοφ κακϊσ και καταςκευισ hardware, οι οποίεσ είναι αφιερωμζνεσ ςτθν ανάπτυξθκαι εξζλιξθ ανοιχτϊν προτφπων ςτισ ςυςκευζσ κινθτισ τθλεφωνίασ. Το πρϊτο κινθτό Android ιταν το HTC Dream και κυκλοφόρθςε ςτισ 22 Οκτωβρίου 2008. Από το 2008 και μετά το Android ζβγαλε πολλζσ ενθμερϊςεισ και ςταδιακά βελτιϊςε εκκετικά το λειτουργικό ςφςτθμα. Κάκε καινοφργια ζκδοςθ ονομάηεται με το πρϊτο γράμμα ςε αλφαβθτικι ςειρά ςε ςχζςθ με τισ προθγοφμενεσ εκδόςεισ με βάςθ κάποιο γλυκό. 1.2.2. Διεπιθάνεια (Interface) H διεπιφάνεια του android ςτθρίηεται ςτον απευκείασ χειριςμό τθσ ςυςκευισ, δθλαδι με τθ χριςθ οκόνθσ αφισ ο χριςτθσ μπορεί με απλζσ κινιςεισ των δακτφλων να χειρίηεται πολλζσ οκόνεσ και λειτουργίεσ άμεςα. Οι κινιςεισ του χριςτθ γίνονται αντιλθπτζσ από τθ ςυςκευι και θ ςυςκευι αφινει το χριςτθ να καταλάβει πότε ζγιναν αντιλθπτζσ με ανάλογουσ ιχουσ και δονιςεισ. Οι ςυςκευζσ android ζχουν επίςθσ επυταχυνςιόμετρα, γυροςκόπια και αιςκθτιρεσ εγγφτθτασ που χρθςιμοποιοφνται ςε διάφορεσ εφαρμογζσ (όπωσ για παράδειγμα θ μετατροπι τθσ οκόνθσ από κάκετθ ςε οριηόντια ανάλογα με το πωσ κρατιζται θ ςυςκευι ι ο χειριςμόσ ωσ τιμόνι ςε μία εφαρμογι με οδιγθςθ εικονικϊν αυτοκινιτων) 13

Τα κινθτά ανοίγουν ςε μία κεντρικι οκόνθ όπωσ θ οκόνθ ενόσ υπολογιςτι. Η οκόνθ αυτι δομείται ςυνικωσ από εικονίδια των διαφορων εφαρμογϊν τα οποία με ζνα πάτθμα ανοίγουν τθν εφαρμογι. Εικονίδια που απεικονίηουν ςτοιχεία λειτουργίασ τθσ ςυςκευισ (μπαταρία, ϊρα, ςυνδεςιμότθτα δικτφου κ.τ.λ) βρίςκονται ςτθ μπάρα λειτουργιϊν. Ειδοποιιςεισ για χαμζνεσ κλιςεισ και άλλεσ ειδοποιιςεισ εφαρμογϊν εμφανίηονται ςαν Popups και ςτθ ςυνζχεια εξαφανίηονται από τθ κεντρικι οκόνθ και εμφανίηονται ςε ξεχωριςτι οκόνθ που εμφανίηεται με ςυρςιμο του δαχτφλου προσ τα κάτω, πάνω ςτθν οκόνθ. Εικόνα 1 Αρχική οθόνη android 1.2.3. Εθαπμογέρ και Ανάπηςξη Εφαρμογζσ ςχεδιάηονται για κινθτά android ςτθ γλϊςςα προγραμματιςμοφ java με τθ βοικεια του Android Software Development Kit (SDK 1 ). Το SDK περιζχει debugger, βιβλιοκικεσ, προςομοιωτι βαςιςμζνο ςτο QEMU (Quick emulator), αρχεία με πλθροφορίεσ, παραδείγματα κϊδικα και tutorials. Η πιο δθμοφιλισ πλατφόρμα που χρθςιμοποιείται είναι το Eclipse το οποίο ζχει τα αντίςτοιχα εργαλεία για android ( Android development Tools (ADT) ). Άλλα εργαλεία που χρθςιμοποιοφνται είναι το Native Development Kit για εφαργμογζσ ςε C ι C++ και το Google App Inventor με γραφικό περιβάλλον για αρχάριουσ ςχεδιαςτζσ λογιςμικοφ. 1.2.4. Linux Οι αρχικζσ εκδόςεισ του android βαςίηονται ςτο φλοιό των linux ζκδοςθσ 2.6 και από το Android Ice Cream Sandwich 4.0 και ζπειτα ςτθν ζκδοςθ των linux 3.x με βιβλιοκικεσ και εφαρμογζσ γραμμζνεσ ςε C και application framework που 1 http://developer.android.com/sdk/index.html 14

περιζχει βιβλιοκικεσ ςυμβατζσ με τθ Java βαςιςμζνεσ ςτο Apache Harmony. To android χρθςιμοποιεί τθ Dalvik virtual machine με just-in-time μεταγλϊττιςθ για να τρζξει το εκτζλεςιμο αρχείο Dalvik που είναι μετεφραςμζνο από κϊδικα Java ςε μορφι byte. Το android ακολουκεί τθν αρχιτεκτονικι ARM (βαςιςμζνθ ςε RISC υπολογιςτζσ ). Ο φλοιόσ των linux ζχει υποςτεί αρχιτεκτονικζσ αλλαγζσ από τθ Google εκτόσ του κφκλου τθσ τυπικισ ανάπτυξθσ του φλοιοφ. Δεν υποςτθρίηει το πρωτόκολλο X Windows System [1] οφτε το πλιρεσ ςφνολο των κλαςικϊν βιβλιοκθκϊν τθσ GNU και αυτό κακιςτά δφςκολο να εγκακιςτοφν τισ υπάρχουςεσ εφαρμογζσ Linux ι βιβλιοκικεσ για Android. Υποςτιριξθ απλισ C και SDL [2] εφαρμογϊν είναι δυνατι με προςκικθ μίασ shim [3] και χριςθ JNI [4]. Η μνιμθ των κινθτϊν android είναι χωριςμζνθ ςε πολλά κομμάτια όπωσ "/system" για το λειτουργικό ςφςτθμα και "/data" για το χριςτθ και τισ εγκαταςτάςεισ των εφαρμογϊν. Σε αντίκεςθ με τισ εκδόςεισ των linux οι χριςτεσ των android δεν ζχουν δικαιϊμα να πειράξουν μζρθ τθσ μνιμθσ όπωσ "/system" γιάτι είναι επιςτρεπτι μόνο θ ανάγνωςθ για λόγουσ αςφαλείασ. Παρόλα αυτά προγραμματιςτζσ μποροφν να επιρεάςουν το ςφςτθμα και να επιτρζψουν τθ τροποποίθςθ αυξάνοντασ τισ δυνατότθτεσ του ςυςτιματοσ ι προςκζτοντασ ιοφσ. 2 [1] X-Windows is a computer software system and network protocol that provides a basis for graphical user interfaces (GUIs) and rich input device capability for networked computers. [2] Simple DirectMedia Layer (SDL) is a cross-platform, free and open source multimedia library written in C that presents a simple interface to various platforms' graphics, sound, and input devices. [3] shim is a small library that transparently intercepts an API and changes the parameters passed, handles the operation itself, or redirects the operation elsewhere. [4] Java Native Interface (JNI) is a programming framework that enables Java code running in a Java Virtual Machine (JVM) to call, and to be called by, native applications (programs specific to a hardware and operating system platform) and libraries written in other languages such as C, C++ and assembly. 15

Εικόνα 2 Περιγραφή ςυςτήματοσ android 1.2.5. Διασείπηζη Μνήμηρ Επειδι οι περιςςότερεσ ςυςκευζσ android λειτουργοφν με μπαταρία, είναι ςχεδιαςμζνο να χειρίηεται τθ μνιμθ (RAM) και να ζχει τθν ελάχιςτθ κατανάλωςθ μπαταρίασ. Όταν κάποια εφαρμογι δε χρθςιμοποιείται πλζον από το χριςτθ το ςφςτθμα περιορίηει τθ μνιμθ που τθσ αφιερϊνει κρατϊντασ τθν όμωσ ακόμθ ανοιχτι. Οι εφαρμογζσ που παραμζνουν ανοιχτζσ αλλά εκτόσ χριςθσ δε χρθςιμοποιοφν τουσ πόρουσ τθσ ςυςκευισ (μπαταρία) μζχρι να επανζλκουν ςτο προςκινιο. Αυτό βελτιϊνει τθν απόκριςθ των εφαρμογϊν κακϊσ κάκε φορά που 16

ο χριςτθσ επιλζγει να τισ χρθςιμοποιιςει δε χρειάηεται να τισ ανοίξει εξ'αρχισ. Το android χειρίηεται τισ εφαρμογζσ που παραμζνουν ςτο παραςκινιο αυτόματα. Όταν θ μνιμθ ελαχιςτοποιείται το ςφςτθμα κα αρχίςει να κλείνει εφαρμογζσ που ιταν ανενεργζσ για μεγάλο χρονικό διάςτθμα. 1.2.6. Αζθάλεια Το android τρζχει τισ διάφορεσ εφαρμογζσ ςτο sandbox, μια απομονωμζνθ περιοχι του ςυςτιματοσ που δεν ζχει πρόςβαςθ ςτο υπόλοιπο ςφςτθμα εκτόσ αν ζχουν δοκεί τα αντίςτοιχα δικαιϊματα ςτθν εγκατάςταςθ από το χριςτθ. 1.2.7. Licensing Ο κϊδικασ του android πάρεχεται ωσ free and open-source λογιςμικό. Η Google διακζτει τα περιςςότερα κομμάτια του κϊδικα (ςυμπεριλαμβανομζνων των ςωρϊν του δικτφου και τθσ τθλεφωνίασ) υπό το license τθσ Apache v.2.0 και τισ υπόλοιπεσ αλλαγζσ ςτο φλοιό των linux υπό το license τθσ GNU General Public License v.2. H Open Handset Alliance τισ αλλαγζσ ςτο φλοιό των Linux τισ διζκετε πάντα ανοιχτζσ ςε όλουσ ενϊ το υπόλοιπο λογιςμικό του android που ςχεδιάςτθκε από τθ Google γινόταν διακζςιμο μόλισ κυκλοφοροφςε θ καινοφργια ζκδοςθ. Οι εφαρμογζσ android που ςχεδιάηονται από ιδιϊτεσ φζρουν τα δικά τουσ licenses. Στθ ςυνζχεια ακολουκεί ζνασ πίνακασ με πλθροφορίεσ για όλεσ τισ εκδόςεισ android 17

Εκδοςη Ονομαςία Ημερομηνία Ζκδοςησ API level Κατανομή (Μαϊοσ 1, 2013) 4.2.x Jelly Bean Νοζμβριοσ 13, 2012 17 2.3% 4.1.x Jelly Bean Ιοφλιοσ 9, 2012 16 26.1% 4.0.x Ice Cream Sandwich Δεκζμβριοσ 16, 2011 15 27.5% 3.2 Honeycomb Ιοφλιοσ 15, 2011 13 0.1% 3.1 Honeycomb Μάϊοσ 10, 2011 12 2.3.3 2.3.7 Gingerbread Φεβρουάριοσ 9, 2011 10 38.4% 2.3 2.3.2 Gingerbread Δεκζμβριοσ 6, 2010 9 0.1% 2.2 Froyo Μάϊοσ 20, 2010 8 3.7% 2.0 2.1 Eclair Οκτϊβριοσ 26, 2009 7 1.7% 1.6 Donut Σεπτζμβριοσ 15, 2009 4 0.1% 1.5 Cupcake Απρίλιος 30, 2009 3 18

2. Σκοπόρ ηηρ επγαζίαρ Στα πλαίςια τθσ εργαςίασ αυτισ δθμιουργιςαμε μία εφαρμογι για κινθτζσ ςυςκευζσ android θ οποία παίρνει δεδομζνα από ζνα λογαριαςμό LinkedIn και τα παρουςιάηει ςε οκόνεσ. Η εφαρμογι αυτι χρθςιμοποιεί τθν υπάρχουςα βιβλιοκικθ του socialauth. Πιο ςυγκεκριμζνα ο χριςτθσ με τθ βοικεια του socialauth ςυνδζεται ςτο λογαριαςμό του ςτο LinkedIn και δίνει ςτθν εφαρμογι τα δικαιϊματα να αναςφρει δεδομζνα από το προφίλ του. Αφοφ γίνει θ ςφνδεςθ και ο χριςτθσ μπει ςτο λογαριαςμό του, βγαίνει ζνα παράκυρο που του δίνει τθν επιλογι να δει το προςωπικό του προφίλ, να γράψει κάτι ςτο τοίχο του, να δει τθ λίςτα των φίλων του και να δει ποιοι από τουσ φίλουσ του ανικουν ςε κάποιο τομζα εργαςίασ ανά κατθγορίεσ. Για το προφίλ του χριςτθ ηθτοφνται τα δεδομζνα του βαςικοφ προφίλ όνομα, επίκετο, χϊρα, τοποκεςία, url τθσ φωτογραφίασ προφίλ και e-mail. Στθ ςυνζχεια αυτά παρουςιάηονται ςε ξεχωριςτι οκόνθ. Για τθ λίςτα των επαφϊν του χριςτθ ηθτοφνται τα δεδομζνα λίςτασ χριςτθ πιο ςυγκεκριμζνα όνομα και επίκετο. Στθ ςυνζχεια ςε ξεχωριςτι οκόνθ παρουςιάηεται θ λίςτα επαφϊν του χριςτθ με όνομα και επίκετο. Για τθ λίςτα επαφϊν του χριςτθ με βάςθ το τομζα εργαςίασ ηθτοφνται και πάλι δεδομζνα λίςτασ χριςτθ και πιο ςυγκεκριμζνα, όνομα, επίκετο, url τθσ φωτογραφίασ προφίλ, url του προφίλ τθσ επαφισ και τομζασ εργαςίασ. Στθ ςυνζχεια κατθγοριοποιεί τθσ επαφζσ του χριςτθ ςε κατθγορίεσ με βάςθ το γενικότερο τομζα εργαςίασ (πχ. οικονομικά) κατόπιν επιλογισ τθσ πρϊτθσ κατθγορίασ ο χριςτθσ καλείται να επιλζξει με βάςθ τον τομζα εργαςίασ που ζχουν δθλϊςει οι επαφζσ του. Στο τελόσ πραςουςιάηονται τα ςτοιχεία τθσ επαφισ ςε ξεχωριςτι οκόνθ. Κακ'όλθ τθ διάρκεια λειτουργίασ τθσ εφαρμογισ ο χριςτθσ ζχει τθ δυνατότθτα να πλοθγείται εντόσ τθσ εφαρμογισ ςε προθγοφμενα παράκυρα. 19

3. Σςμπληπωμαηικά ππογπάμμαηα- επγαλεία Για τθ λειτουργία τθσ εφαρμογισ χρθςιμοποιικθκαν ειδικά εργαλεία τθσ πλατφόρμασ eclipse κακϊσ και υπάρχουςεσ βιβλιοκικεσ του socialauth-android και socialauth. Επίςθσ χρθςιμοποιικθκαν λειτουργίεσ τθσ κονςόλασ Apigee, πρωτόκολλα εξουςιοδότθςθσ. 3.1. Socialauth Σε αυτό το ςθμείο πρζπει να γίνει μια αναφορά ςτο Socialauth και το τρόπο που δουλεφει. Για τθ δθμιουργία οποιαςδιποτε εφαρμογισ android που αναςφρει δεδομζνα από κάποιο κοινωνικό δίκτυο είναι απαραίτθτθ θ ανάλθψθ δικαιωμάτων δθμιουργίασ εφαρμογισ από το εκάςτοτε κοινωνικό δίκτυο. Για αυτό το ςκοπό κάκε προγραμματιςτισ λαμβάνει τα αντίςτοιχα κλειδιά τθσ εφαρμογισ του. Αντίςτοιχα και το Socialauth και ςτθ περίπτωςι μασ το mylinkedιnapp για να καταφζρουν τθ ςφνδεςθ τθσ εφαρμογισ ςτο κοινωνικό δίκτυο πρζπει πρϊτα να κάνουν ςφνδεςθ (Log in) με τα κλειδιά τουσ. 20

Εικόνα 3 Διαδικαςία λήψησ κλειδιϊν εφαρμογήσ Αφοφ ζχει γίνει επιτυχισ ςφνδεςθ τθσ εφαρμογισ με το κοινωνικό δίκτυο τθσ αρεςκίασ μασ ηθτείται από το χριςτθ να ςυνδεκεί με το προςωπικό του λογαριαςμό ςτο κοινωνικό δίκτυο. Τθ ςτιγμι που ο χριςτθσ κα πατιςει τι κζλει να εμφανιςτεί από τθν εφαρμογι ςτθ ςυνζχεια κα ςταλεί μία αίτθςθ GET ςτο κοινωνικό δίκτυο και αυτι αφοφ επιβεβαιϊςει ότι ο χριςτθσ ζχει όντωσ δικαίωμα να κάνει αυτι τθν αίτθςθ κα επιςτρζψει το αποτζλεςμα τθσ αίτθςθσ μασ. Αυτό κα το λάβει θ εφαρμογι μασ και κα το επεξεργαςτεί ανάλογα ϊςτε να μπορεί να το παρουςιάςει. Όταν τελειϊςει αυτι θ διαδικαςία κα παρουςιαςτοφν γραφικά τα αποτελζςματα ςε καινοφργια οκόνθ. Στθν Εικόνα 4 Εικόνα 3 Διαδικαςία λιψθσ κλειδιϊν εφαρμογισβλζπουμε πιο παραςτατικά τθ διαδικαςία. 21

Εικόνα 4 Παραςτατική λειτουργία ςυςτήματοσ 22

3.2. Socialauth-android To Socialauth -android προςκζτει τα χαρακτθριςτικά του Socialauth ςε περιβάλλον android. Εφ'όςον προςτεκεί ςτθν εφαρμογι ακολουκεί θ εξουςιοδότθςθ ςε περιβάλλον android. Ο χριςτθσ ανοίγει τθν εφαρμογι και επιλζγει τον πάροχο από τον οποίο κα ηθτιςει τθν εξουςιοδότθςθ χρθςιμοποιϊντασ τθ βιβλιοκικθ του SocialAuthandroid. Στθ ςυνζχεια ο χριςτθσ προτρζπεται να ειςάγει τα απαραίτθτα ςτοιχεία για τθ ςφνδεςθ. Ζπειτα ο πάροχοσ κα ηθτιςει τα απαραίτθτα δικαιϊματα για να μοιραςτεί τα δεδομζνα του χριςτθ ςτο κοινωνικό δίκτυο με τθν εφαρμογι. Με τθν αποδοχι ζχει επιτευχκεί θ εξουςιοδότθςθ και ο χριςτθσ επιςτρζφει ςτθν εφαρμογι. Τϊρα ο χριςτθσ μπορεί να χειριςτεί τα δεδομζνα του μζςω τθσ εφαρμογισ. Στθν Εικόνα 5 ακολουκεί θ διαδικαςία ςε διάγραμμα. 23

Εικόνα 5. Διάγραμμα λειτουργίασ SocialAuth-android 3.3. Eclipse-Επγαλεία Σσεδιαζμού Android Εθαπμογών Τα εργαλεία ςχεδιαςμοφ android εφαρμογϊν (Android Development Tools (ADT)) μπαίνουν ωσ πρόςκετα ςτθ πλατφόρμα του Eclipse και διευκολφνουν το ςχεδιαςμό Android εφαρμογϊν,φτιάχνουν το γραφικό περιβάλλον τθσ εφαρμογισ, προςκζτουν βιβλιοκικεσ του Android, κάνουν ζλεγχο για ςφάλματα, εξάγουν υπογεγραμζνα ι όχι αρχεία τφπου.apk για εγκατάςταςθ τθσ εφαρμογισ. 24

3.4. Apigee Το Apigee είναι μια πλατφόρμα για προγραμματιςτζσ που περιζχει ςτο ςχεδιαςμό του εργαλεία για καλφτερο, πιο λειτουργικό ςχεδιαςμό εφαρμογϊν. Πιο ςυγκεκριμζνα διακζτει μια πλθκϊρα κοινωνικϊν δικτφων (ςυνολικά 80) και μζςω τθσ ειδικά ςχεδιαςμζνθσ κονςόλασ προςφζρει ςτο προγραμματιςτι τθ δυνατότθτα να δει τι δεδομζνα μπορεί να ηθτιςει από κάκε κοινωνικό δίκτυο και να ελζγξει το αποτζλεςμα των αιτιςεων δεδομζνων (requests, queries) που κα εκάνε ςτο πάροχο (GET, PUT, POST, DELETE). Η Εικόνα 6 παρουςιάηει γραφικά τθ λειτουργία του Apigee. Εικόνα 6 Apigee 3.5. LinkedIn Το LinkedIn είναι ζνα κοινωνικό δίκτυο για επαγγελματίεσ. Δθμιουργικθκε το Δεκζμβριο του 2002 και δθμοςιοποιικθκε το Μάϊο του 2003. Η πρωταρχικι του χριςθ είναι για επαγγελματικι δικτφωςθ. Από τον Ιανουάριο του 2013 το LinkedIn ζχει παραπάνω από 200 εκατομμφρια χριςτεσ ςε πάνω από 200 χϊρεσ. Μζςω του LinkedIn οι χριςτεσ ζχουν τθ δυνατότθτα: Να γνωρίςουν επαγγελματικζσ επαφζσ δευτζρου βακμοφ (επαφζσ των επαφϊν τουσ) κακϊσ και επαγγελματικζσ επαφζσ τρίτου βακμοφ. 25

Να ανεβάςουν το βιογραφικό τουσ θλεκτρονικά και να παρουςιάςουν καλφτερα το επαγγελματικό τουσ προφίλ (εργαζιακή εμπειρία και αναλσηικό ηοσ εκπαιδεσηικό σπόβαθρο) και τισ κοινωνικζσ τουσ δραςτθριότθτεσ. Να βρουν εργαςία, ςυνεργάτεσ και επιχειρθματικζσ ευκαιρίεσ που προβάλλονται από τισ επαφζσ τουσ. Ωσ εργοδότεσ να δθμοςιοποιιςουν εργαςιακζσ ευκαιρίεσ. Αν αναηθτοφν εργαςία να κοιτάξουν τα προφίλ υπεφκυνων ανκρϊπινου δυναμικοφ και να δουν ποιοι γνωςτοί τουσ μποροφν να τουσ ςυςτιςουν. Να δθμοςιοποιιςουν φωτογραφίεσ και να δουν φωτογραφίεσ (με ςκοπό τθν περιτζρω αναγνϊριςθ των ικανοτιτων τουσ). Να ακολουκιςουν τισ ενθμερϊςεισ εταιριϊν και να παίρνουν ειδοποιιςεισ για επαγγελματικζσ ευκαιρίεσ. Να αποκθκεφςουν κζςεισ εργαςίασ που κα ικελαν να κάνουν αίτθςθ και όταν παρουςιαςτεί θ ευκαιρία να πάρουν δράςθ. Τα δεδομζνα των επαφϊν προςτατεφονται από το International Safe Harbor Privacy Principles. Το LinkedIn εκτόσ των άλλων προςφζρει και κάποιεσ επιπλζον εφαρμογζσ όπωσ το "LinkedIn Answers" όπου χριςτεσ κάνουν ερωτιςεισ επαγγελματικοφ περιεχομζνου επϊνυμα και δζχονται απάντθςεισ από άλλουσ επϊνυμουσ χριςτεσ ( πράγμα που αυξάνει τθν αξιοπιςτία των απαντιςεων ), "LinkedIn Polls", "LinkedIn DirectAds" (μία μορφι διαφθμίςεων). Το LinkedIn επίςθσ υποςτθρίηει τθ ςυμμετοχι ςε groups (ομάδεσ) ενδιαφερόντων. Οι περιςςότερεσ ομάδεσ ςχετίηονται με επαγγελματικά κζματα ενϊ υπάρχουν και ομάδεσ απόφοιτων. Τα groups παρζχουν τθ δυνατότθτα ςυηιτθςθσ θ οποία όμωσ ελζγχεται από τουσ υπεφκυνουσ του group. Κατά τθν αναηιτθςθ μίασ εταιρείασ ςτο LinkedIn παρουςιάηονται ςτατιςτικά ςτοιχεία για τθν εταιρεία αυτι όπωσ ποςοςτά ανδρϊν γυναικϊν, οι κζςεισ με το μεγαλφτερο ποςοςτό υπαλλιλων, θ τοποκεςία των κεντρικϊν γραφείων τισ εταιρείασ ι μία λίςτα από παλιοφσ και τωρινοφσ υπαλλιλουσ. 26

Τζλοσ, το LinkedIn προςφζρει ςτουσ χριςτεσ τθ δυνατότθτα να επαλθκεφςουν τισ ικανότθτεσ που ζχουν δθλϊςει οι επαφζσ τουσ (endorse). Με αυτό το τρόπο πιςτοποιοφνται περιςςότερο οι ικανότθτεσ των μελϊν του LinkedIn. 3.6. OAuth - Εξοςζιοδόηηζη Το OAuth είναι το πιο δθμοφιλζσ πρωτόκολλο εξουςιοδότθςθσ που χρθςιμοποιείται. Παρζχει τθ δυνατότθτα ςτουσ χριςτεσ να ζχουν πρόςβαςθ ςε πόρουσ που υπάρχουν ςε ζνα server εκ μζρουσ του διαχειρθςτι του. Επίςθσ παρζχει τθ δυνατότθτα παραχϊρθςθσ δικαιωμάτων ςε τρίτουσ χριςτεσ ϊςτε να μποροφν να ζχουν πρόςβαςθ ςε κάποιουσ πόρουσ που τουσ ανικουν χωρίσ να μοιράηονται τουσ κωδικοφσ τουσ με αυτοφσ. Στο κλαςικό μοντζλο εξουςιοδότθςθσ ο χριςτθσ (client) χρθςιμοποιεί τουσ κωδικοφσ του και με τθ πιςτοποίθςθ αυτϊν ζχει πρόςβαςθ ςτουσ πόρουσ που του αντιςτοιχοφν ςτο server. Το OAuth ειςάγει ζνα επιπλζον ρόλο ςε αυτό το μοντζλο αυτόν του διαχειριςτι πόρων (resource owner). Ο χριςτθσ (που δεν είναι διαχειριςτισ πόρων) ςτθ περίπτωςθ αυτι ηθτάει πρόςβαςθ ςε πόρουσ που χειρίηεται ο διαχειριςτισ και φιλοξενοφνται ςτο server. Για αυτό το λόγο πρζπει να πιςτοποιθκοφν όχι μόνο ο χριςτθσ με τουσ κωδικοφσ του αλλά και ο διαχειριςτισ πόρων για αυτι τθν αίτθςθ. 3.6.1. OAuth 1.0 Το OAuth 1.0 περιγράφεται από το πρωτόκολλο RFC5849. Ορολογία χρήςτησ (client) : Ενασ χριςτθσ HTTP (με βάςθ το πρωτόκολλο RFC2616) ικανόσ να κάνει αιτιςεισ εξουςιοδότθςθσ OAuth. διακομιςτήσ ( server): Ενασ HTTP διακομιςτισ με βάςθ το πρωτόκολλο RFC2616) ικανόσ να δεχτεί αιτιματα εξουςιοδότθςθσ OAuth. προςτατευμζνοσ πόροσ (protected resource): Πόροσ ςτον οποίο αποκτά κάποιοσ πρόςβαςθ από το διακομιςτι χρθςιμοποιϊντασ αιτιςεισ εξουςιοδότθςθσ OAuth. 27

διαχειριςτήσ πόρων(resource owner): Μία οντότθτα που ζχει τθν ικανότθτα πρόςβαςθσ και χειριςμοφ των προςτατευμζνων πόρων αφοφ παρουςιάςει τα κατάλλθλα διαπιςτευτιρια ςτο διακομιςτι. διαπιςτευτήρια(credentials): Ενα ηευγάρι από μοναδικό όνομα και κωδικό. Το OAuth κακορίηει τρεισ κλάςεισ διαπιςτευτθρίων : χριςτθ(client), παροδικά (temporary) και τεκμιρια (token), τα οποία χρθςιμοποιοφνται για να πιςτοποιιςουν και να εξουςιοδοτιςουν τον χριςτθ που ζνα απλό αίτθμα, ζνα αίτθμα εξουςιοδότθςθσ και ζνα αίτθμα πρόςβαςθσ αντίςτοιχα. τεκμήριο (token): Ενα μοναδικό πιςτοποιθτικό που δίνεται από το server και χρθςιμοποιείται από το χριςτθ για να μπορεί να ςυςχετίςει τα αιτιματα με το διαχειρθςτι πόρων του οποίου θ εξουςιοδότθςθ ηθτείται ι ζχει ιδθ αποκτθκεί από το χριςτθ. Τα τεκμιρια ζχουν ταιριαςτό κοινό κωδικό (shared-secret) που χρθςιμοποιείται από το χριςτθ για να επιτευχκεί θ ιδιοκτθςία του τεκμθρίου και θ δυνατότθτα του να παρουςιάςει τον διαχειριςτι πόρων. Σε αντιςτοιχεία με τουσ παραπάνω όρουσ χρθςιμοποιοφνται οι : Πελάτησ : χρήςτησ (Consumer : client ) Πάροχοσ: διακομιςτήσ Χρήςτησ : διαχειριςτήσ πόρων (Service Provider: server) (User: resource owner) Consumer Key and Secret: πιςτοποιητικά χρήςτη (Consumer Key and Secret: client credentials) Request Token and Secret: παροδικά πιςτοποιητικά (Request Token and Secret: temporary credentials) Access Token and Secret: πιςτοποιητικά τεκμηρίων (Access Token and Secret: token credentials) Διαδικαςία-Παράδειγμα 28

Ο Γιϊργοσ (διαχειριςτισ πόρων) πρόςφατα ανζβαςε κάποιεσ φωτογραφίεσ ςτο προςωπικό του φάκελο ςτο "photos.example.net" (server) και κα ικελε να τισ τυπϊςει από τον ιςτόχωρο "printer.example.com" (client). Πρακτικά κα κάνει εγγραφι με το λογαριαςμό του ςτο "photos.example.net" αλλά επειδι δε κζλει να μοιραςτεί τουσ κωδικοφσ του με το "printer.example.com" το "printer.example.com" κα ηθτιςει κάποια πιςτοποιθτικά χριςτθ από το "photos.example.net". Client Identifier: Client Shared-Secret: dpf43f3p2l4k3l03 kd94hf93k423kf44 Το "printer.example.com" κα χρθςιμοποιιςει τθ μεκοδο πιςτοποίθςθσ "HMAC- SHA1" όπωσ ορίηει το "photos.example.net". Temporary Credential Request https://photos.example.net/initiate Resource Owner Authorization URI: https://photos.example.net/authorize Token Request URI: https://photos.example.net/token Προτοφ ηθτθκεί άδεια χειριςμοφ φωτογραφιϊν από το Γιϊργο πρζπει να δθμιουργθκοφν παροδικά πιςτοποιθτικά με το "photos.example.net". Ακολουκϊντασ το πρωτόκολλο HTTPS (RFC2818) κα γίνει αίτθςθ ςτο διακομιςτι 29

POST /initiate HTTP/1.1 Host: photos.example.net Authorization: OAuth realm="photos", oauth_consumer_key="dpf43f3p2l4k3l03", oauth_signature_method="hmac-sha1", oauth_timestamp="137131200", oauth_nonce="wijqos", oauth_callback="http%3a%2f%2fprinter.example.com%2fready", oauth_signature="74knzjedhnmbp0emj9zht%2fxkycu%3d" Ο διακομιςτισ πιςτοποιεί το αίτθμα και απαντά με παροδικά πιςτοποιθτικά ςε μια απάντθςθ HTTP HTTP/1.1 200 OK Content-Type: application/x-www-form-urlencoded oauth_token=hh5s93j4hdidpola&oauth_token_secret=hdhd0 244k9j7ao03& oauth_callback_confirmed=true Ο χριςτθσ ηθτά τα δικαιϊματα από το Γιϊργο https://photos.example.net/authorize?oauth_token=hh5s93j4 hdidpola Ο διακομιςτισ ηθτά από το Γιϊργο να κάνει εγγραφι ςτο ςφςτθμα και να εγκρίνει τα δικαιϊματα που ζχει ηθτιςει ο "printer.example.com".ο Γιϊργοσ εγκρίνει τα δικαιϊματα και επιςτρζφουμε ςτο προθγοφμενο αίτθμα μζςω του callback-uri. 30

http://printer.example.com/ready? oauth_token=hh5s93j4hdidpola&oauth_verifier=hfdp7dh39dks9 884 To link αυτό επαλθκεφει ότι ζχουν δοκεί τα δικαιϊματα και ο χριςτθσ ηθτά πιςτοποιθτικά τεκμθρίων με τα ιδθ υπάρχοντα παροδικά πιςτοποιθτικά μζςω ενόσ αςφαλοφσ καναλιοφ (secure Transport Layer Seurity (TLS) ). POST /token HTTP/1.1 Host: photos.example.net Authorization: OAuth realm="photos", oauth_consumer_key="dpf43f3p2l4k3l03", oauth_token="hh5s93j4hdidpola", oauth_signature_method="hmac-sha1", oauth_timestamp="137131201", oauth_nonce="walatlh", oauth_verifier="hfdp7dh39dks9884", oauth_signature="gkgrfcywp7ro0oxsjdot%2fihf7iu%3d" Ο διακομιςτισ επαλθκεφει το αίτθμα και απαντά με πιςτοποιθτικά τεκμθρίων ςε HTTP HTTP/1.1 200 OK Content-Type: application/x-www-form-urlencoded oauth_token=nnch734d00sl2jdk&oauth_token_secret=pfkkdhi9sl 3r4s00 Με τα πιςτοποιθτικά τεκμθριϊν ο χριςτθσ μπορεί πλζον να πάρει τισ προςωπικζσ φωτογραφίεσ του Γιϊργου 31

GET /photos?file=vacation.jpg&size=original HTTP/1.1 Host: photos.example.net Authorization: OAuth realm="photos", oauth_consumer_key="dpf43f3p2l4k3l03", oauth_token="nnch734d00sl2jdk", oauth_signature_method="hmac-sha1", oauth_timestamp="137131202", oauth_nonce="chapoh", oauth_signature="mdpqcu8ipsujwon%2fudmsk2sui9i%3d" Ο χριςτθσ μπορεί να ςυνεχίςει να παίρνει φωτογραφίεσ από το φάκελο του Γιϊργου μζχρι αυτόσ να αποςφρει τα δικαιϊματα που ζχει παραχωριςει. Στθν Εικόνα 7 βλζπουμε ςχθματικά τθ διαδικαςία Εικόνα 7. OAuth authentication flow 32

3.6.2. OAuth 2.0 Το OAuth2 είναι θ επόμενθ ζκδοςθ του OAuth και εςτιάηει ςτθν απλότθτα των ςυνδζςεων. Δεν υποςτθρίηει τθν υπογραφι, τθ κρυπτογράφθςθ ι τθ ςφνδεςθ ςε αςφαλι κανάλια. Απαντά αποκλειςτικά ςε SSL και παρζχει κάποιο επίπεδο εμπιςτευτικότθτασ και εξουςιοδότθςθσ. Τα πιςτοποιθτικά του χρειάηονται ανανζωςθ γιατί διαρκοφν για μικρό χρονικό διάςτθμα. Στο OAuth2 υπάρχει διαχωριςμόσ ανάμεςα ςτο διακομιςτι που χειρίηεται τισ αιτιςεισ OAuth και ςτο διακομιςτι για εξουςιοδότθςθ. Δουλεφει περιςςότερο ςα πλαίςιο παρά ϊσ πρωτόκολλο. Το OAuth2 περιγράφεται από το πρωτόκολλο RFC6749. Στθν Εικόνα 8 περιγράφεται ςχθματικά θ δομι του πρωτοκόλλου. Εικόνα 8 OAuth2 ροή πρωτόκολλου. Στθν Εικόνα 9 περιγράφεται θ ανανζωςθ των πιςτοποιθτικϊν. 33

Εικόνα 9 Ανανζωςη των πιςτοποιητικϊν που ζχουν λήξει 3.7. Εξοςζιοδόηηζη ζηο LinkedIn Για τθ δθμιουργία τθσ εφαρμογισ χρειάςτθκε να πιςτοποιιςουμε τθν εφαρμογι μασ από το Linkedin και από το χριςτθ για να μποροφμε να πάρουμε δεδομζνα από το προφίλ του χριςτθ και να τα επεξεργάςτοφμε με τθν εφαρμογι. Για το ςκοπό αυτό μζςω του LinkedIn developers δθλϊςαμε τθν εφαρμογι μασ και πιραμε τα απαραίτθτα κλειδιά OAuth (consumer_key, consumer_secret). Στθ ςυνζχεια μζςω τθσ κλάςθσ LinkedInImpl.java που βρίςκεται ςτισ βιβλιοκικεσ μασ παίρνουμε τα απαραίτθτα πιςτοποιθτικά ςτζλνοντασ τα αιτιματα μασ ςτουσ ςυνδζςμουσ που ακολουκοφν όπωσ ορίηει το πρωτόκολλο OAuth 1. 0. 34

OAUTH_REQUEST_TOKEN_URL: https://api.linkedin.com/uas/oauth/requesttoken OAUTH_AUTHORIZATION_URL: https://api.linkedin.com/uas/oauth/authenticate OAUTH_ACCESS_TOKEN_URL: https://api.linkedin.com/uas/oauth/accesstoken 3.8. Άδειερ Αξίηει να αναφερκεί ότι ςτο LinkedIn υπάρχουν πολλά πεδία που παρότι παρζχονται οι αντίςτοιχεσ άδειεσ από το χριςτθ και τθροφνται όλα τα πρωτοκόλλα το κοινωνικό δίκτυο δεν επιτρζπει τθ πρόςβαςθ ςε αυτά ςε κανζνα διαχειριςτι. Για παράδειγμα οι δεξιότθτεσ (skills) των επαφϊν ενόσ χριςτθ ι τα e-mail τουσ ι θ θμερομθνία γεννθςισ τουσ κακϊσ και πολλά άλλα δε παρζχονται από το ςφςτθμα για να γίνει θ περαιτζρω επεξεργαςία τουσ με τθν εφαρμογι μασ. Γιαυτό το λόγο και ςτα πλαίςια τθσ εφαρμογισ παρουςιάηονται μόνο όςα πεδία προςφζρονται 35

4. Αναλςηική πεπιγπαθή ηηρ εθαπμογήρ Ακολουκεί μία αναλυτικι περιγραφι των κλάςεων τθσ εφαρμογισ για μεγαλφτερθ κατανοιςθ. 4.1. Φειπιζμόρ εθαπμογήρ Όταν ανοίξει θ εφαρμογι αρχικά παρουςιάηονται τα διακζςιμα κοινωνικά δίκτυα προσ ςφνδεςθ (Εικόνα 10) ςτθ περίπτωςι μασ επιλζγουμε το LinkedIn και ακολουκεί μία οκόνθ όπου ο χριςτθσ εγγράφεται ςτο κοινωνικό δίκτυο χρθςιμοποιϊντασ τουσ κωδικοφσ του και παράλλθλα παρζχει τα απαραίτθτα δικαιϊματα ςτθν εφαρμογι μασ (εικόνα 11). Στθ ςυνζχεια εμφανίηεται ζνα παράκυρο επιλογϊν ςτο οποίο ο χριςτθσ επιλζγει τι κελει να προβλθκεί, το προφίλ του, να γράψει κάτι ςτο προφίλ του, να δει τθ λίςτα των επαφϊν του, και τουσ φίλουσ του κατθγοριοποιθμζνουσ με βάςθ το επάγγελμα, επίςθσ υπάρχει επιλογι για επιςτροφι ςτθ προθγοφμενθ οκόνθ. Εικόνα 10 Αρχική Οθόνη Εφαρμογήσ Eικόνα 11. Εγγραφή χρήςτη Εικόνα 12. Παράθυρο επιλογϊν 36

Αν ο χριςτθσ επιλζξει να προβλθκεί το προφίλ του, εμφανίηεται θ εικόνα 13. Για λόγουσ προςταςίασ προςωπικϊν δεδομζνων ζχουν αλλαχκεί τα πρόςωπα ςτισ φωτογραφίεσ και ζχουν καλυφκεί τα προςωπικά ςτοιχεία. Εικόνα 13. Προφίλ χρήςτη Αν ο χριςτθσ επιλζξει να δει τθ λίςτα επαφϊν του κα εμφανιςτεί θ εικόνα 14. Εικόνα 14. Λίςτα επαφϊν Εάν ο χριςτθσ επιλζξει να δει τισ επαφζσ του κατθγοριοποιθμζνεσ με βάςθ το επάγγελμα, κα εμφανιςτεί αρχικά μία οκόνθ (εικόνα 15) με τισ κατθγορίεσ επαγγελμάτων χωριςμζνεσ ςε γενικότερεσ κατθγορίεσ. Αυτζσ είναι : τζχνθ (art ) γεωργία (agriculture ) 37

καταςκευζσ (constructions ) εταιρεία (corporation ) εκπαίδευςθ (education ) χρθματοοικονομικά (finance ) αγακά (goods ) κυβζρνθςθ (government ) υγεία (health ) νομοκεςία (legislation ) παραγωγι (manufacturing ) μζςα ενθμζρωςθσ (media ) οργάνωςθ (organisation ) αναψυχι (recreation) υπθρεςίεσ (services ) τεχνολογία (technology ) μεταφορά (tranportation ) απροςδιόριςτο (undefined ) Στθ ςυνζχεια αφοφ επιλζξει ςε ποια από αυτζσ κζλει να δει αν υπαρχοφν επαφζσ του κα εμφανιςτεί μια οκόνθ (εικόναι 16) με τα επαγγζλματα που ανικουν ςτο ςυγκεκριμζνο κλάδο εργαςίασ. Στισ παρανκζςεισ εμφανίηεται ο αρικμόσ των επαφϊν του χριςτθ που ανικουν ςτθ κάκε κατθγορία. Τα επαγγζλματα ορίηονται από το LinkedIn και φτάνουν ςυνολικά τα 143. Με τθν επιλογι επαγγζλματοσ κα εμφανιςτεί μία λίςτα από επαφζσ με το ςυγκεκριμζνο επάγγελμα (εικόνα 17). Ο χριςτθσ μπορεί να επιλζξει όποια από αυτζσ επικυμεί για να δει το αναλυτικό τουσ προφίλ (εικόνα 18). 38

Εικόνα 15. Κατηγορίεσ επαγγελμάτων Εικόνα 16. Επαγγζλματα Εικόνα 17. Λίςτα επαφϊν Εικόνα 18. Προφίλ επαφήσ 4.2. Υλοποίηζη Στθν ενότθτα αυτι κα δϊςουμε αρκετζσ πλθροφορίεσ ςχετικά με το πωσ ζχουν υλοποιθκεί τα παραπάνω τμιματα. Θα εξθγιςουμε κάποια ςυγκεκρίμενα κομμάτια κϊδικα που είναι απαραίτθτα για τθ κατανόθςθ τθσ λειτουργίασ τθσ εφαρμογισ (και όχι ολόκλθρεσ τισ κλάςεισ ). CustomUI.java public List<Contact2> getcontactlist2() try 39

contactslist2 = new contacttask2().execute().get(); catch (InterruptedException e) e.printstacktrace(); catch (ExecutionException e) e.printstacktrace(); return contactslist2; private class contacttask2 extends AsyncTask<Void, Void, List<Contact2>> protected List<Contact2> doinbackground(void... params) try List<Contact2> contactsmap = LinkedInImpl2.getContactList2(adapter.getCurrentProvider()); Log.d("SocialAuthAdapter", "Received Contact list"); return contactsmap; catch (Exception e) e.printstacktrace(); dialoglistener.onerror(new SocialAuthError("Contact List not Received", e)); return null; Για να ανακτιςουμε τθ λίςτα επαφϊν με βάςθ το επάγγελμα χρθςιμοποιοφμε τισ πιςτοποιιςεισ που είχαμε ιδθ αποκτιςει με τον adapter και εκτελοφμε το αίτθμα αςφγχρονα ςτο παραςκινιο για να μθ κολλάει θ εφαρμογι κατά τθν αίτθςθ αυτι. public void Events(int position, String provider) switch(position) case 0 : profilemap = adapter.getuserprofile(); 40

if (provider.equalsignorecase("linkedin")) Intent intent = new Intent(CustomUI.this, ProfileActivity.class); intent.putextra("contacts", profilemap); startactivity(intent); break; case 1 : adapter.updatestatus("socialauth Android" + System.currentTimeMillis()); Toast.makeText(CustomUI.this, "Message posted on " + provider, Toast.LENGTH_SHORT).show(); break; case 2 : List<Contact> contactslist = adapter.getcontactlist(); Intent contactintent=new Intent(getApplicationContext(),ContactList.class); contactintent.putextra("contacts", (Serializable)contactsList); startactivity(contactintent); break; case 3 : if (provider.equalsignorecase("linkedin")) try List<Contact2> contactslist = getcontactlist2(); IndustryLog indlog= new IndustryLog(); if (contactslist!= null && contactslist.size() > 0) for (Contact2 p : contactslist) indlog.dosearchandadd(p.getindustry(), p); 41

Intent myintent = new Intent(getApplicationContext(),GroupsUI.class); myintent.putextra("log", indlog); myintent.putextra("indlist", (Serializable)indList); startactivity(myintent); break; catch (Exception e) e.printstacktrace(); else dialog.dismiss(); break; case 4: if (provider.equalsignorecase("linkedin")) dialog.dismiss(); break; Στο παράκυρο που βγαίνει με τισ επιλογζσ (εικόνα 12) ζχουμε ορίςει κάκε επιλογι να δθμιουργεί ζνα event ανάλογα με το τι πατικθκε ξεκινϊντασ από το 0. Στθ πρϊτθ επιλογι αρχικά ανακτοφμε με τα αναγνωριςμζνα δικαιϊματα του adapter το προφίλ του χριςτθ και ςτθ ςυνζχεια ανοίγουμε καινοφργια οκόνθ με τθ χριςθ του Ιntent με πατρικό παράκυρο αυτό του CustomUI. Το καινοφργιο παράκυρο κα παρουςιάηεται με βάςθ τα όςα γράφονται ςτθ κλάςθ ProfileActivity.class. Επίςθσ για να είναι δυνατι θ προβολι των δεδομζνων πρζπει να περάςουμε τα δεδομζνα ςτο παράκυρο που κα ανοίξει και για να το πετφχουμε αυτό τα περνάμε με τθ ςυνάρτθςθ putextras. Η επιλογι 1 αποτελεί επιλογι τθσ βιβλιοκικθσ του socialauth και δεν ζχουμε επζμβει ςε αυτι. Στθν επιλογι 2 επαναλαμβάνουμε τθ διαδικαςία τθσ επιλογισ 0 χρθςιμοποιϊντασ τον adapter του παρόχου του κοινωνικοφ δικτφου, που ζχει πιςτοποιθκεί, (ςτθ περίπτωςθ μασ LinkedIn) ηθτοφμε τθ λίςτα των επαφϊν του χριςτθ (getcontactlist() ) και αντίςτοιχα τθ περνάμε ςτο επόμενο παράκυρο (που δθμιουργείται από τθ κλάςθ ContactList.class) που δθμιουργοφμε με πατρικό 42

παράκυρο το CustomUI και πάλι. Στθν επιλογι 3 επαναλαμβάνουμε τθ διαδικαςία τθσ επιλογισ 2 μόνο όταν ο πάροχοσ είναι το LinkedIn. Αποκτοφμε τθ λίςτα των επαφϊν τθν οποία μετά περνάμε ςε ζνα hash table (indlog) με κλειδί το όνομα του επαγγζλματοσ που ζχουν δθλϊςει. Σε αντιςτοιχία με πριν ανοίγουμε καινοφργιο παράκυρο ( Που δθμιουργείται από τθ κλάςθ GroupsUI.class) και περνάμε ωσ δεδομζνο το hash table. Αν ο πάροχοσ δεν είναι το LinkedIn δεν εκτελείται καμία ενζργια. Στθ περίπτωςθ 4 αν ο πάροχοσ είναι το LinkedIn επιςτρζφει ςτο προθγοφμενο παράκυρο. Κάποιεσ επιλογζσ ζχουν ρυκμιςτεί ειδικά για το LinkedIn αυτό ςυμβαίνει γιατί επιλζξαμε να παραμείνουν ςτθν εφαρμογι οι υπόλοιποι πάροχοι κοινωνικϊν δικτφων που υπιρχαν και να διατθριςουν τισ ιδθ υπάρχουςεσ επιλογζσ τουσ. ProfileActivity.java protected void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate); setcontentview(r.layout.activity_profile); ProfileMap= (Profile) getintent().getserializableextra("contacts"); // Loader image - will be shown before loading image loader = R.drawable.no_contact; // Imageview to show image = (ImageView) findviewbyid(r.id.myimage); name = (TextView) findviewbyid(r.id.name); lastname = (TextView) findviewbyid(r.id.lastname); dob=(textview) findviewbyid(r.id.dob); email = (TextView) findviewbyid(r.id.email); location=(textview)findviewbyid(r.id.location); name.settext("name: "+ProfileMap.getFirstName()); lastname.settext("surname: "+ProfileMap.getLastName()); email.settext("email: "+ProfileMap.getEmail()); dob.settext("country: "+ ProfileMap.getDob()); location.settext("location: "+ProfileMap.getLocation()); // Image url image_url = ProfileMap.getProfileImageURL(); // ImageLoader class instance imgloader = new ImageLoader(getApplicationContext()); imgloader.displayimage(image_url, loader, image); 43

Για τθ δθμιουργία του προφίλ του χριςτθ αρχικά διαλζγουμε το τρόπο που κα εμφανιςτοφν τα δεδομζνα ςτθν οκόνθ (setcontentview ) με βάςθ το xml αρχείο activity_profile, ςτθ ςυνζχεια αποκθκεφουμε τα δεδομζνα που ιρκαν από το προιγουμενο παράκυρο ςτο ProfileMap ςυνδζουμε τισ μεταβλθτζσ τθσ κλάςθσ με τα πεδία που ορίςαμε ςτο layout και περνάμε τιμζσ ςτα πεδία του παράκυρου. Εδω αξίηει να αναφερκεί ότι επειδι υπάρχει εικόνα που κα φορτϊνει μαηί με το παράκυρο ορίςαμε κάποια προεπιλογι εικόνασ για να προβάλλεται μζχρι να γίνει θ φόρτωςθ (loader= R.drawable.no_contact θ εικόνα βρίςκεται ςτο φάκελο drawable και ονομάηεται no_contact) Παρακάτω κα εξθγιςουμε πωσ φορτϊνεται θ εικόνα ςτο προφίλ. Αρχικά πρζπει να εξθγιςουμε ότι για να φορτωκεί μία εικόνα δεν αρκεί το URL τθσ, πρζπει να τθ φορτϊςουμε πρϊτα ςε μία προςωρινι κζςθ ςτθ μνιμθ (cache) και μετά να τθν εμφανίςουμε. Γιαυτό και αρχικά ςχεδιάςτθκε ο τρόποσ που κα τθν αποκθκεφςουμε. MemoryCache.java private Map<String, SoftReference<Bitmap>> cache=collections.synchronizedmap(new HashMap<String, SoftReference<Bitmap>>()); public Bitmap get(string id) if(!cache.containskey(id)) return null; SoftReference<Bitmap> ref=cache.get(id); return ref.get(); public void put(string id, Bitmap bitmap) cache.put(id, new SoftReference<Bitmap>(bitmap)); public void clear() cache.clear(); Εδϊ αποκθκεφουμε τθν εικόνα (μζκοδοσ put) με κάποιο αναγωριςτικό id ςε ζνα hash table για να μποροφμε να τθν ανακτιςουμε πιο γριγορα από τθ μνιμθ. FileCache.java private File cachedir; 44

public FileCache(Context context) //Find the dir to save cached images if (android.os.environment.getexternalstoragestate().equals(android.os.environme nt.media_mounted)) cachedir=new File(android.os.Environment.getExternalStorageDirectory(),"TempImages"); else cachedir=context.getcachedir(); if(!cachedir.exists()) cachedir.mkdirs(); public File getfile(string url) String filename=string.valueof(url.hashcode()); File f = new File(cacheDir, filename); return f; public void clear() File[] files=cachedir.listfiles(); if(files==null) return; for(file f:files) f.delete(); Εδϊ δεςμεφουμε χϊρο ςτθ μνιμθ του android για αποκικευςθ εικόνων (temp images). Η getfile μασ δίνει τθ δυνατότθτα να βροφμε ςτθ μνιμθ το φάκελο και κατ'επζκταςθ τθν εικόνα μασ. Με τθ μζκοδο clear απελευκερϊνουμε τθ μνιμθ. ImageLoader.java MemoryCache memorycache=new MemoryCache(); FileCache filecache; private Map<ImageView, String> imageviews=collections.synchronizedmap(new WeakHashMap<ImageView, String>()); ExecutorService executorservice; Αρχικά δεςμεφουμε τουσ αναγκαίουσ πόρουσ. public ImageLoader(Context context) filecache=new FileCache(context); executorservice=executors.newfixedthreadpool(5); Ζπειτα βρίςκουμε που κα αποκθκεφςουμε τισ εικόνεσ, το χϊρο που θ εφαρμογι μασ δεςμεφει ςτθ μνιμθ του κινθτοφ και φτιάχνουμε εκεί μζςα το φάκελο για τισ εικόνεσ. Στθ ςυνζχεια ανοίγουμε threads για να μποροφμε να πραγματοποιιςουμε όλεσ τισ εργαςίεσ που είναι απαραίτθτεσ. 45

int stub_id = android.r.drawable.ic_dialog_alert; public void DisplayImage(String url, int loader, ImageView imageview) stub_id = loader; imageviews.put(imageview, url); Bitmap bitmap=memorycache.get(url); if(bitmap!=null) imageview.setimagebitmap(bitmap); else queuephoto(url, imageview); imageview.setimageresource(loader); Φορτϊνουμε μία εικόνα stub_id ςε περίπτωςθ που δεν ανοίξει θ εικόνα που κζλουμε να εμφανιςτεί (π.χ. αν δε λειτουργεί ο ςφνδεςμοσ ςτον οποίο βρίςκεται). Ορίηουμε τθ προεπιλεγμζνθ κζςθ εμφάνιςθσ (imageview) και το ςφνδεςμό τθσ και δεςμεφουμε μνιμθ για αυτι ςτο hash table. Η setimagebitmap ορίηει ςτθ κζςθ εμφάνιςθσ ότι κα εμφανιςτεί εικόνα Bitmap θ μζκοδοσ αυτι υπάρχει ςτθ βιβλιοκικθ ImageView του android. private void queuephoto(string url, ImageView imageview) PhotoToLoad p=new PhotoToLoad(url, imageview); executorservice.submit(new PhotosLoader(p)); Η μζκοδοσ αυτι φροντίηει ϊςτε να γίνει θ φόρτωςθ τθσ εικόνασ. private class PhotoToLoad public String url; public ImageView imageview; public PhotoToLoad(String u, ImageView i) url=u; imageview=i; Ορίηουμε μία δομι που κα περιζχει το url και τθ κζςθ εμφάνιςθσ. class PhotosLoader implements Runnable PhotoToLoad phototoload; PhotosLoader(PhotoToLoad phototoload) this.phototoload=phototoload; @Override public void run() if(imageviewreused(phototoload)) 46

return; Bitmap bmp=getbitmap(phototoload.url); memorycache.put(phototoload.url, bmp); if(imageviewreused(phototoload)) return; BitmapDisplayer bd=new BitmapDisplayer(bmp, phototoload); Activity a=(activity)phototoload.imageview.getcontext(); a.runonuithread(bd); Παίρνουμε τθν εικόνα από το url και τθν αποκθκεφουμε ςτο hash table. Εδϊ κρίνουμε αν θ εικόνα κα χρειαςτεί επεξεργαςία πρωτοφ προςπακιςουμε να τθν εμφανίςουμε. Αν ναι θ επεξεργαςία γίνεται ςε κάποιο νιμα (thread) που ορίςαμε ςτθν αρχι. boolean imageviewreused(phototoload phototoload) String tag=imageviews.get(phototoload.imageview); if(tag==null!tag.equals(phototoload.url)) return true; return false; Ελζγχουμε αν περάςτθκε θ εικόνα πάνω από τθν εικόνα που είχαμε ορίςει πριν αρχίςει θ φόρτωςθ του url. public void clearcache() memorycache.clear(); filecache.clear(); Εδϊ κακαρίηουμε τθ μνιμθ για να μθν υπερφορτϊνεται θ μνιμθ τθσ εφαρμογισ κατά τθ διάρκεια περιιγθςθσ ςτα προφίλ των χρθςτϊν. private Bitmap getbitmap(string url) File f=filecache.getfile(url); //from SD cache Bitmap b = decodefile(f); if(b!=null) return b; //from web try Bitmap bitmap=null; URL imageurl = new URL(url); HttpURLConnection conn = (HttpURLConnection)imageUrl.openConnection(); conn.setconnecttimeout(30000); conn.setreadtimeout(30000); 47

conn.setinstancefollowredirects(true); InputStream is=conn.getinputstream(); OutputStream os = new FileOutputStream(f); CopyStream(is, os); os.close(); bitmap = decodefile(f); return bitmap; catch (Throwable ex) ex.printstacktrace(); if (ex instanceof OutOfMemoryError) memorycache.clear(); return null; Με αυτι τθ μζκοδο ανοίγουμε το url τθσ εικόνασ και κατεβάηουμε για πρϊτθ φορά τθν εικόνα ςτο κινθτό. Η παρακάτω μζκοδοσ τροποποιεί το μζγεκοσ τθσ εικόνασ ϊςτε να περιορίηεται θ δζςμευςθ μνιμθσ. private Bitmap decodefile(file f) try //decode image size BitmapFactory.Options o = new BitmapFactory.Options(); o.injustdecodebounds = true; BitmapFactory.decodeStream(new FileInputStream(f),null,o); //Find the correct scale value. It should be the power of 2. final int REQUIRED_SIZE=70; int width_tmp=o.outwidth, height_tmp=o.outheight; int scale=1; while(true) if(width_tmp/2<required_size height_tmp/2<required_size) break; width_tmp/=2; height_tmp/=2; scale*=2; o2); //decode with insamplesize BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.insamplesize=scale; return BitmapFactory.decodeStream(new FileInputStream(f), null, catch (FileNotFoundException e) return null; class BitmapDisplayer implements Runnable Bitmap bitmap; PhotoToLoad phototoload; 48

public BitmapDisplayer(Bitmap b, PhotoToLoad p) bitmap=b; phototoload=p; public void run() if(imageviewreused(phototoload)) return; if(bitmap!=null) phototoload.imageview.setimagebitmap(bitmap); else phototoload.imageview.setimageresource(stub_id); Εδϊ μετά τθ φόρτωςθ τθσ εικόνασ επιλζγουμε να τθ περάςουμε ι αν δεν ζχει ολοκλθρωκεί θ φόρτωςθ και θ μορφοποίθςθ τθσ να περαςτεί θ εικόνα που ζχουμε ορίςει να εμφανίηεται όςο αυτι φορτϊνεται (stub_id). Για τθν εμφάνιςθ τθσ λίςτασ επαφϊν ςτθ δεφτερθ επιλογι (εικόνα 14) δθμιουργικθκε θ κλάςθ ContactList θ οποία επεκτίνει τθ κλάςθ του android ListActivity. protected void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate); setcontentview(r.layout.activity_contact_list); ContactList= (ArrayList<Contact>) getintent().getserializableextra("contacts"); setlistadapter(new ContactListAdapter(this,ContactList)); @Override protected void onlistitemclick(listview l, View v, int position, long id) Ορίςαμε τθν μορφοποίθςθ του παράκυρου με τθ μζκοδο setcontentview από το αρχείο activity_contact_list. Τθ λίςτα τθ παραλάβαμε από το προθγοφμενο παράκυρο με τθ μζκοδο getintent. Τθ παρουςίαςθ τθσ λίςτασ ανακζςαμε ςε ζναν adapter. public class ContactListAdapter extends ArrayAdapter<Contact> private final List<Contact> objects; private final Context context; public ContactListAdapter(Context context,list<contact> objects) super(context,r.layout.contact_list, objects); 49

this.context=context; this.objects=objects; Ορίηουμε ςε ποιό παράκυρο κα εμφανιςτεί θ λίςτα και αποκθκεφουμε τισ μεταβλθτζσ που χρειαηόμαςτε. public View getview(int position, View convertview, ViewGroup parent) LayoutInflater inflater = (LayoutInflater) context.getsystemservice(context.layout_inflater_service); View rowview = inflater.inflate(r.layout.contact_list, parent, false); TextView nameview = (TextView)rowView.findViewById(R.id.contactFirstName); Contact u=objects.get(position); nameview.settext(" "+u.getfirstname()+" " +u.getlastname()); return rowview; Παραπάνω ορίηουμε τι κα περιζχει κάκε γραμμι τθσ λίςτασ. GroupsUI.java protected void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate); setcontentview(r.layout.groups_ui); String[] groups =getresources().getstringarray(r.array.groups_array); setlistadapter(new ArrayAdapter<String>(this, android.r.layout.simple_list_item_1,groups)); indlog=(industrylog) getintent().getserializableextra("log"); indlist=(hashmap<string, List<String>>)getIntent().getSerializableExtra("indList"); @Override for(int pass=0; pass<groups.length;pass++) String listitem=groups[pass]; if (indlist.containskey(listitem)) List<String> thislist=indlist.get(listitem) ; int counter=0; for(string temp: thislist) counter+=indlog.dosearchandget(temp).size(); String says=listitem+" "+"(" +Integer.toString(counter)+ ")" ; groups[pass]=says; 50

protected void onlistitemclick(listview l, View v, int position, long id) //get selected items pressed= (String) getlistadapter().getitem(position); String pressed1[]= pressed.split("\\("); pressed= pressed1[0]; pressed=pressed.trim(); Log.i("list test", "I Clicked on element " + pressed + " and it worked!"); Intent myintent = new Intent(getApplicationContext(),IndustriesUI.class); myintent.putextra("log", indlog); myintent.putextra("indlist", (Serializable)indList); myintent.putextra("pressed",pressed); startactivity(myintent); Για τθν εμφάνιςθ τθσ λίςτασ με τισ κατθγορίεσ αναςφρουμε τθ λίςτα από το styles.xml με τθ μζκοδο getresources().getstringarray(). Για να φαίνεται δίπλα ςτθ λίςτα ο αρικμόσ των ατόμων που ανικουν ςε αυτι μετράμε από το hash table indlog που είχαμε δθμιουργιςει ςτθν αρχι πόςοι ανικουν ςε κάκε επάγγελμα που ανικει ςε αυτι τθ κατθγορία. Οτάν πατθκεί κλίκ ςε κάποια κατθγορία ανοίγουμε καινοφργιο παράκυρο με τθ λίςτα των επαγγελμάτων που ανικουν ςτθ κατθγορία αυτι (IndustriesUI.class). Στθν IndustriesUI.java εμφανίηουμε τθ λίςτα με τα επαγγζλματα και δίπλα ςε κάκε όνομα τον αρικμό των επαφϊν που ανικουν ςτο επάγγελμα αυτό. Η διαδικαςία που ακολουκικθκε είναι ίδια με τθν παραπάνω. Ανάλογα με το ποιο κα πατθκεί δθμιουργείται ζνα νζο παράκυρο με τθ λίςτα των επαφϊν ονομαςτικά (IndustrycontactList.java). Με κλίκ πάνω ςε κάποια επαφι εμφανίηεται το προφίλ τθσ με τθ βοικεια τθσ κλάςθσ IndustryContact.java. Για να αποκτθκεί θ λίςτα με τισ επαφζσ ςτο τμιμα κατθγοριοποίθςθσ με βάςθ το επάγγελμα ζπρεπε να ηθτιςουμε παραπάνω πεδία από αυτά ςτθν επιλογι 2. Γιαυτό το λόγο δθμιουργιςαμε μία κλαςθ που κα ηθτοφςε τα δεδομζνα αυτά από το LinkedIn και αφοφ ζπαιρνε τθν απάντθςθ ςε μορφι xml κα τα πρόςκετε 51