كيفية إنشاء API على أي تطبيق أندرويد. على سبيل المثال ، WhatsApp

تحية طيبة! تم رسم مهمتي: من الضروري دمج الرسل في نظام CRM ، وإلا فإنه من الصعب تحليل عمل المديرين عندما يتواصلون مع العملاء باستخدام هاتف واحد "عام" مشترك. وكان أول شيء فعله هو ربط WhatsApp ، باعتباره أحد أكثر برامج المراسلة الفورية شيوعًا لجمهورنا المستهدف.

تحليل الوضع ...


كل ما يبدو أنه مطلوب هو إرسال واستقبال الرسائل. والعديد من المزالق ...

1. API الرسمية


لم يكن هناك API رسمي في الإصدار حينها. لكن Facebook تمكن من إرسال رابط إلى النموذج لربط واجهة برمجة التطبيقات الرسمية ، التي يتم اختبارها.

2. خدمة الطرف الثالث. اتصال عبر WhatsApp WEB


اعتبرت أن خيار الطريقة "الرمادية" ، واستخدام خدمة غير رسمية ترسل رسائل عبر واجهة WEB ، مرتبطًا بمسح رمز الاستجابة السريعة.

لكن هذا اعتماد على واجهة برمجة تطبيقات شخص آخر ، في أي لحظة يمكن أن يسقط كل شيء ، ولم أكن أرغب في نقل أرقام العملاء إلى خدمة شخص آخر. كما أن الكتابة تحت واجهة برمجة تطبيقات مؤلف شخص آخر ، والتي سيكون عليك إعادة كتابتها عند الانتقال إلى خدمة أخرى ، هي أيضًا متعة.

حسنًا ، تحتاج أيضًا إلى إبقاء الهاتف قيد التشغيل (على الرغم من أن بعض الخدمات مقابل رسوم إضافية حلت هذه المشكلة :)

3. الوضع اليدوي


زرع شخص ، والسماح للنسخ ولصق الرسائل للعملاء. يمزح كنكتة ، ولكن من هذه الفكرة ولدت حل!

القرار


إرسال رسالة


صورةهناك مثل هذا البرنامج لأتمتة الإجراءات لنظام Android ، يسمى Tasker ، وهو واحد من أول هذه البرامج. لكنني لم أفهمها في المرة الأولى ... بحثت عن نظائرها ، صادفت برنامج Automagic . في ذلك ، يتم رسم الأحداث والإجراءات والفروع كمخطط بياني.

Offtop

وفيه توصلت إلى حل ، لسنا بحاجة إلى حقوق الجذر. اتضح باستخدام طريقة الوخز العلمي لرسم نص إرسال رسالة ، ثم سأدعو الدفق ، لذلك يتم استدعاء كل خوارزمية مرسومة في هذا البرنامج. والآن سنحلل عمله:

لقطة شاشة لتدفق رسائل WhatsApp
image

  1. كل 5 ثوانٍ ، يتم إنشاء حدث بواسطة مؤقت دوري وإرساله إلى الكتلة التالية.
  2. HTTP Request , , ? PHP.
  3. JSON.
  4. , , .
  5. , , , , . , , , , :
  6. , WhatsApp'
  7. . Control UI. ( ), .

    , ,
    sleep(2000);  // 2    
     
    sle = 200;
    ch_c = 0;
    ch = false;
    is_sended = false;
     
    sleep(sle);
    ch = existsElementById("com.whatsapp:id/entry"); // ,      
    sleep(sle);
    if (ch == false) {
      ch = existsElementById("com.whatsapp:id/entry"); //  
      ch_c = ch_c + 1;
      sleep(1500);
    }
    
    if (ch == false) {
      ch = existsElementById("com.whatsapp:id/entry"); 
      ch_c = ch_c + 1;
      sleep(5500);
    }
    
    ch = existsElementById("com.whatsapp:id/entry");
    sleep(sle);
    setText2ById("com.whatsapp:id/entry",text); //  
    sleep(sle);
    
    clickById("com.whatsapp:id/send");  //   
    sleep(sle);
    back();
    sleep(sle);
    back();
    status = 2;
    
    if(ch == true) {  //   , ,    
      is_sended = true;
      status = 1;
    }
    

  8. نرسل نتائج إرسال رسالة إلى الخادم.
  9. نعود إلى الشاشة الرئيسية.

استقبال الرسائل


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

لقطة شاشة لخوارزمية تلقي الرسائل


الإيجابيات والسلبيات والصقل والخطط


تؤدي الخوارزمية الوظيفة الرئيسية لإرسال رسالة بشكل مثالي. نظرًا لعدم استخدام واجهة WEB ، فإن الاستيلاء على حمام من المراسلة أقل خطورة ، كما يبدو لي. استأجرت خادمًا افتراضيًا ضعيفًا وثبتت Android هناك ونقلت كل شيء.

يستغرق إرسال رسالة واحدة إلى جهة اتصال جديدة حوالي 5 ثوانٍ. للتحقق من التسليم وقراءة الرسالة ، قمت بتطوير دفق منفصل ، ولكنه في شكل مسودة وأحيانًا لا يعمل. لذلك ، عنه في وقت لاحق.

في الوقت الحالي ، لا يتم تنفيذ وظيفة استقبال رسائل الوسائط (الصور والصوت والمرفقات) ، ولكن يمكن تنزيلها من WhatsApp باستخدام زر مشاركة الرسالة في المستقبل.

بعد ذلك بقليل ، أريد أن أكتب جذع SIP فوق الجهاز الظاهري حيث يعمل برنامج المراسلة ، والذي من خلاله سيكون من الممكن الاتصال عبر WhatsApp من خلال SIP ^. ^ والذي يمكن أن يوفر تكاليف الاتصال.

أرغب أيضًا في التقاط لقطات شاشة من الصور الرمزية وإرسالها إلى الخادم لإرفاق صورة مصغرة لجهة اتصال في نظام CRM.

حسنًا ، بشكل عام ، الأكثر إثارة للاهتمام: هذه الطريقة في الالتفاف في API مناسبة لأي تطبيق تقريبًا لنظام Android :)

تم تطوير كل شيء في الأصل وإطلاقه على Android 9 ، xiaomi mi 9 se ، الجذر ليس صحيحًا.

Source: https://habr.com/ru/post/undefined/


All Articles