SlideShare a Scribd company logo
1 of 65
Download to read offline
#APIsBerlin
Build the best apps
REINVENTING IDENTITY AND
SOCIAL GRAPHS WITH DIGITS
#APIsBerlin — April 24, 2015
ROMAIN HUET
Sr. Developer Advocate
@romainhuet
crashes spam identity dropped frames lag
performance threading memory leaks churn 

getting downloads driving installs revenue 

in-app-purchases revenue monetization user feedback
validation distribution support user accounts
testing graphics icons deep links localization
internationalization data storage persistence analytics
content interest graphs stability
crashes spam identity dropped frames lag
performance threading memory leaks churn 

getting downloads driving installs revenue 

in-app-purchases revenue monetization user feedback
validation distribution support user accounts
testing graphics icons deep links localization
internationalization data storage persistence analytics
content interest graphs stability
IDENTITY
STABILITY
DISTRIBUTION
REVENUE
Individuals Using the Internet, 2005-2014 (ITU)People(Millions)
0
750
1500
2250
3000
2005 2006 2007 2008 2009 2010 2011 2012 2013 2014
Internet Users
150M
150M
190M
630M
US
EUROPE
ASIA
LATAM
120M
MENA
940M
Sign in with
@romainhuetRomain Huet
Twitter, Inc.
Sr. Developer Advocate
romain@twitter.com
+49 173 0001337+49 173 0001337
@romainhuetRomain Huet
Twitter, Inc.
Sr. Developer Advocate
romain@twitter.com
+49 173 0001337
+49 173 0001337
SMS API SMS Aggregator
$
SMS API SMS Aggregator
SMS API SMS Aggregator
¥$
SMS API
SMS API
SMS API SMS Aggregator
SMS API SMS Aggregator
¥$
£
¥$
€£
SMS API SMS Aggregator
SMS API SMS Aggregator
SMS API SMS Aggregator
COST PER MILLION VERIFICATIONS
Brazil $50,000
United Kingdom $33,000
Germany $60,000
Saudi Arabia $20,000
United States $5,000
POWERED BY
INITIALIZE FABRIC
import Fabric
import TwitterKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(application: UIApplication!,
didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
}
}
Fabric.with([Twitter()])
return true
INVOKE DIGITS
import TwitterKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
let authenticateButton = DGTAuthenticateButton(authenticationCompletion: {
(session: DGTSession!, error: NSError!) in
// Store the Digits session in your backend.
})
authenticateButton.center = self.view.center
self.view.addSubview(authenticateButton)
DIGITS SESSION
let button = DGTAuthenticateButton { (session, error) in
if session != nil {
}
}
println(session.userID)
// “2834242790”
println(session.authToken)
// “2834242790-5gsoS8ABHybf7SfsWgPXhqmDet843uleJM8hsVa”
println(session.authTokenSecret)
// “xLDdKyEc1SQDrtyobMWZ14dbnL224e4PKxAeGPu4Ibzew”
println(session.phoneNumber)
// “+491730001337”
EXTEND YOUR PROFILES
digitsUserID name profilePic
29384805 … …
23028702 … …
29484500 … …
29390084 … …
USE YOUR OWN BUTTON
import TwitterKit
class ViewController: UIViewController {
@IBAction func didTapButton(sender: AnyObject) {
}
}
Digits.sharedInstance().authenticateWithCompletion { (session, error) in
// Inspect the Digits session/error objects.
}
THEME YOUR DIGITS EXPERIENCE
import TwitterKit
class ViewController: UIViewController {
@IBAction func didTapButton(sender: AnyObject) {
}
}
let digitsAppearance = DGTAppearance()
digitsAppearance.backgroundColor = UIColor.blackColor()
digitsAppearance.accentColor = UIColor.greenColor()
Digits.sharedInstance().authenticateWithDigitsAppearance(digitsAppearance,
viewController: nil, title: nil) { (session, error) in
// Inspect the Digits session/error objects.
}
DEMO
#APIsBerlin
ADD DIGITS TO YOUR WEB APP
<!DOCTYPE html>
<html>
<head>
<title>Welcome to Cannonball</title>
<meta charset="UTF-8">
</head>
<body>
<button id="digits-btn">Sign In with Phone</button>
<script id="digits-sdk" src="https://cdn.digits.com/1/sdk.js" async></script>
</body>
</html>
ADD DIGITS TO YOUR WEB APP
<script>
document.getElementById('digits-sdk').onload = function() {
};
</script>
// Set a click event listener on the button.
document.getElementById('digits-btn').addEventListener("click", onLoginButtonClick);
// Implement the login button callback and handle the response.
function onLoginButtonClick() {
Digits.logIn().done(onLogin).fail(onLoginFailure);
}
// Initialize Digits and check if the user is already logged into Digits.
Digits.init({ consumerKey: "o0gzicSS27GgtEJsu7wT442SG" }).done(function() {
Digits.getLoginStatus().done(onLoginStatus);
});
VERIFY A DIGITS TOKEN & RETRIEVE USER INFO
// Parse the OAuth Echo headers.
var oAuthEchoHeaders = loginResponse.oauth_echo_headers;
var verifyData = {
credentials: oAuthEchoHeaders['X-Verify-Credentials-Authorization'],
apiUrl: oAuthEchoHeaders['X-Auth-Service-Provider']
};
// Post this data and from your server, securely request over SSL

// the user information including the phone number.
$.post('/verify', verifyData).done(function() {
// Update the user interface with user information.
});
<script>
// Validate the authentication and sign the user in.
function onLogin(loginResponse) {
}
</script>
216countries
28languages
216 28
freefree
POWERED BY
WHAT’S NEW?
1530531-0k4UA
v5fyP1zVNFvtT
LGSzjnVHuCKc
K3xEZ0MNKX8i
FIND FRIENDS
// Initialize the Find Friends button from the view.
findFriendsButton = (Button) findViewById(R.id.find_your_friends_button);
// Set a listener on the Find Friends button.
findFriendsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Start uploading the Address Book.
Digits.getInstance().getContactsClient().startContactsUpload();
}
});
FIND FRIENDS
// Retrieve the contact matches.
Digits.getInstance().getContactsClient().lookupContactMatches(null, null,
new ContactsCallback<Contacts>() {
});
@Override
public void success(Result<Contacts> result) {
if (result.data.users != null) {
// Process contacts data.
}
}
@Override
public void failure(TwitterException exception) {
// Show error.
}
WHAT’S NEW?
As we continue to grow internationally, Digits
is extremely helpful. Many of our customers
prefer to verify their accounts via phone, so
Digits is the easiest solution for them and us.”
“
- Sean Smith,

Senior Director, Client Engineering, Rdio
Grow Faster
Thank You

More Related Content

Similar to Reinventing Identity and Social Graphs with Digits

Appcelerator iPhone/iPad Dev Con 2010 San Diego, CA
Appcelerator iPhone/iPad Dev Con 2010 San Diego, CAAppcelerator iPhone/iPad Dev Con 2010 San Diego, CA
Appcelerator iPhone/iPad Dev Con 2010 San Diego, CAJeff Haynie
 
Mountain View July JavaScript Meetup at Google
Mountain View July JavaScript Meetup at GoogleMountain View July JavaScript Meetup at Google
Mountain View July JavaScript Meetup at GoogleJeff Haynie
 
Bootstrapping an App for Launch
Bootstrapping an App for LaunchBootstrapping an App for Launch
Bootstrapping an App for LaunchCraig Phares
 
Accessiblity 101 and JavaScript Frameworks
Accessiblity 101 and JavaScript Frameworks Accessiblity 101 and JavaScript Frameworks
Accessiblity 101 and JavaScript Frameworks Aimee Maree Forsstrom
 
HackPR at UPR in Mayaguez - September 2015
HackPR at UPR in Mayaguez - September 2015HackPR at UPR in Mayaguez - September 2015
HackPR at UPR in Mayaguez - September 2015Jonathan Bulava
 
Creating Datadipity
Creating DatadipityCreating Datadipity
Creating DatadipityClickslide
 
Benvenuti nella “API Economy”
Benvenuti nella “API Economy”Benvenuti nella “API Economy”
Benvenuti nella “API Economy”Codemotion
 
You Had Me at Hello: How Ulta Beauty Guests Benefit From Real-time Capabilities
You Had Me at Hello: How Ulta Beauty Guests Benefit From Real-time CapabilitiesYou Had Me at Hello: How Ulta Beauty Guests Benefit From Real-time Capabilities
You Had Me at Hello: How Ulta Beauty Guests Benefit From Real-time CapabilitiesTIBCO Software
 
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015Innomatic Platform
 
Solving Enteprise Mobility Considerations with Telerik Mobile Platform
Solving Enteprise Mobility Considerations with Telerik Mobile PlatformSolving Enteprise Mobility Considerations with Telerik Mobile Platform
Solving Enteprise Mobility Considerations with Telerik Mobile PlatformLohith Goudagere Nagaraj
 
Services, Apps and the API Powered Web
Services, Apps and the API Powered WebServices, Apps and the API Powered Web
Services, Apps and the API Powered WebSteven Willmott
 
Marketing in an API Environment Part 1 of 2
Marketing in an API Environment Part 1 of 2Marketing in an API Environment Part 1 of 2
Marketing in an API Environment Part 1 of 2Lori Fisher
 
An api is not "yet another feature"
An api is not "yet another feature"An api is not "yet another feature"
An api is not "yet another feature"Shay Weiner
 
Write once, ship multiple times
Write once, ship multiple timesWrite once, ship multiple times
Write once, ship multiple timesŽeljko Plesac
 
Using API platform to build ticketing system (translations, time zones, ...) ...
Using API platform to build ticketing system (translations, time zones, ...) ...Using API platform to build ticketing system (translations, time zones, ...) ...
Using API platform to build ticketing system (translations, time zones, ...) ...Antonio Peric-Mazar
 
AI and Machine Learning for Testers
AI and Machine Learning for TestersAI and Machine Learning for Testers
AI and Machine Learning for TestersTechWell
 
2016-Mar-03 Leppitsch in Auckland meetup
2016-Mar-03 Leppitsch in Auckland meetup2016-Mar-03 Leppitsch in Auckland meetup
2016-Mar-03 Leppitsch in Auckland meetupMichael Leppitsch
 
Take Mobile and Web Apps to the Next Level with AWS AppSync and AWS Amplify
Take Mobile and Web Apps to the Next Level with AWS AppSync and AWS AmplifyTake Mobile and Web Apps to the Next Level with AWS AppSync and AWS Amplify
Take Mobile and Web Apps to the Next Level with AWS AppSync and AWS AmplifyAmazon Web Services
 
Progetta, crea e gestisci Modern Application per web e mobile su AWS
Progetta, crea e gestisci Modern Application per web e mobile su AWSProgetta, crea e gestisci Modern Application per web e mobile su AWS
Progetta, crea e gestisci Modern Application per web e mobile su AWSAmazon Web Services
 

Similar to Reinventing Identity and Social Graphs with Digits (20)

Appcelerator iPhone/iPad Dev Con 2010 San Diego, CA
Appcelerator iPhone/iPad Dev Con 2010 San Diego, CAAppcelerator iPhone/iPad Dev Con 2010 San Diego, CA
Appcelerator iPhone/iPad Dev Con 2010 San Diego, CA
 
Mountain View July JavaScript Meetup at Google
Mountain View July JavaScript Meetup at GoogleMountain View July JavaScript Meetup at Google
Mountain View July JavaScript Meetup at Google
 
Bootstrapping an App for Launch
Bootstrapping an App for LaunchBootstrapping an App for Launch
Bootstrapping an App for Launch
 
Accessiblity 101 and JavaScript Frameworks
Accessiblity 101 and JavaScript Frameworks Accessiblity 101 and JavaScript Frameworks
Accessiblity 101 and JavaScript Frameworks
 
HackPR at UPR in Mayaguez - September 2015
HackPR at UPR in Mayaguez - September 2015HackPR at UPR in Mayaguez - September 2015
HackPR at UPR in Mayaguez - September 2015
 
Creating Datadipity
Creating DatadipityCreating Datadipity
Creating Datadipity
 
Benvenuti nella “API Economy”
Benvenuti nella “API Economy”Benvenuti nella “API Economy”
Benvenuti nella “API Economy”
 
You Had Me at Hello: How Ulta Beauty Guests Benefit From Real-time Capabilities
You Had Me at Hello: How Ulta Beauty Guests Benefit From Real-time CapabilitiesYou Had Me at Hello: How Ulta Beauty Guests Benefit From Real-time Capabilities
You Had Me at Hello: How Ulta Beauty Guests Benefit From Real-time Capabilities
 
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
 
Solving Enteprise Mobility Considerations with Telerik Mobile Platform
Solving Enteprise Mobility Considerations with Telerik Mobile PlatformSolving Enteprise Mobility Considerations with Telerik Mobile Platform
Solving Enteprise Mobility Considerations with Telerik Mobile Platform
 
Services, Apps and the API Powered Web
Services, Apps and the API Powered WebServices, Apps and the API Powered Web
Services, Apps and the API Powered Web
 
Marketing in an API Environment Part 1 of 2
Marketing in an API Environment Part 1 of 2Marketing in an API Environment Part 1 of 2
Marketing in an API Environment Part 1 of 2
 
An api is not "yet another feature"
An api is not "yet another feature"An api is not "yet another feature"
An api is not "yet another feature"
 
Write once, ship multiple times
Write once, ship multiple timesWrite once, ship multiple times
Write once, ship multiple times
 
Force Platform
Force PlatformForce Platform
Force Platform
 
Using API platform to build ticketing system (translations, time zones, ...) ...
Using API platform to build ticketing system (translations, time zones, ...) ...Using API platform to build ticketing system (translations, time zones, ...) ...
Using API platform to build ticketing system (translations, time zones, ...) ...
 
AI and Machine Learning for Testers
AI and Machine Learning for TestersAI and Machine Learning for Testers
AI and Machine Learning for Testers
 
2016-Mar-03 Leppitsch in Auckland meetup
2016-Mar-03 Leppitsch in Auckland meetup2016-Mar-03 Leppitsch in Auckland meetup
2016-Mar-03 Leppitsch in Auckland meetup
 
Take Mobile and Web Apps to the Next Level with AWS AppSync and AWS Amplify
Take Mobile and Web Apps to the Next Level with AWS AppSync and AWS AmplifyTake Mobile and Web Apps to the Next Level with AWS AppSync and AWS Amplify
Take Mobile and Web Apps to the Next Level with AWS AppSync and AWS Amplify
 
Progetta, crea e gestisci Modern Application per web e mobile su AWS
Progetta, crea e gestisci Modern Application per web e mobile su AWSProgetta, crea e gestisci Modern Application per web e mobile su AWS
Progetta, crea e gestisci Modern Application per web e mobile su AWS
 

More from Romain Huet

#TwitterFlight: Connecting to the Pulse of the Planet
#TwitterFlight: Connecting to the Pulse of the Planet#TwitterFlight: Connecting to the Pulse of the Planet
#TwitterFlight: Connecting to the Pulse of the PlanetRomain Huet
 
Combining Signals with Context in the Internet of Things
Combining Signals with Context in the Internet of ThingsCombining Signals with Context in the Internet of Things
Combining Signals with Context in the Internet of ThingsRomain Huet
 
Twitter APIs: Se Connecter au Pouls de la Planète
Twitter APIs: Se Connecter au Pouls de la PlanèteTwitter APIs: Se Connecter au Pouls de la Planète
Twitter APIs: Se Connecter au Pouls de la PlanèteRomain Huet
 
Living in the Mobile Future
Living in the Mobile FutureLiving in the Mobile Future
Living in the Mobile FutureRomain Huet
 
Twitter APIs: Connecting to the Pulse of the Planet
Twitter APIs: Connecting to the Pulse of the PlanetTwitter APIs: Connecting to the Pulse of the Planet
Twitter APIs: Connecting to the Pulse of the PlanetRomain Huet
 
JavaScript, Node, and Drones: The Story of NodeCopter
JavaScript, Node, and Drones: The Story of NodeCopterJavaScript, Node, and Drones: The Story of NodeCopter
JavaScript, Node, and Drones: The Story of NodeCopterRomain Huet
 
Building a Desktop for the Cloud
Building a Desktop for the CloudBuilding a Desktop for the Cloud
Building a Desktop for the CloudRomain Huet
 

More from Romain Huet (7)

#TwitterFlight: Connecting to the Pulse of the Planet
#TwitterFlight: Connecting to the Pulse of the Planet#TwitterFlight: Connecting to the Pulse of the Planet
#TwitterFlight: Connecting to the Pulse of the Planet
 
Combining Signals with Context in the Internet of Things
Combining Signals with Context in the Internet of ThingsCombining Signals with Context in the Internet of Things
Combining Signals with Context in the Internet of Things
 
Twitter APIs: Se Connecter au Pouls de la Planète
Twitter APIs: Se Connecter au Pouls de la PlanèteTwitter APIs: Se Connecter au Pouls de la Planète
Twitter APIs: Se Connecter au Pouls de la Planète
 
Living in the Mobile Future
Living in the Mobile FutureLiving in the Mobile Future
Living in the Mobile Future
 
Twitter APIs: Connecting to the Pulse of the Planet
Twitter APIs: Connecting to the Pulse of the PlanetTwitter APIs: Connecting to the Pulse of the Planet
Twitter APIs: Connecting to the Pulse of the Planet
 
JavaScript, Node, and Drones: The Story of NodeCopter
JavaScript, Node, and Drones: The Story of NodeCopterJavaScript, Node, and Drones: The Story of NodeCopter
JavaScript, Node, and Drones: The Story of NodeCopter
 
Building a Desktop for the Cloud
Building a Desktop for the CloudBuilding a Desktop for the Cloud
Building a Desktop for the Cloud
 

Recently uploaded

The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 

Recently uploaded (20)

The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 

Reinventing Identity and Social Graphs with Digits

  • 2. REINVENTING IDENTITY AND SOCIAL GRAPHS WITH DIGITS #APIsBerlin — April 24, 2015
  • 3. ROMAIN HUET Sr. Developer Advocate @romainhuet
  • 4. crashes spam identity dropped frames lag performance threading memory leaks churn 
 getting downloads driving installs revenue 
 in-app-purchases revenue monetization user feedback validation distribution support user accounts testing graphics icons deep links localization internationalization data storage persistence analytics content interest graphs stability
  • 5. crashes spam identity dropped frames lag performance threading memory leaks churn 
 getting downloads driving installs revenue 
 in-app-purchases revenue monetization user feedback validation distribution support user accounts testing graphics icons deep links localization internationalization data storage persistence analytics content interest graphs stability
  • 6.
  • 7.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16. Individuals Using the Internet, 2005-2014 (ITU)People(Millions) 0 750 1500 2250 3000 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 Internet Users
  • 19. @romainhuetRomain Huet Twitter, Inc. Sr. Developer Advocate romain@twitter.com +49 173 0001337+49 173 0001337
  • 20. @romainhuetRomain Huet Twitter, Inc. Sr. Developer Advocate romain@twitter.com +49 173 0001337 +49 173 0001337
  • 21.
  • 22.
  • 23.
  • 24. SMS API SMS Aggregator $
  • 25. SMS API SMS Aggregator SMS API SMS Aggregator ¥$
  • 27. SMS API SMS Aggregator SMS API SMS Aggregator ¥$ £
  • 28. ¥$ €£ SMS API SMS Aggregator SMS API SMS Aggregator SMS API SMS Aggregator
  • 29. COST PER MILLION VERIFICATIONS Brazil $50,000 United Kingdom $33,000 Germany $60,000 Saudi Arabia $20,000 United States $5,000
  • 30.
  • 32.
  • 33.
  • 34.
  • 35. INITIALIZE FABRIC import Fabric import TwitterKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool { } } Fabric.with([Twitter()]) return true
  • 36. INVOKE DIGITS import TwitterKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() } } let authenticateButton = DGTAuthenticateButton(authenticationCompletion: { (session: DGTSession!, error: NSError!) in // Store the Digits session in your backend. }) authenticateButton.center = self.view.center self.view.addSubview(authenticateButton)
  • 37. DIGITS SESSION let button = DGTAuthenticateButton { (session, error) in if session != nil { } } println(session.userID) // “2834242790” println(session.authToken) // “2834242790-5gsoS8ABHybf7SfsWgPXhqmDet843uleJM8hsVa” println(session.authTokenSecret) // “xLDdKyEc1SQDrtyobMWZ14dbnL224e4PKxAeGPu4Ibzew” println(session.phoneNumber) // “+491730001337”
  • 38. EXTEND YOUR PROFILES digitsUserID name profilePic 29384805 … … 23028702 … … 29484500 … … 29390084 … …
  • 39.
  • 40. USE YOUR OWN BUTTON import TwitterKit class ViewController: UIViewController { @IBAction func didTapButton(sender: AnyObject) { } } Digits.sharedInstance().authenticateWithCompletion { (session, error) in // Inspect the Digits session/error objects. }
  • 41. THEME YOUR DIGITS EXPERIENCE import TwitterKit class ViewController: UIViewController { @IBAction func didTapButton(sender: AnyObject) { } } let digitsAppearance = DGTAppearance() digitsAppearance.backgroundColor = UIColor.blackColor() digitsAppearance.accentColor = UIColor.greenColor() Digits.sharedInstance().authenticateWithDigitsAppearance(digitsAppearance, viewController: nil, title: nil) { (session, error) in // Inspect the Digits session/error objects. }
  • 42.
  • 43.
  • 45. ADD DIGITS TO YOUR WEB APP <!DOCTYPE html> <html> <head> <title>Welcome to Cannonball</title> <meta charset="UTF-8"> </head> <body> <button id="digits-btn">Sign In with Phone</button> <script id="digits-sdk" src="https://cdn.digits.com/1/sdk.js" async></script> </body> </html>
  • 46. ADD DIGITS TO YOUR WEB APP <script> document.getElementById('digits-sdk').onload = function() { }; </script> // Set a click event listener on the button. document.getElementById('digits-btn').addEventListener("click", onLoginButtonClick); // Implement the login button callback and handle the response. function onLoginButtonClick() { Digits.logIn().done(onLogin).fail(onLoginFailure); } // Initialize Digits and check if the user is already logged into Digits. Digits.init({ consumerKey: "o0gzicSS27GgtEJsu7wT442SG" }).done(function() { Digits.getLoginStatus().done(onLoginStatus); });
  • 47. VERIFY A DIGITS TOKEN & RETRIEVE USER INFO // Parse the OAuth Echo headers. var oAuthEchoHeaders = loginResponse.oauth_echo_headers; var verifyData = { credentials: oAuthEchoHeaders['X-Verify-Credentials-Authorization'], apiUrl: oAuthEchoHeaders['X-Auth-Service-Provider'] }; // Post this data and from your server, securely request over SSL
 // the user information including the phone number. $.post('/verify', verifyData).done(function() { // Update the user interface with user information. }); <script> // Validate the authentication and sign the user in. function onLogin(loginResponse) { } </script>
  • 52.
  • 53.
  • 55.
  • 56.
  • 57.
  • 58. FIND FRIENDS // Initialize the Find Friends button from the view. findFriendsButton = (Button) findViewById(R.id.find_your_friends_button); // Set a listener on the Find Friends button. findFriendsButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // Start uploading the Address Book. Digits.getInstance().getContactsClient().startContactsUpload(); } });
  • 59. FIND FRIENDS // Retrieve the contact matches. Digits.getInstance().getContactsClient().lookupContactMatches(null, null, new ContactsCallback<Contacts>() { }); @Override public void success(Result<Contacts> result) { if (result.data.users != null) { // Process contacts data. } } @Override public void failure(TwitterException exception) { // Show error. }
  • 61. As we continue to grow internationally, Digits is extremely helpful. Many of our customers prefer to verify their accounts via phone, so Digits is the easiest solution for them and us.” “ - Sean Smith,
 Senior Director, Client Engineering, Rdio
  • 62.
  • 64.