Skip to main content
MAM without enrollment
Microsoft Intune app protection for React Native
App Protection Policies on iOS and Android — PIN, copy-paste restrictions, conditional launch and remote wipe — on the employee’s own unmanaged phone.
npm i react-native-intune
Intune service
admin authors policy
policy → one app
Your app
PIN · no copy out · no screenshot
protected boundary
personal apps — outside the boundary
the phone is unenrolled, personal, untouched
What the library does

Six things worth knowing before you start

In the order that decides whether you can use it — starting with the one that is most often assumed the other way round.

The app is protected, the phone is not.
MAM-WE: no device enrollment, no MDM profile. The employee’s phone stays theirs.
Both platforms, one API.
iOS and Android behind the same TypeScript interface.
Sign-in is included.
MSAL with broker support ships with the library. Apps with their own MSAL keep it.
The dangerous failures are made loud.
Three ways to integrate this wrong build, run, and protect nothing. doctor finds them and says so.
Verified on real devices, real tenant.
Enrollment cannot be unit-tested. This was run on hardware.
New Architecture.
TurboModule, typed via Codegen.
What it looks like

A small API, and one branch that matters

app/startup.ts
import Intune, { EnrollmentStatus } from 'react-native-intune';

await Intune.configure({
clientId: cfg.aadClientId,
tenantId: cfg.aadTenantId,
authority: cfg.aadAuthority,
redirectUri: cfg.aadRedirectUri,
});

const { enrollment } = await Intune.signInAndEnroll();

// Only 'failed' means block. 'notLicensed' and 'notTargeted' are legitimate
// employees whose app simply runs unmanaged.
if (enrollment.status === EnrollmentStatus.Failed) {
blockCorporateData();
}
The full API reference →
signInAndEnroll()THE APP RUNSsucceedednotTargetednotLicensedLet the user in.Two of these rununmanaged.YOU HANDLE ITfailedpending+ six moreOnly failed blockscorporate data.ELEVEN OUTCOMES · ONE RESOLVESA failure is data, not an exception.
The branch in the sample. All eleven outcomes →

Integration is most of the work

Installing the package takes a minute. Wiring it into your project takes about an hour — and the guides say which steps fail silently, so you do not find out on a device.