1a47a1472SVille Immonenimport Constants from 'expo-constants'; 2*9155fd2fSŁukasz Kosmatyimport * as Notifications from 'expo-notifications'; 369185572SBartłomiej Bukowski 469185572SBartłomiej Bukowski// In this test app we contact the Expo push service directly. You *never* 569185572SBartłomiej Bukowski// should do this in a real app. You should always store the push tokens on your 669185572SBartłomiej Bukowski// own server or use the local notification API if you want to notify this user. 769185572SBartłomiej Bukowskiconst PUSH_ENDPOINT = 'https://expo.io/--/api/v2/push/send'; 869185572SBartłomiej Bukowski 98c3c9794SEric Samelsonexport default async function registerForPushNotificationsAsync() { 1069185572SBartłomiej Bukowski // this method assumes the user has already granted permission 11*9155fd2fSŁukasz Kosmaty // to receive remote notifications. 1269185572SBartłomiej Bukowski 1369185572SBartłomiej Bukowski // Get the token that uniquely identifies this device 14*9155fd2fSŁukasz Kosmaty const { data: token } = await Notifications.getExpoPushTokenAsync(); 1569185572SBartłomiej Bukowski 1669185572SBartłomiej Bukowski // Log it so we can easily copy it if we need to work with it 1769185572SBartłomiej Bukowski console.log(`Got this device's push token: ${token}`); 1869185572SBartłomiej Bukowski 1969185572SBartłomiej Bukowski // POST the token to the Expo push server 2069185572SBartłomiej Bukowski const response = await fetch(PUSH_ENDPOINT, { 2169185572SBartłomiej Bukowski method: 'POST', 2269185572SBartłomiej Bukowski headers: { 23*9155fd2fSŁukasz Kosmaty Accept: 'application/json', 2469185572SBartłomiej Bukowski 'Content-Type': 'application/json', 2569185572SBartłomiej Bukowski }, 2669185572SBartłomiej Bukowski body: JSON.stringify([ 2769185572SBartłomiej Bukowski { 2869185572SBartłomiej Bukowski to: token, 298c3c9794SEric Samelson title: 'Welcome to Expo!', 308c3c9794SEric Samelson body: 'Native Component List is registered for push notifications.', 318c3c9794SEric Samelson data: { example: 'sample data' }, 3269185572SBartłomiej Bukowski _category: `${Constants.manifest.id}:welcome`, 3369185572SBartłomiej Bukowski }, 3469185572SBartłomiej Bukowski ]), 3569185572SBartłomiej Bukowski }); 3669185572SBartłomiej Bukowski 3769185572SBartłomiej Bukowski const result = await response.json(); 3869185572SBartłomiej Bukowski if (result.errors) { 3969185572SBartłomiej Bukowski for (const error of result.errors) { 4069185572SBartłomiej Bukowski console.warn(`API error sending push notification:`, error); 4169185572SBartłomiej Bukowski } 4269185572SBartłomiej Bukowski } 4369185572SBartłomiej Bukowski 4469185572SBartłomiej Bukowski const receipts = result.data; 4569185572SBartłomiej Bukowski if (receipts) { 4669185572SBartłomiej Bukowski const receipt = receipts[0]; 4769185572SBartłomiej Bukowski if (receipt.status === 'error') { 4869185572SBartłomiej Bukowski if (receipt.details) { 4969185572SBartłomiej Bukowski console.warn( 50*9155fd2fSŁukasz Kosmaty `Expo push service reported an error sending a notification: ${receipt.details.error}` 5169185572SBartłomiej Bukowski ); 5269185572SBartłomiej Bukowski } 5369185572SBartłomiej Bukowski if (receipt.__debug) { 5469185572SBartłomiej Bukowski console.warn(receipt.__debug); 5569185572SBartłomiej Bukowski } 5669185572SBartłomiej Bukowski } 5769185572SBartłomiej Bukowski } 5869185572SBartłomiej Bukowski} 59