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
Get started with building native mobile apps interacting with SharePoint
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
Get started with building native mobile apps interacting with SharePoint
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?
Ad

More Related Content

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
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 API
SharePointRadi
ย 
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 Apps
Sanjay 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
ย 
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 API
SharePointRadi
ย 
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 Apps
Sanjay 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
ย 

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
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 2013
BIWUG
ย 
A Kiss For You
A Kiss For YouA Kiss For You
A Kiss For You
Renny
ย 
Developing for SharePoint Online
Developing for SharePoint OnlineDeveloping for SharePoint Online
Developing for SharePoint Online
Ari 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.
ย 
El principito
El principito El principito
El principito
eliasamarilla
ย 
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 ppt5
quientravels
ย 
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
ย 
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 2013
BIWUG
ย 
A Kiss For You
A Kiss For YouA Kiss For You
A Kiss For You
Renny
ย 
Developing for SharePoint Online
Developing for SharePoint OnlineDeveloping for SharePoint Online
Developing for SharePoint Online
Ari 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.
ย 
El principito
El principito El principito
El principito
eliasamarilla
ย 
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 ppt5
quientravels
ย 
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
ย 
Ad

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
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 2013
Kiril 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 Toronto
Eli 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 365
Eric 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
ย 
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 2013
Kiril 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 Toronto
Eli 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
ย 
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 365
Eric 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
ย 
Ad

Recently uploaded (20)

Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
ย 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
ย 
Learn the Basics of Agile Development: Your Step-by-Step Guide
Learn the Basics of Agile Development: Your Step-by-Step GuideLearn the Basics of Agile Development: Your Step-by-Step Guide
Learn the Basics of Agile Development: Your Step-by-Step Guide
Marcel David
ย 
Automation Hour 1/28/2022: Capture User Feedback from Anywhere
Automation Hour 1/28/2022: Capture User Feedback from AnywhereAutomation Hour 1/28/2022: Capture User Feedback from Anywhere
Automation Hour 1/28/2022: Capture User Feedback from Anywhere
Lynda Kane
ย 
What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...
Vishnu Singh Chundawat
ย 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
ย 
How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?
Daniel Lehner
ย 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
ย 
Drupalcamp Finland โ€“ Measuring Front-end Energy Consumption
Drupalcamp Finland โ€“ Measuring Front-end Energy ConsumptionDrupalcamp Finland โ€“ Measuring Front-end Energy Consumption
Drupalcamp Finland โ€“ Measuring Front-end Energy Consumption
Exove
ย 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
ย 
"PHP and MySQL CRUD Operations for Student Management System"
"PHP and MySQL CRUD Operations for Student Management System""PHP and MySQL CRUD Operations for Student Management System"
"PHP and MySQL CRUD Operations for Student Management System"
Jainul Musani
ย 
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager APIUiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPathCommunity
ย 
Leading AI Innovation As A Product Manager - Michael Jidael
Leading AI Innovation As A Product Manager - Michael JidaelLeading AI Innovation As A Product Manager - Michael Jidael
Leading AI Innovation As A Product Manager - Michael Jidael
Michael Jidael
ย 
Automation Dreamin' 2022: Sharing Some Gratitude with Your Users
Automation Dreamin' 2022: Sharing Some Gratitude with Your UsersAutomation Dreamin' 2022: Sharing Some Gratitude with Your Users
Automation Dreamin' 2022: Sharing Some Gratitude with Your Users
Lynda Kane
ย 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
ย 
Salesforce AI Associate 2 of 2 Certification.docx
Salesforce AI Associate 2 of 2 Certification.docxSalesforce AI Associate 2 of 2 Certification.docx
Salesforce AI Associate 2 of 2 Certification.docx
Josรฉ Enrique Lรณpez Rivera
ย 
Image processinglab image processing image processing
Image processinglab image processing  image processingImage processinglab image processing  image processing
Image processinglab image processing image processing
RaghadHany
ย 
Hands On: Create a Lightning Aura Component with force:RecordData
Hands On: Create a Lightning Aura Component with force:RecordDataHands On: Create a Lightning Aura Component with force:RecordData
Hands On: Create a Lightning Aura Component with force:RecordData
Lynda Kane
ย 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
ย 
tecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdftecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdf
fjgm517
ย 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
ย 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
ย 
Learn the Basics of Agile Development: Your Step-by-Step Guide
Learn the Basics of Agile Development: Your Step-by-Step GuideLearn the Basics of Agile Development: Your Step-by-Step Guide
Learn the Basics of Agile Development: Your Step-by-Step Guide
Marcel David
ย 
Automation Hour 1/28/2022: Capture User Feedback from Anywhere
Automation Hour 1/28/2022: Capture User Feedback from AnywhereAutomation Hour 1/28/2022: Capture User Feedback from Anywhere
Automation Hour 1/28/2022: Capture User Feedback from Anywhere
Lynda Kane
ย 
What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...
Vishnu Singh Chundawat
ย 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
ย 
How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?
Daniel Lehner
ย 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
ย 
Drupalcamp Finland โ€“ Measuring Front-end Energy Consumption
Drupalcamp Finland โ€“ Measuring Front-end Energy ConsumptionDrupalcamp Finland โ€“ Measuring Front-end Energy Consumption
Drupalcamp Finland โ€“ Measuring Front-end Energy Consumption
Exove
ย 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
ย 
"PHP and MySQL CRUD Operations for Student Management System"
"PHP and MySQL CRUD Operations for Student Management System""PHP and MySQL CRUD Operations for Student Management System"
"PHP and MySQL CRUD Operations for Student Management System"
Jainul Musani
ย 
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager APIUiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPathCommunity
ย 
Leading AI Innovation As A Product Manager - Michael Jidael
Leading AI Innovation As A Product Manager - Michael JidaelLeading AI Innovation As A Product Manager - Michael Jidael
Leading AI Innovation As A Product Manager - Michael Jidael
Michael Jidael
ย 
Automation Dreamin' 2022: Sharing Some Gratitude with Your Users
Automation Dreamin' 2022: Sharing Some Gratitude with Your UsersAutomation Dreamin' 2022: Sharing Some Gratitude with Your Users
Automation Dreamin' 2022: Sharing Some Gratitude with Your Users
Lynda Kane
ย 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
ย 
Image processinglab image processing image processing
Image processinglab image processing  image processingImage processinglab image processing  image processing
Image processinglab image processing image processing
RaghadHany
ย 
Hands On: Create a Lightning Aura Component with force:RecordData
Hands On: Create a Lightning Aura Component with force:RecordDataHands On: Create a Lightning Aura Component with force:RecordData
Hands On: Create a Lightning Aura Component with force:RecordData
Lynda Kane
ย 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
ย 
tecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdftecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdf
fjgm517
ย 

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
  • 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;
  • 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