expo-playtimeads-ads
v0.1.2
Published
Expo module for integrating PlaytimeAds Offerwall in React Native applications (Android only)
Maintainers
Readme
expo-playtimeads-ads
Expo module for integrating PlaytimeAds Offerwall in React Native applications.
Note: This module is Android only. iOS is not supported.
Requirements
- Expo SDK 51+
- Development Build (Expo Go is NOT supported)
This package contains native Android code, so it requires a development build. Expo Go cannot run custom native modules.
Official Documentation
For complete Offerwall documentation, visit: https://docs.playtimeads.com/
Installation
npx expo install expo-playtimeads-adsor
npm install expo-playtimeads-adsCreate a Development Build
After installing, you must create a development build:
# Generate native project files
npx expo prebuild --platform android
# Run on Android device/emulator
npx expo run:androidOr using EAS Build:
eas build --profile development --platform androidUsage
1. Initialize the SDK
Initialize PlaytimeAds with your application key and user ID:
import * as PlaytimeAds from 'expo-playtimeads-ads';
// Check if PlaytimeAds is available (Android only)
if (PlaytimeAds.isAvailable()) {
PlaytimeAds.init('YOUR_APPLICATION_KEY', 'USER_ID');
}2. Listen for Events
Add listeners to handle initialization success or failure:
import { useEffect } from 'react';
import * as PlaytimeAds from 'expo-playtimeads-ads';
useEffect(() => {
const successSubscription = PlaytimeAds.addInitSuccessListener(() => {
console.log('PlaytimeAds initialized successfully');
});
const failedSubscription = PlaytimeAds.addInitFailedListener((event) => {
console.log('PlaytimeAds initialization failed:', event.error);
});
const alreadyInitializingSubscription = PlaytimeAds.addAlreadyInitializingListener(() => {
console.log('PlaytimeAds is already initializing');
});
return () => {
successSubscription.remove();
failedSubscription.remove();
alreadyInitializingSubscription.remove();
};
}, []);3. Launch Offerwall
Open the PlaytimeAds offerwall:
const openOfferwall = async () => {
try {
await PlaytimeAds.launchOfferwall();
} catch (error) {
console.error('Failed to launch offerwall:', error);
}
};4. Cleanup
Destroy the SDK when no longer needed:
PlaytimeAds.destroy();API Reference
| Method | Description |
|--------|-------------|
| isAvailable() | Returns true if running on Android, false otherwise |
| init(applicationKey, userId) | Initialize the PlaytimeAds SDK |
| destroy() | Clean up the SDK resources |
| launchOfferwall() | Open the offerwall (returns Promise) |
| addInitSuccessListener(callback) | Listen for successful initialization |
| addInitFailedListener(callback) | Listen for initialization failures |
| addAlreadyInitializingListener(callback) | Listen for already initializing events |
Platform Support
| Platform | Supported | |----------|-----------| | Android | Yes | | iOS | No |
Complete Example
import React, { useEffect } from 'react';
import { View, Button, Alert } from 'react-native';
import {
isAvailable,
init,
launchOfferwall,
addInitSuccessListener,
addInitFailedListener,
addAlreadyInitializingListener,
} from 'expo-playtimeads-ads';
export default function App() {
useEffect(() => {
// Initialize only on Android
if (isAvailable()) {
init('YOUR_APPLICATION_KEY', 'USER_ID');
}
// Set up event listeners
const successSub = addInitSuccessListener(() => {
console.log('PlaytimeAds initialized successfully');
});
const failedSub = addInitFailedListener((event) => {
console.log('PlaytimeAds initialization failed:', event.error);
});
const alreadyInitSub = addAlreadyInitializingListener(() => {
console.log('PlaytimeAds is already initializing');
});
// Cleanup
return () => {
successSub.remove();
failedSub.remove();
alreadyInitSub.remove();
};
}, []);
const openOfferwall = async () => {
if (!isAvailable()) {
Alert.alert('Not Available', 'PlaytimeAds is only available on Android');
return;
}
try {
await launchOfferwall();
} catch (error) {
console.error('Failed to launch offerwall:', error);
}
};
return (
<View style={{ flex: 1, justifyContent: 'center', padding: 20 }}>
<Button title="Open Offerwall" onPress={openOfferwall} />
</View>
);
}Troubleshooting
Error: Cannot find native module 'ExpoPlaytimeAds'
This error occurs when using Expo Go. This package requires a development build because it contains native Android code.
Solution:
npx expo prebuild --platform android
npx expo run:androidModule not working on iOS
This module is Android-only. The isAvailable() function returns false on iOS, and all SDK functions will log warnings and return early.
Platform Support
| Platform | Supported | |----------|-----------| | Android | Yes | | iOS | No |
License
MIT
Author
Vishal Chaubey
