cordova-plugin-otp-retriever
Version:
Cordova plugin for automatic OTP reading using Android SMS User Consent API
159 lines (128 loc) • 4.69 kB
Markdown
# OTP Reader Debug Guide
## Common Issues and Solutions
### 1. **TIMING ISSUE** (Most Common)
**Problem**: SMS sent at the same time as starting listener won't be detected.
**Solution**:
1. Start listening first
2. Wait for "Started listening" response
3. THEN send the SMS
**Test**: Use the debug_test.html page to verify timing.
### 2. **Sender Phone Number Format**
**Problem**: If you specify a sender number, it must match exactly.
**Examples of what might work**:
- `null` - Listen for any sender (recommended for testing)
- `"+1234567890"` - For full international format
- `"1234567890"` - For national format
**Test Code**:
```javascript
// Test with any sender first
cordova.plugins.OTPReader.startListening(null, successCallback, errorCallback);
// Then test with specific sender
cordova.plugins.OTPReader.startListening("XXXXXX-S", successCallback, errorCallback);
```
### 3. **SMS User Consent Workflow**
The SMS User Consent API works in these steps:
1. Start listening → Returns "listening: true"
2. SMS arrives → Broadcast receiver triggers
3. User consent dialog appears → User must approve
4. SMS content delivered → You get the message
**Check**: Look for "SMS BROADCAST RECEIVER TRIGGERED" in logs when SMS arrives.
### 4. **Android Version Issues**
- **Android 13+**: Receiver export requirements (handled in code)
- **Android 6+**: Runtime permissions required (handled in code)
### 5. **Google Play Services**
**Check**: Use getDebugInfo() to verify Play Services status.
## Debugging Steps
### Step 1: Check Plugin Status
```javascript
cordova.plugins.OTPReader.getDebugInfo(
function(result) {
console.log('Debug Info:', result);
// Check: isListening, permissions, playServicesAvailable
},
function(error) {
console.log('Debug Error:', error);
}
);
```
### Step 2: Test Basic Functionality
```javascript
// Start listening for any sender
cordova.plugins.OTPReader.startListening(
null, // Any sender
function(result) {
console.log('Success:', result);
if (result.listening) {
console.log('✅ NOW SEND YOUR SMS!');
} else if (result.message) {
console.log('📱 SMS Received:', result.message);
}
},
function(error) {
console.log('❌ Error:', error);
}
);
```
### Step 3: Check Android Logs
Connect device and run:
```bash
adb logcat | grep -E "(OTPReader|SMSBroadcastReceiver)"
```
Look for these key messages:
- `SMS USER CONSENT STARTED SUCCESSFULLY`
- `SMS BROADCAST RECEIVER TRIGGERED` (when SMS arrives)
- `SMS RETRIEVAL SUCCESSFUL` (when consent dialog should appear)
### Step 4: Test Different Scenarios
#### Scenario A: Any Sender
```javascript
cordova.plugins.OTPReader.startListening(null, callback, errorCallback);
```
#### Scenario B: Specific Sender
```javascript
cordova.plugins.OTPReader.startListening("XXXXXX-S", callback, errorCallback);
```
#### Scenario C: Phone Number Sender
```javascript
cordova.plugins.OTPReader.startListening("+1234567890", callback, errorCallback);
```
## Expected Log Flow
### When Working Correctly:
```
[OTPReader] === STARTING SMS USER CONSENT ===
[OTPReader] Sender phone number parameter: null (any sender)
[OTPReader] === SMS USER CONSENT STARTED SUCCESSFULLY ===
[OTPReader] ⚠️ CRITICAL: Send your OTP SMS NOW!
// ... SMS is sent ...
[SMSBroadcastReceiver] === SMS BROADCAST RECEIVER TRIGGERED ===
[SMSBroadcastReceiver] SMS_RETRIEVED_ACTION received with extras
[SMSBroadcastReceiver] SMS Retriever Status Code: 0
[SMSBroadcastReceiver] === SMS RETRIEVAL SUCCESSFUL ===
[SMSBroadcastReceiver] Consent intent found, showing user consent dialog
// ... User approves dialog ...
[OTPReader] SMS received: "Your OTP is 123456"
```
### When NOT Working:
1. **No broadcast received**: SMS wasn't detected by Google Play Services
2. **Timeout**: SMS took too long or wasn't detected
3. **User denied**: User rejected the consent dialog
## Quick Fix Attempts
### Try 1: Basic Test
1. Open debug_test.html in your app
2. Click "Start Listening (Any Sender)"
3. Wait for "Started listening" message
4. Send SMS from any phone
5. Check if broadcast receiver triggers
### Try 2: Remove Sender Filter
Change your client code to use `null` instead of specific sender:
```javascript
cordova.plugins.OTPReader.startListening(null, callback, errorCallback);
```
### Try 3: Check Permissions
Verify SMS permissions are granted:
```javascript
cordova.plugins.OTPReader.getDebugInfo(function(result) {
console.log('Permissions:', result.permissions);
});
```
### Try 4: Restart App
Sometimes the broadcast receiver needs a fresh start after permission changes.