SlideShare a Scribd company logo
START BUILDING NATIVE MOBILE APPS
FOR SHAREPOINT
March 12, 2016
Yaroslav Pentsarskyy
sharemuch.com
2
• SharePoint Architect
• Microsoft MVP
• Blogger
• Writer
Who is this guy?
Why are we here?
Why are we here?
What’s wrong
with this picture?
Why are we here?
Does your meeting
ever look like this?
Why are we here?
Or is it more like …
Why are we here?
Or is it more like …
Why are we here?
Or this …
Why are we here?
Our goal today:
• Explore SharePoint integration with
mobile platforms
• Get some samples
• Look at mobile use cases in your
business
What are we building today
What are we building today
What are we building today
What are we building today
What are we building today
What are we building today
SharePoi
nt excites
me!
 Office 365 Developer Site
 That’s where files will be stored so that’s obvious
 Set up a development environment for SharePoint Add-ins on
Office 365: https://msdn.microsoft.com/en-
us/library/office/fp179924.aspx#o365_signup
 Windows Azure
 This is going to be used for authentication to Office
365
 Azure trial: https://azure.microsoft.com/en-us/pricing/free-trial/
 Visual Studio and Xamarin
 This is what we’re going to be using to build Android
app with C# and .NET
Tools
 Xamarin
 Build for Android and iOS using one tool
 Use your existing knowledge of Visual Studio
 Use .NET framework and C#
 Has been recently acquired by MS, so more support and
integration is coming, hopefully
 More MS integration samples:
https://developer.xamarin.com/samples-all/
 Native tool
 Learn new toolset (for example Android Studio)
 Learn language: objective C or Java
 Less dependency on a middle man
 More platform specific community support
Xamarin vs. platform specific tool
 CameraAppDemo
 https://github.com/xamarin/monodroid-
samples/tree/master/CameraAppDemo
Sample Xamarin App
What does our sample app do?
Step 1.1 – Adding O365 to our
Sample Project
• Right click on the Project
name in Visual Studio ->
• Add ->
• Connected Service …
Step 1.2 – What’s our SPO tenant
URL?
• Don’t have one?
• Spin up a test one,
search for “Set up a
development
environment for
SharePoint Add-ins
on Office 365”
Step 1.3 – Create new azure
“application”
• SharePoint Online uses
Azure to handle
authentication.
• Azure takes care of
authentication and creates
a token.
• SPO consumes that token
and hopefully authorizes
the user if they have
access to the site
Step 1.4 – We’ll need to ask users
for these permissions
• Not only the user must
consent to giving these
permissions to our app,
they obviously need to be
granted those in
SharePoint Online ….
otherwise we’re gonna
have a case of “writing
checks we can’t cash”
Step 1.5 – wait while Visual Studio
adds required libraries to our project
• Curious fact!
• This inflates our
project from few KB
to … oh well, ~80
MB
Step 2 – Add some C#
Step 2 – Add some C#
Adding Code to Create List Items
in SPO
private static async Task<string> GetFormDigest(string siteURL, string accessToken)
{
//Get the form digest value in order to write data
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(
HttpMethod.Post, siteURL + "/_api/contextinfo");
request.Headers.Accept.Add(new
MediaTypeWithQualityHeaderValue("application/xml"));
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer",
accessToken);
HttpResponseMessage response = await client.SendAsync(request);
string responseString = await response.Content.ReadAsStringAsync();
XNamespace d = "http://schemas.microsoft.com/ado/2007/08/dataservices";
var root = XElement.Parse(responseString);
var formDigestValue = root.Element(d + "FormDigestValue").Value;
Adding Code to Create List Items
in SPO … cont.
public static async Task<string> AddListItem(string title, string siteURL, string accessToken, string filePath)
{
string requestUrl = siteURL + "/_api/Web/Lists/GetByTitle('TestList')/Items";
var formDigest = await GetFormDigest(siteURL, accessToken);
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Accept", "application/json;odata=verbose");
HttpRequestMessage request =
new HttpRequestMessage(HttpMethod.Post, requestUrl);
request.Headers.Authorization =
new AuthenticationHeaderValue("Bearer", accessToken);
// Note that the form digest is not needed for bearer authentication. This can
//safely be removed, but left here for posterity.
request.Headers.Add("X-RequestDigest", formDigest);
var requestContent = new StringContent(
"{ '__metadata': { 'type': 'SP.Data.TestListListItem' }, 'Title': '" + title + "'}");
requestContent.Headers.ContentType =
System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json;odata=verbose");
request.Content = requestContent;
HttpResponseMessage response = await client.SendAsync(request);
if (response.IsSuccessStatusCode)
{
string responseString = await response.Content.ReadAsStringAsync();
JsonObject d = (JsonObject)JsonValue.Parse(responseString);
JsonObject results = (JsonObject)d["d"];
JsonValue newItemId = (JsonValue)results["ID"];
var endpointUrl = string.Format("{0}({1})/AttachmentFiles/add(FileName='{2}')", requestUrl, newItemId.ToString(), App._file.Name);
using (var stream = System.IO.File.OpenRead(filePath))
{
HttpContent file = new StreamContent(stream);
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
var resp = await client.PostAsync(endpointUrl, file);
}
return responseString;
}
return (null);
}
References
using System.Threading.Tasks;
using System.Net.Http; //Reference System.Net.Http.dll
using System.Net.Http.Headers;
using System.Xml.Linq; //Reference System.Xml.Linq.dll
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using System.Json;
References
using Microsoft.IdentityModel.Clients.ActiveDirectory; //Reference NuGet
package
References
using Microsoft.IdentityModel.Clients.ActiveDirectory; //Reference NuGet
package
References
Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory
-Version 3.0.110281957-alpha -Pre
Adding Authentication Helper
using System.Linq;
using Android.App;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using System.Threading.Tasks;
namespace CameraAppDemo
{
public class AuthenticationHelper
{
public const string Authority = "https://login.windows.net/common";
public static System.Uri returnUri = new System.Uri("http://cameraappdemo.cameraappdemo/");
public static string clientId = "0f0ff4eb-b28a-48ec-88c0-1bcd50ae381b";
public static AuthenticationContext authContext = null;
public static async Task<AuthenticationResult> GetAccessToken
(string serviceResourceId, Activity activity)
{
authContext = new AuthenticationContext(Authority);
if (authContext.TokenCache.ReadItems().Count() > 0)
authContext = new AuthenticationContext(authContext.TokenCache.ReadItems().First().Authority);
var authResult = await authContext.AcquireTokenAsync(serviceResourceId, clientId, returnUri, new
AuthorizationParameters(activity));
return authResult;
}
}
Referencing Authentication Helper
internal async void Login(object sender, EventArgs eventArgs)
{
App.authResult = await
AuthenticationHelper.GetAccessToken("https://sharemuch.sharepoint.com/",
this);
}
Adding a login button
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
if (IsThereAnAppToTakePictures())
{
CreateDirectoryForPictures();
Button login = FindViewById<Button>(Resource.Id.myButton1);
login.Click += Login;
Button button = FindViewById<Button>(Resource.Id.myButton);
_imageView =
FindViewById<ImageView>(Resource.Id.imageView1);
button.Click += TakeAPicture;
}
Final touches - kindof
protected override async void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (App.authResult == null)
{
AuthenticationAgentContinuationHelper.
SetAuthenticationAgentContinuationEventArgs(requestCode, resultCode, data);
}
// Make it available in the gallery
Intent mediaScanIntent = new Intent(Intent.ActionMediaScannerScanFile);
if (App._file != null)
{
…..
// Dispose of the Java side bitmap.
GC.Collect();
if (App.authResult != null)
{
await AddListItem("TestItem", "https://sharemuch.sharepoint.com/sites/demo", App.authResult.AccessToken,
App._file.AbsolutePath);
}
}
}
Running our app
Running our app
Running our app
• Wait, what?
Running our app
Azure config – create new dir
Azure config – add an application
Azure config – add an application
Azure config – Copy New ID
Azure config – permissions
What happens Between Azure
and O365 – 1 & 2
Register your app in the
Azure Management
Portal and configure the
app's code with the client
Id and redirect URI.
Then, in the Azure
Management Portal,
configure the
permissions for the app.
Your app gets the user's
email address. It
contacts Discovery
Service with email
address and the set of
scopes the app wants to
What happens Between Azure
and O365 - 3
The app goes to the
Azure AD authorization
endpoint and the user
authenticates and grants
consent (if consent has
not been granted
before). Azure AD issues
an authorization code.
What happens Between Azure
and O365 - 4
Your app redeems the
authorization code.
Azure returns an access
token and a refresh
token.
What happens Between Azure
and O365 - 5
Your app calls Discovery
Service using the access
token. Discovery Service
returns Http Response
with resource IDs and
endpoint URIs for Office
365 services.
What happens Between Azure
and O365 - 6
Your app redeems the
refresh token with Azure
AD token endpoint, to
get the access token for
the desired Office 365
resource. The Azure AD
token endpoint returns
an access token for the
specified resource and a
refresh token.
What happens Between Azure
and O365 - 7
Your app can now call
Office 365 APIs using the
URI from Discovery
Service and the access
token. Office 365 returns
Http Response.
* Office 365 APIs: How to use Discovery Service
https://code.msdn.microsoft.com/Office-365-APIs-How-to-
use-609102ea
Questions?

More Related Content

What's hot

ECS19 - John White - Unlock SharePoint’s Reporting Secrets
ECS19 - John White - Unlock SharePoint’s Reporting SecretsECS19 - John White - Unlock SharePoint’s Reporting Secrets
ECS19 - John White - Unlock SharePoint’s Reporting Secrets
European Collaboration Summit
 
Designing for SharePoint Provider Hosted Apps
Designing for SharePoint Provider Hosted AppsDesigning for SharePoint Provider Hosted Apps
Designing for SharePoint Provider Hosted Apps
Roy Kim
 
Chris OBrien - Weaving Enterprise Solutions into Office Products
Chris OBrien - Weaving Enterprise Solutions into Office ProductsChris OBrien - Weaving Enterprise Solutions into Office Products
Chris OBrien - Weaving Enterprise Solutions into Office Products
Chris O'Brien
 
Developer’s Independence Day: Introducing the SharePoint App Model
Developer’s Independence Day:Introducing the SharePoint App ModelDeveloper’s Independence Day:Introducing the SharePoint App Model
Developer’s Independence Day: Introducing the SharePoint App Model
bgerman
 
Building SharePoint 2013 Apps - Architecture, Authentication & Connectivity API
Building SharePoint 2013 Apps - Architecture, Authentication & Connectivity APIBuilding SharePoint 2013 Apps - Architecture, Authentication & Connectivity API
Building SharePoint 2013 Apps - Architecture, Authentication & Connectivity APISharePointRadi
 
SharePoint 2013 apps overview
SharePoint 2013 apps overviewSharePoint 2013 apps overview
SharePoint 2013 apps overview
Elie Kash
 
SharePoint 2013 Sneak Peek
SharePoint 2013 Sneak PeekSharePoint 2013 Sneak Peek
SharePoint 2013 Sneak Peek
Shailen Sukul
 
Hard learned CSOM and REST tips
Hard learned CSOM and REST tipsHard learned CSOM and REST tips
Hard learned CSOM and REST tips
SPC Adriatics
 
SharePoint 2013 App Provisioning Models
SharePoint 2013 App Provisioning ModelsSharePoint 2013 App Provisioning Models
SharePoint 2013 App Provisioning Models
Shailen Sukul
 
CSOM (Client Side Object Model). Explained @ SharePoint Saturday Houston
CSOM (Client Side Object Model). Explained @ SharePoint Saturday HoustonCSOM (Client Side Object Model). Explained @ SharePoint Saturday Houston
CSOM (Client Side Object Model). Explained @ SharePoint Saturday Houston
Kunaal Kapoor
 
SharePoint 2013 “App Model” Developing and Deploying Provider Hosted Apps
SharePoint 2013 “App Model” Developing and Deploying Provider Hosted AppsSharePoint 2013 “App Model” Developing and Deploying Provider Hosted Apps
SharePoint 2013 “App Model” Developing and Deploying Provider Hosted AppsSanjay Patel
 
Share point 2013 - Javascript Object Model
Share point 2013 - Javascript Object ModelShare point 2013 - Javascript Object Model
Share point 2013 - Javascript Object Model
Muawiyah Shannak
 
SharePoint 2016 Hybrid Overview
SharePoint 2016 Hybrid OverviewSharePoint 2016 Hybrid Overview
SharePoint 2016 Hybrid Overview
Roy Kim
 
Developing Apps for SharePoint Store
Developing Apps for SharePoint StoreDeveloping Apps for SharePoint Store
Developing Apps for SharePoint Store
Kashif Imran
 
Chris O'Brien - Modern SharePoint sites and the SharePoint Framework - reference
Chris O'Brien - Modern SharePoint sites and the SharePoint Framework - referenceChris O'Brien - Modern SharePoint sites and the SharePoint Framework - reference
Chris O'Brien - Modern SharePoint sites and the SharePoint Framework - reference
Chris O'Brien
 
2014 09-20 - SPSNJ - Worst Practices of SharePoint
2014 09-20 - SPSNJ - Worst Practices of SharePoint2014 09-20 - SPSNJ - Worst Practices of SharePoint
2014 09-20 - SPSNJ - Worst Practices of SharePoint
Dan Usher
 
[Vochten/Harbar] SharePoint Server On Premises & Hybrid PowerClass
[Vochten/Harbar] SharePoint Server On Premises & Hybrid PowerClass[Vochten/Harbar] SharePoint Server On Premises & Hybrid PowerClass
[Vochten/Harbar] SharePoint Server On Premises & Hybrid PowerClass
European Collaboration Summit
 
SharePoint REST vs CSOM
SharePoint REST vs CSOMSharePoint REST vs CSOM
SharePoint REST vs CSOM
Mark Rackley
 
SharePoint and Azure - A Match Made in the Clouds
SharePoint and Azure - A Match Made in the CloudsSharePoint and Azure - A Match Made in the Clouds
SharePoint and Azure - A Match Made in the Clouds
Shailen Sukul
 
The SharePoint 2013 App Model
The SharePoint 2013 App ModelThe SharePoint 2013 App Model
The SharePoint 2013 App Model
SPC Adriatics
 

What's hot (20)

ECS19 - John White - Unlock SharePoint’s Reporting Secrets
ECS19 - John White - Unlock SharePoint’s Reporting SecretsECS19 - John White - Unlock SharePoint’s Reporting Secrets
ECS19 - John White - Unlock SharePoint’s Reporting Secrets
 
Designing for SharePoint Provider Hosted Apps
Designing for SharePoint Provider Hosted AppsDesigning for SharePoint Provider Hosted Apps
Designing for SharePoint Provider Hosted Apps
 
Chris OBrien - Weaving Enterprise Solutions into Office Products
Chris OBrien - Weaving Enterprise Solutions into Office ProductsChris OBrien - Weaving Enterprise Solutions into Office Products
Chris OBrien - Weaving Enterprise Solutions into Office Products
 
Developer’s Independence Day: Introducing the SharePoint App Model
Developer’s Independence Day:Introducing the SharePoint App ModelDeveloper’s Independence Day:Introducing the SharePoint App Model
Developer’s Independence Day: Introducing the SharePoint App Model
 
Building SharePoint 2013 Apps - Architecture, Authentication & Connectivity API
Building SharePoint 2013 Apps - Architecture, Authentication & Connectivity APIBuilding SharePoint 2013 Apps - Architecture, Authentication & Connectivity API
Building SharePoint 2013 Apps - Architecture, Authentication & Connectivity API
 
SharePoint 2013 apps overview
SharePoint 2013 apps overviewSharePoint 2013 apps overview
SharePoint 2013 apps overview
 
SharePoint 2013 Sneak Peek
SharePoint 2013 Sneak PeekSharePoint 2013 Sneak Peek
SharePoint 2013 Sneak Peek
 
Hard learned CSOM and REST tips
Hard learned CSOM and REST tipsHard learned CSOM and REST tips
Hard learned CSOM and REST tips
 
SharePoint 2013 App Provisioning Models
SharePoint 2013 App Provisioning ModelsSharePoint 2013 App Provisioning Models
SharePoint 2013 App Provisioning Models
 
CSOM (Client Side Object Model). Explained @ SharePoint Saturday Houston
CSOM (Client Side Object Model). Explained @ SharePoint Saturday HoustonCSOM (Client Side Object Model). Explained @ SharePoint Saturday Houston
CSOM (Client Side Object Model). Explained @ SharePoint Saturday Houston
 
SharePoint 2013 “App Model” Developing and Deploying Provider Hosted Apps
SharePoint 2013 “App Model” Developing and Deploying Provider Hosted AppsSharePoint 2013 “App Model” Developing and Deploying Provider Hosted Apps
SharePoint 2013 “App Model” Developing and Deploying Provider Hosted Apps
 
Share point 2013 - Javascript Object Model
Share point 2013 - Javascript Object ModelShare point 2013 - Javascript Object Model
Share point 2013 - Javascript Object Model
 
SharePoint 2016 Hybrid Overview
SharePoint 2016 Hybrid OverviewSharePoint 2016 Hybrid Overview
SharePoint 2016 Hybrid Overview
 
Developing Apps for SharePoint Store
Developing Apps for SharePoint StoreDeveloping Apps for SharePoint Store
Developing Apps for SharePoint Store
 
Chris O'Brien - Modern SharePoint sites and the SharePoint Framework - reference
Chris O'Brien - Modern SharePoint sites and the SharePoint Framework - referenceChris O'Brien - Modern SharePoint sites and the SharePoint Framework - reference
Chris O'Brien - Modern SharePoint sites and the SharePoint Framework - reference
 
2014 09-20 - SPSNJ - Worst Practices of SharePoint
2014 09-20 - SPSNJ - Worst Practices of SharePoint2014 09-20 - SPSNJ - Worst Practices of SharePoint
2014 09-20 - SPSNJ - Worst Practices of SharePoint
 
[Vochten/Harbar] SharePoint Server On Premises & Hybrid PowerClass
[Vochten/Harbar] SharePoint Server On Premises & Hybrid PowerClass[Vochten/Harbar] SharePoint Server On Premises & Hybrid PowerClass
[Vochten/Harbar] SharePoint Server On Premises & Hybrid PowerClass
 
SharePoint REST vs CSOM
SharePoint REST vs CSOMSharePoint REST vs CSOM
SharePoint REST vs CSOM
 
SharePoint and Azure - A Match Made in the Clouds
SharePoint and Azure - A Match Made in the CloudsSharePoint and Azure - A Match Made in the Clouds
SharePoint and Azure - A Match Made in the Clouds
 
The SharePoint 2013 App Model
The SharePoint 2013 App ModelThe SharePoint 2013 App Model
The SharePoint 2013 App Model
 

Viewers also liked

Improve Master Data Quality with Excel and SharePoint
Improve Master Data Quality with Excel and SharePointImprove Master Data Quality with Excel and SharePoint
Improve Master Data Quality with Excel and SharePoint
Kristian Kalsing
 
Handling Cross-Domain calls & authentication in SharePoint 2013
Handling Cross-Domain calls & authentication in SharePoint 2013Handling Cross-Domain calls & authentication in SharePoint 2013
Handling Cross-Domain calls & authentication in SharePoint 2013BIWUG
 
A Kiss For You
A Kiss For YouA Kiss For You
A Kiss For YouRenny
 
Developing for SharePoint Online
Developing for SharePoint OnlineDeveloping for SharePoint Online
Developing for SharePoint OnlineAri Bakker
 
Same but Different - Developing for SharePoint Online -- SPSSTL
Same but Different - Developing for SharePoint Online -- SPSSTLSame but Different - Developing for SharePoint Online -- SPSSTL
Same but Different - Developing for SharePoint Online -- SPSSTL
John Ferringer
 
Pinal Power, Turning Arizona’s Green Waste into Renewable, Reliable Baseload ...
Pinal Power, Turning Arizona’s Green Waste into Renewable, Reliable Baseload ...Pinal Power, Turning Arizona’s Green Waste into Renewable, Reliable Baseload ...
Pinal Power, Turning Arizona’s Green Waste into Renewable, Reliable Baseload ...
City of Maricopa
 
Prelaunch StartupDorf Keynote @garagebilk 09/25/13 - Düsseldorf, NRW, Germany
Prelaunch StartupDorf Keynote @garagebilk 09/25/13 - Düsseldorf, NRW, GermanyPrelaunch StartupDorf Keynote @garagebilk 09/25/13 - Düsseldorf, NRW, Germany
Prelaunch StartupDorf Keynote @garagebilk 09/25/13 - Düsseldorf, NRW, Germany
StartupDorf e.V.
 
Diseño Gráfico.
Diseño Gráfico. Diseño Gráfico.
Diseño Gráfico.
Montse Gómez
 
Para el sector panadero es muy dificil introducirse en el mercado exterior (1...
Para el sector panadero es muy dificil introducirse en el mercado exterior (1...Para el sector panadero es muy dificil introducirse en el mercado exterior (1...
Para el sector panadero es muy dificil introducirse en el mercado exterior (1...EAE Business School
 
Pro watch max pro class ppt5
Pro watch max pro class ppt5Pro watch max pro class ppt5
Pro watch max pro class ppt5quientravels
 
Steinschaler Genussgarten
Steinschaler GenussgartenSteinschaler Genussgarten
Steinschaler Genussgarten
Johann Weiss
 
World Report on Disability
World Report on DisabilityWorld Report on Disability
World Report on Disability
buxybiz
 
Going Global?
Going Global? Going Global?
Going Global?
Renee Hobbs
 
Teaching object-oriented programming in primary education. The case of the Al...
Teaching object-oriented programming in primary education. The case of the Al...Teaching object-oriented programming in primary education. The case of the Al...
Teaching object-oriented programming in primary education. The case of the Al...Vasilis Sotiroudas
 
Sentidos en torno a la “obligatoriedad” de la educación secundaria
Sentidos en torno a la “obligatoriedad” de la educación secundariaSentidos en torno a la “obligatoriedad” de la educación secundaria
Sentidos en torno a la “obligatoriedad” de la educación secundaria
Politica29
 
The 2016 Pirelli Calendar
The 2016 Pirelli CalendarThe 2016 Pirelli Calendar
The 2016 Pirelli Calendar
guimera
 
Processing Landsat 8 Multi-Spectral Images with GRASS Tools & the potential o...
Processing Landsat 8 Multi-Spectral Images with GRASS Tools & the potential o...Processing Landsat 8 Multi-Spectral Images with GRASS Tools & the potential o...
Processing Landsat 8 Multi-Spectral Images with GRASS Tools & the potential o...
Shaun Lewis
 
2016 Utah Cloud Summit: Big Data Architectural Patterns and Best Practices on...
2016 Utah Cloud Summit: Big Data Architectural Patterns and Best Practices on...2016 Utah Cloud Summit: Big Data Architectural Patterns and Best Practices on...
2016 Utah Cloud Summit: Big Data Architectural Patterns and Best Practices on...
1Strategy
 

Viewers also liked (19)

Improve Master Data Quality with Excel and SharePoint
Improve Master Data Quality with Excel and SharePointImprove Master Data Quality with Excel and SharePoint
Improve Master Data Quality with Excel and SharePoint
 
Handling Cross-Domain calls & authentication in SharePoint 2013
Handling Cross-Domain calls & authentication in SharePoint 2013Handling Cross-Domain calls & authentication in SharePoint 2013
Handling Cross-Domain calls & authentication in SharePoint 2013
 
A Kiss For You
A Kiss For YouA Kiss For You
A Kiss For You
 
Developing for SharePoint Online
Developing for SharePoint OnlineDeveloping for SharePoint Online
Developing for SharePoint Online
 
Same but Different - Developing for SharePoint Online -- SPSSTL
Same but Different - Developing for SharePoint Online -- SPSSTLSame but Different - Developing for SharePoint Online -- SPSSTL
Same but Different - Developing for SharePoint Online -- SPSSTL
 
Pinal Power, Turning Arizona’s Green Waste into Renewable, Reliable Baseload ...
Pinal Power, Turning Arizona’s Green Waste into Renewable, Reliable Baseload ...Pinal Power, Turning Arizona’s Green Waste into Renewable, Reliable Baseload ...
Pinal Power, Turning Arizona’s Green Waste into Renewable, Reliable Baseload ...
 
Prelaunch StartupDorf Keynote @garagebilk 09/25/13 - Düsseldorf, NRW, Germany
Prelaunch StartupDorf Keynote @garagebilk 09/25/13 - Düsseldorf, NRW, GermanyPrelaunch StartupDorf Keynote @garagebilk 09/25/13 - Düsseldorf, NRW, Germany
Prelaunch StartupDorf Keynote @garagebilk 09/25/13 - Düsseldorf, NRW, Germany
 
El principito
El principito El principito
El principito
 
Diseño Gráfico.
Diseño Gráfico. Diseño Gráfico.
Diseño Gráfico.
 
Para el sector panadero es muy dificil introducirse en el mercado exterior (1...
Para el sector panadero es muy dificil introducirse en el mercado exterior (1...Para el sector panadero es muy dificil introducirse en el mercado exterior (1...
Para el sector panadero es muy dificil introducirse en el mercado exterior (1...
 
Pro watch max pro class ppt5
Pro watch max pro class ppt5Pro watch max pro class ppt5
Pro watch max pro class ppt5
 
Steinschaler Genussgarten
Steinschaler GenussgartenSteinschaler Genussgarten
Steinschaler Genussgarten
 
World Report on Disability
World Report on DisabilityWorld Report on Disability
World Report on Disability
 
Going Global?
Going Global? Going Global?
Going Global?
 
Teaching object-oriented programming in primary education. The case of the Al...
Teaching object-oriented programming in primary education. The case of the Al...Teaching object-oriented programming in primary education. The case of the Al...
Teaching object-oriented programming in primary education. The case of the Al...
 
Sentidos en torno a la “obligatoriedad” de la educación secundaria
Sentidos en torno a la “obligatoriedad” de la educación secundariaSentidos en torno a la “obligatoriedad” de la educación secundaria
Sentidos en torno a la “obligatoriedad” de la educación secundaria
 
The 2016 Pirelli Calendar
The 2016 Pirelli CalendarThe 2016 Pirelli Calendar
The 2016 Pirelli Calendar
 
Processing Landsat 8 Multi-Spectral Images with GRASS Tools & the potential o...
Processing Landsat 8 Multi-Spectral Images with GRASS Tools & the potential o...Processing Landsat 8 Multi-Spectral Images with GRASS Tools & the potential o...
Processing Landsat 8 Multi-Spectral Images with GRASS Tools & the potential o...
 
2016 Utah Cloud Summit: Big Data Architectural Patterns and Best Practices on...
2016 Utah Cloud Summit: Big Data Architectural Patterns and Best Practices on...2016 Utah Cloud Summit: Big Data Architectural Patterns and Best Practices on...
2016 Utah Cloud Summit: Big Data Architectural Patterns and Best Practices on...
 

Similar to Get started with building native mobile apps interacting with SharePoint

2014 SharePoint Saturday Melbourne Apps or not to Apps
2014 SharePoint Saturday Melbourne Apps or not to Apps2014 SharePoint Saturday Melbourne Apps or not to Apps
2014 SharePoint Saturday Melbourne Apps or not to Apps
Gilles Pommier
 
Automatizacion de Procesos en Modelos Tabulares
Automatizacion de Procesos en Modelos TabularesAutomatizacion de Procesos en Modelos Tabulares
Automatizacion de Procesos en Modelos Tabulares
Gaston Cruz
 
Microsoft Azure Identity and O365
Microsoft Azure Identity and O365Microsoft Azure Identity and O365
Microsoft Azure Identity and O365
Kris Wagner
 
SharePoint Saturday Sacramento 2013 SharePoint Apps
SharePoint Saturday Sacramento 2013 SharePoint AppsSharePoint Saturday Sacramento 2013 SharePoint Apps
SharePoint Saturday Sacramento 2013 SharePoint Apps
Ryan Schouten
 
jsSaturday - PhoneGap and jQuery Mobile for SharePoint 2013
jsSaturday - PhoneGap and jQuery Mobile for SharePoint 2013jsSaturday - PhoneGap and jQuery Mobile for SharePoint 2013
jsSaturday - PhoneGap and jQuery Mobile for SharePoint 2013Kiril Iliev
 
Writing Secure SharePoint Code - SharePoint Saturday Toronto
Writing Secure SharePoint Code - SharePoint Saturday TorontoWriting Secure SharePoint Code - SharePoint Saturday Toronto
Writing Secure SharePoint Code - SharePoint Saturday TorontoEli Robillard
 
Introduction to Google App Engine
Introduction to Google App EngineIntroduction to Google App Engine
Introduction to Google App Engine
Kanda Runapongsa Saikaew
 
Developing Apps with Azure AD
Developing Apps with Azure ADDeveloping Apps with Azure AD
Developing Apps with Azure AD
SharePointRadi
 
Node.js and Parse
Node.js and ParseNode.js and Parse
Node.js and Parse
Nicholas McClay
 
O365Con19 - Developing Timerjob and Eventhandler Equivalents - Adis Jugo
O365Con19 - Developing Timerjob and Eventhandler Equivalents - Adis JugoO365Con19 - Developing Timerjob and Eventhandler Equivalents - Adis Jugo
O365Con19 - Developing Timerjob and Eventhandler Equivalents - Adis Jugo
NCCOMMS
 
Understanding SharePoint Apps, authentication and authorization infrastructur...
Understanding SharePoint Apps, authentication and authorization infrastructur...Understanding SharePoint Apps, authentication and authorization infrastructur...
Understanding SharePoint Apps, authentication and authorization infrastructur...
SPC Adriatics
 
Developing a provider hosted share point app
Developing a provider hosted share point appDeveloping a provider hosted share point app
Developing a provider hosted share point app
Talbott Crowell
 
Chris O'Brien - Modern SharePoint development: techniques for moving code off...
Chris O'Brien - Modern SharePoint development: techniques for moving code off...Chris O'Brien - Modern SharePoint development: techniques for moving code off...
Chris O'Brien - Modern SharePoint development: techniques for moving code off...
Chris O'Brien
 
M365 Teams Automation
M365 Teams AutomationM365 Teams Automation
M365 Teams Automation
Christopher R. Barber
 
Fire up your mobile app!
Fire up your mobile app!Fire up your mobile app!
Fire up your mobile app!
Suganthi Giridharan
 
Apps 101 - Moving to the SharePoint 2013 App Model - Presented 7/27/13 at Sha...
Apps 101 - Moving to the SharePoint 2013 App Model - Presented 7/27/13 at Sha...Apps 101 - Moving to the SharePoint 2013 App Model - Presented 7/27/13 at Sha...
Apps 101 - Moving to the SharePoint 2013 App Model - Presented 7/27/13 at Sha...
BlueMetalInc
 
Azure Functions Real World Examples
Azure Functions Real World Examples Azure Functions Real World Examples
Azure Functions Real World Examples
Yochay Kiriaty
 
SharePoint and Office Development Workshop
SharePoint and Office Development WorkshopSharePoint and Office Development Workshop
SharePoint and Office Development Workshop
Eric Shupps
 
Developing an intranet on office 365
Developing an intranet on office 365Developing an intranet on office 365
Developing an intranet on office 365Eric Shupps
 
SharePoint 2013 App or Not to App
SharePoint 2013 App or Not to AppSharePoint 2013 App or Not to App
SharePoint 2013 App or Not to App
Kenneth Maglio
 

Similar to Get started with building native mobile apps interacting with SharePoint (20)

2014 SharePoint Saturday Melbourne Apps or not to Apps
2014 SharePoint Saturday Melbourne Apps or not to Apps2014 SharePoint Saturday Melbourne Apps or not to Apps
2014 SharePoint Saturday Melbourne Apps or not to Apps
 
Automatizacion de Procesos en Modelos Tabulares
Automatizacion de Procesos en Modelos TabularesAutomatizacion de Procesos en Modelos Tabulares
Automatizacion de Procesos en Modelos Tabulares
 
Microsoft Azure Identity and O365
Microsoft Azure Identity and O365Microsoft Azure Identity and O365
Microsoft Azure Identity and O365
 
SharePoint Saturday Sacramento 2013 SharePoint Apps
SharePoint Saturday Sacramento 2013 SharePoint AppsSharePoint Saturday Sacramento 2013 SharePoint Apps
SharePoint Saturday Sacramento 2013 SharePoint Apps
 
jsSaturday - PhoneGap and jQuery Mobile for SharePoint 2013
jsSaturday - PhoneGap and jQuery Mobile for SharePoint 2013jsSaturday - PhoneGap and jQuery Mobile for SharePoint 2013
jsSaturday - PhoneGap and jQuery Mobile for SharePoint 2013
 
Writing Secure SharePoint Code - SharePoint Saturday Toronto
Writing Secure SharePoint Code - SharePoint Saturday TorontoWriting Secure SharePoint Code - SharePoint Saturday Toronto
Writing Secure SharePoint Code - SharePoint Saturday Toronto
 
Introduction to Google App Engine
Introduction to Google App EngineIntroduction to Google App Engine
Introduction to Google App Engine
 
Developing Apps with Azure AD
Developing Apps with Azure ADDeveloping Apps with Azure AD
Developing Apps with Azure AD
 
Node.js and Parse
Node.js and ParseNode.js and Parse
Node.js and Parse
 
O365Con19 - Developing Timerjob and Eventhandler Equivalents - Adis Jugo
O365Con19 - Developing Timerjob and Eventhandler Equivalents - Adis JugoO365Con19 - Developing Timerjob and Eventhandler Equivalents - Adis Jugo
O365Con19 - Developing Timerjob and Eventhandler Equivalents - Adis Jugo
 
Understanding SharePoint Apps, authentication and authorization infrastructur...
Understanding SharePoint Apps, authentication and authorization infrastructur...Understanding SharePoint Apps, authentication and authorization infrastructur...
Understanding SharePoint Apps, authentication and authorization infrastructur...
 
Developing a provider hosted share point app
Developing a provider hosted share point appDeveloping a provider hosted share point app
Developing a provider hosted share point app
 
Chris O'Brien - Modern SharePoint development: techniques for moving code off...
Chris O'Brien - Modern SharePoint development: techniques for moving code off...Chris O'Brien - Modern SharePoint development: techniques for moving code off...
Chris O'Brien - Modern SharePoint development: techniques for moving code off...
 
M365 Teams Automation
M365 Teams AutomationM365 Teams Automation
M365 Teams Automation
 
Fire up your mobile app!
Fire up your mobile app!Fire up your mobile app!
Fire up your mobile app!
 
Apps 101 - Moving to the SharePoint 2013 App Model - Presented 7/27/13 at Sha...
Apps 101 - Moving to the SharePoint 2013 App Model - Presented 7/27/13 at Sha...Apps 101 - Moving to the SharePoint 2013 App Model - Presented 7/27/13 at Sha...
Apps 101 - Moving to the SharePoint 2013 App Model - Presented 7/27/13 at Sha...
 
Azure Functions Real World Examples
Azure Functions Real World Examples Azure Functions Real World Examples
Azure Functions Real World Examples
 
SharePoint and Office Development Workshop
SharePoint and Office Development WorkshopSharePoint and Office Development Workshop
SharePoint and Office Development Workshop
 
Developing an intranet on office 365
Developing an intranet on office 365Developing an intranet on office 365
Developing an intranet on office 365
 
SharePoint 2013 App or Not to App
SharePoint 2013 App or Not to AppSharePoint 2013 App or Not to App
SharePoint 2013 App or Not to App
 

Recently uploaded

IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
Abida Shariff
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
Elena Simperl
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Tobias Schneck
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Inflectra
 

Recently uploaded (20)

IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 

Get started with building native mobile apps interacting with SharePoint

  • 1. START BUILDING NATIVE MOBILE APPS FOR SHAREPOINT March 12, 2016 Yaroslav Pentsarskyy sharemuch.com
  • 2. 2 • SharePoint Architect • Microsoft MVP • Blogger • Writer Who is this guy?
  • 3. Why are we here?
  • 4. Why are we here? What’s wrong with this picture?
  • 5. Why are we here? Does your meeting ever look like this?
  • 6. Why are we here? Or is it more like …
  • 7. Why are we here? Or is it more like …
  • 8. Why are we here? Or this …
  • 9. Why are we here? Our goal today: • Explore SharePoint integration with mobile platforms • Get some samples • Look at mobile use cases in your business
  • 10. What are we building today
  • 11. What are we building today
  • 12. What are we building today
  • 13. What are we building today
  • 14. What are we building today
  • 15. What are we building today SharePoi nt excites me!
  • 16.  Office 365 Developer Site  That’s where files will be stored so that’s obvious  Set up a development environment for SharePoint Add-ins on Office 365: https://msdn.microsoft.com/en- us/library/office/fp179924.aspx#o365_signup  Windows Azure  This is going to be used for authentication to Office 365  Azure trial: https://azure.microsoft.com/en-us/pricing/free-trial/  Visual Studio and Xamarin  This is what we’re going to be using to build Android app with C# and .NET Tools
  • 17.  Xamarin  Build for Android and iOS using one tool  Use your existing knowledge of Visual Studio  Use .NET framework and C#  Has been recently acquired by MS, so more support and integration is coming, hopefully  More MS integration samples: https://developer.xamarin.com/samples-all/  Native tool  Learn new toolset (for example Android Studio)  Learn language: objective C or Java  Less dependency on a middle man  More platform specific community support Xamarin vs. platform specific tool
  • 19. What does our sample app do?
  • 20. Step 1.1 – Adding O365 to our Sample Project • Right click on the Project name in Visual Studio -> • Add -> • Connected Service …
  • 21. Step 1.2 – What’s our SPO tenant URL? • Don’t have one? • Spin up a test one, search for “Set up a development environment for SharePoint Add-ins on Office 365”
  • 22. Step 1.3 – Create new azure “application” • SharePoint Online uses Azure to handle authentication. • Azure takes care of authentication and creates a token. • SPO consumes that token and hopefully authorizes the user if they have access to the site
  • 23. Step 1.4 – We’ll need to ask users for these permissions • Not only the user must consent to giving these permissions to our app, they obviously need to be granted those in SharePoint Online …. otherwise we’re gonna have a case of “writing checks we can’t cash”
  • 24. Step 1.5 – wait while Visual Studio adds required libraries to our project • Curious fact! • This inflates our project from few KB to … oh well, ~80 MB
  • 25.
  • 26. Step 2 – Add some C#
  • 27. Step 2 – Add some C#
  • 28. Adding Code to Create List Items in SPO private static async Task<string> GetFormDigest(string siteURL, string accessToken) { //Get the form digest value in order to write data HttpClient client = new HttpClient(); HttpRequestMessage request = new HttpRequestMessage( HttpMethod.Post, siteURL + "/_api/contextinfo"); request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml")); request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); HttpResponseMessage response = await client.SendAsync(request); string responseString = await response.Content.ReadAsStringAsync(); XNamespace d = "http://schemas.microsoft.com/ado/2007/08/dataservices"; var root = XElement.Parse(responseString); var formDigestValue = root.Element(d + "FormDigestValue").Value;
  • 29. Adding Code to Create List Items in SPO … cont. public static async Task<string> AddListItem(string title, string siteURL, string accessToken, string filePath) { string requestUrl = siteURL + "/_api/Web/Lists/GetByTitle('TestList')/Items"; var formDigest = await GetFormDigest(siteURL, accessToken); HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Add("Accept", "application/json;odata=verbose"); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, requestUrl); request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); // Note that the form digest is not needed for bearer authentication. This can //safely be removed, but left here for posterity. request.Headers.Add("X-RequestDigest", formDigest); var requestContent = new StringContent( "{ '__metadata': { 'type': 'SP.Data.TestListListItem' }, 'Title': '" + title + "'}"); requestContent.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json;odata=verbose"); request.Content = requestContent; HttpResponseMessage response = await client.SendAsync(request); if (response.IsSuccessStatusCode) { string responseString = await response.Content.ReadAsStringAsync(); JsonObject d = (JsonObject)JsonValue.Parse(responseString); JsonObject results = (JsonObject)d["d"]; JsonValue newItemId = (JsonValue)results["ID"]; var endpointUrl = string.Format("{0}({1})/AttachmentFiles/add(FileName='{2}')", requestUrl, newItemId.ToString(), App._file.Name); using (var stream = System.IO.File.OpenRead(filePath)) { HttpContent file = new StreamContent(stream); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); var resp = await client.PostAsync(endpointUrl, file); } return responseString; } return (null); }
  • 30. References using System.Threading.Tasks; using System.Net.Http; //Reference System.Net.Http.dll using System.Net.Http.Headers; using System.Xml.Linq; //Reference System.Xml.Linq.dll using Microsoft.IdentityModel.Clients.ActiveDirectory; using System.Json;
  • 33.
  • 35. Adding Authentication Helper using System.Linq; using Android.App; using Microsoft.IdentityModel.Clients.ActiveDirectory; using System.Threading.Tasks; namespace CameraAppDemo { public class AuthenticationHelper { public const string Authority = "https://login.windows.net/common"; public static System.Uri returnUri = new System.Uri("http://cameraappdemo.cameraappdemo/"); public static string clientId = "0f0ff4eb-b28a-48ec-88c0-1bcd50ae381b"; public static AuthenticationContext authContext = null; public static async Task<AuthenticationResult> GetAccessToken (string serviceResourceId, Activity activity) { authContext = new AuthenticationContext(Authority); if (authContext.TokenCache.ReadItems().Count() > 0) authContext = new AuthenticationContext(authContext.TokenCache.ReadItems().First().Authority); var authResult = await authContext.AcquireTokenAsync(serviceResourceId, clientId, returnUri, new AuthorizationParameters(activity)); return authResult; } }
  • 36. Referencing Authentication Helper internal async void Login(object sender, EventArgs eventArgs) { App.authResult = await AuthenticationHelper.GetAccessToken("https://sharemuch.sharepoint.com/", this); }
  • 37. Adding a login button protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView(Resource.Layout.Main); if (IsThereAnAppToTakePictures()) { CreateDirectoryForPictures(); Button login = FindViewById<Button>(Resource.Id.myButton1); login.Click += Login; Button button = FindViewById<Button>(Resource.Id.myButton); _imageView = FindViewById<ImageView>(Resource.Id.imageView1); button.Click += TakeAPicture; }
  • 38. Final touches - kindof protected override async void OnActivityResult(int requestCode, Result resultCode, Intent data) { base.OnActivityResult(requestCode, resultCode, data); if (App.authResult == null) { AuthenticationAgentContinuationHelper. SetAuthenticationAgentContinuationEventArgs(requestCode, resultCode, data); } // Make it available in the gallery Intent mediaScanIntent = new Intent(Intent.ActionMediaScannerScanFile); if (App._file != null) { ….. // Dispose of the Java side bitmap. GC.Collect(); if (App.authResult != null) { await AddListItem("TestItem", "https://sharemuch.sharepoint.com/sites/demo", App.authResult.AccessToken, App._file.AbsolutePath); } } }
  • 43. Azure config – create new dir
  • 44. Azure config – add an application
  • 45. Azure config – add an application
  • 46. Azure config – Copy New ID
  • 47. Azure config – permissions
  • 48. What happens Between Azure and O365 – 1 & 2 Register your app in the Azure Management Portal and configure the app's code with the client Id and redirect URI. Then, in the Azure Management Portal, configure the permissions for the app. Your app gets the user's email address. It contacts Discovery Service with email address and the set of scopes the app wants to
  • 49. What happens Between Azure and O365 - 3 The app goes to the Azure AD authorization endpoint and the user authenticates and grants consent (if consent has not been granted before). Azure AD issues an authorization code.
  • 50. What happens Between Azure and O365 - 4 Your app redeems the authorization code. Azure returns an access token and a refresh token.
  • 51. What happens Between Azure and O365 - 5 Your app calls Discovery Service using the access token. Discovery Service returns Http Response with resource IDs and endpoint URIs for Office 365 services.
  • 52. What happens Between Azure and O365 - 6 Your app redeems the refresh token with Azure AD token endpoint, to get the access token for the desired Office 365 resource. The Azure AD token endpoint returns an access token for the specified resource and a refresh token.
  • 53. What happens Between Azure and O365 - 7 Your app can now call Office 365 APIs using the URI from Discovery Service and the access token. Office 365 returns Http Response. * Office 365 APIs: How to use Discovery Service https://code.msdn.microsoft.com/Office-365-APIs-How-to- use-609102ea

Editor's Notes

  1. 2