تكامل تطبيقات الموبايل Flutter

ربط واتساب OTP مع Flutter — إرسال كود التحقق لتطبيقات الموبايل

أضف ميزة تسجيل الدخول والتحقق برقم الهاتف عبر WhatsApp لتطبيقات iOS و Android المطورة بـ Flutter. وفر تكلفة رسائل الـ SMS الباهظة مع تجربة مستخدم سريعة وعصرية.

⚠️

توصية أمنية هامة لتطبيقات الموبايل (Best Practice)

في تطبيقات الموبايل النهائية المرفوعة على App Store أو Google Play، يُنصح دائماً بعدم تضمين مفتاح الـ API داخل كود الموبايل مباشرة. الأفضل هو استدعاء الـ Backend الخاص بك (مثل Laravel أو Node.js) وهو من يتواصل مع EzyCode Connect لحماية مفاتيحك ورصيدك.

1. إضافة الحزم المطلوبة إلى pubspec.yaml

# pubspec.yaml
dependencies:
  flutter:
    sdk: flutter
  http: ^1.2.0
  uuid: ^4.3.3

2. كلاس خدمة الإرسال WhatsAppOtpService

// lib/services/whatsapp_service.dart
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:uuid/uuid.dart';

class WhatsAppOtpService {
  static const String _baseUrl = 'https://connect-dashboard.ezycode.dev/connect/v1';
  final String apiKey;

  WhatsAppOtpService({required this.apiKey});

  /// Dispatch OTP via WhatsApp
  Future<Map<String, dynamic>> sendOtp({
    required String phoneNumber,
    required String code,
  }) async {
    final url = Uri.parse('$_baseUrl/messages');
    final idempotencyKey = 'flutter_${const Uuid().v4()}';

    final response = await http.post(
      url,
      headers: {
        'Authorization': 'Bearer $apiKey',
        'Content-Type': 'application/json',
        'Accept': 'application/json',
        'Idempotency-Key': idempotencyKey,
      },
      body: jsonEncode({
        'to': phoneNumber,
        'type': 'text',
        'text': 'رمز التحقق لتطبيقك هو: $code. لا تشاركه مع أي شخص.',
      }),
    );

    final data = jsonDecode(response.body);

    if (response.statusCode >= 200 && response.statusCode < 300) {
      return {
        'success': true,
        'messageId': data['data']['id'],
        'status': data['data']['status'],
      };
    } else {
      return {
        'success': false,
        'statusCode': response.statusCode,
        'error': data['message'] ?? 'Failed to dispatch OTP',
      };
    }
  }
}

3. نموذج شاشة إدخال رمز التحقق

// lib/screens/otp_verification_screen.dart
import 'package:flutter/material.dart';
import '../services/whatsapp_service.dart';

class OtpVerificationScreen extends StatefulWidget {
  final String phoneNumber;
  const OtpVerificationScreen({Key? key, required this.phoneNumber}) : super(key: key);

  @override
  State<OtpVerificationScreen> createState() => _OtpVerificationScreenState();
}

class _OtpVerificationScreenState extends State<OtpVerificationScreen> {
  final TextEditingController _otpController = TextEditingController();
  bool _isLoading = false;

  void _verifyOtp() {
    // Validate OTP against your authentication backend
    final code = _otpController.text.trim();
    if (code.length == 6) {
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(content: Text('تم التحقق بنجاح!')),
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('التحقق عبر واتساب')),
      body: Padding(
        padding: const EdgeInsets.all(24.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            Text(
              'أدخل رمز التحقق المرسل إلى: ${widget.phoneNumber}',
              style: Theme.of(context).textTheme.bodyMedium,
            ),
            const SizedBox(height: 20),
            TextField(
              controller: _otpController,
              keyboardType: TextInputType.number,
              maxLength: 6,
              textAlign: TextAlign.center,
              style: const TextStyle(fontSize: 24, letterSpacing: 8, fontWeight: FontWeight.bold),
              decoration: const InputDecoration(
                hintText: '------',
                border: OutlineInputBorder(),
              ),
            ),
            const SizedBox(height: 24),
            ElevatedButton(
              onPressed: _isLoading ? null : _verifyOtp,
              child: const Text('تأكيد الرمز'),
            ),
          ],
        ),
      ),
    );
  }
}

أسئلة شائعة لمطوري Flutter

هل يدعم التحقق على هواتف أندرويد و iOS معاً؟

نعم، الرسالة تصل إلى تطبيق واتساب المثبت على جهاز المستخدم سواء كان iPhone أو أندرويد بشكل موثوق وسريع.

كم يوفر التحقق عبر واتساب مقارنة بـ SMS؟

رسائل SMS الدولية قد تكلف 0.05$ إلى 0.15$ للرسالة الواحدة في الشرق الأوسط ومصر، بينما رسالة واتساب OTP في EzyCode تكلف 0.009$ فقط (توفير أكثر من 80%).

ابدأ تجربة إرسال كود التحقق لتطبيقك الآن

سجل مجاناً، أضف رقم هاتفك للاختبار، وجرب وصول الرسالة خلال ثوانٍ معدودة.