如何在任何Android应用程序上制作API。例如,WhatsApp

问候!我的任务被画出来了:有必要将Messenger集成到CRM系统中,否则当经理使用一个通用的“工作”电话与客户进行沟通时,很难分析经理的工作。首先要做的是连接WhatsApp,它是目标受众中最受欢迎的即时通讯工具之一。

情况分析...


似乎所需要做的就是发送和接收消息。如此多的陷阱...

1.官方API


那时该版本中没有正式的API。但是,Facebook成功地发送了指向表单的链接,以连接正在测试的官方API。

2.第三方服务。通过WhatsApp WEB连接


我考虑了“灰色”方法的选择,即通过扫描QR码来连接通过WEB界面发送消息的非官方服务的使用。

但这依赖于其他人的API,任何时候任何情况都可能消失,我不想将客户号码转移给其他人的服务。而且,使用别人的作者的API编写代码(移到另一项服务时必须重写)也是一种乐趣。

好吧,您还需要保持手机开机(尽管某些服务需要额外付费才能解决此问题:)

3.手动模式


种植一个人,让消息复制粘贴给客户。开个玩笑作为笑话,但是从这个主意中诞生了一个解决方案!

决断


讯息发送


图片有一个这样的程序可以自动执行Android操作,称为Tasker,这是最早的此类程序之一。但是我第一次没有弄清楚……寻找类似物时,遇到了Automagic程序其中,事件,动作和分支被绘制为框图。

关闭顶部

在其中,我想出了一个解决方案,我们不需要root权限。原来,使用科学的戳方法来绘制消息发送脚本,然后我将调用流,因此在此程序中将调用每个单独的绘制算法。现在我们将分析他的工作:

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. 我们返回主屏幕。

接收讯息


接收消息要容易得多。我们将该事件发送到了Messenger的通知中。通知到达后,将其标记为已读,然后按原样发送给服务器。那已经解析了收件人和文本。

消息接收算法的屏幕截图


利弊,完善和计划


该算法执行完美发送消息的主要功能。因为不使用WEB界面,所以从我看来,从Messenger上洗个澡的风险较小。我租了一个虚弱的虚拟服务器,在那里安装了Android并传输了所有内容。

将一条消息发送到新联系人大约需要5秒钟。为了检查传递和阅读消息,我开发了一个单独的流,但是它是草稿形式的,有时不起作用。因此,关于他以后。

目前,尚未实现接收媒体消息(照片,音频,附件)的功能,但是将来可以使用共享消息按钮从WhatsApp下载该消息。

过一会儿,我想在运行Messenger的虚拟机上编写一个SIP中继,通过它可以通过WhatsApp和SIP ^。进行调用。^这样可以节省通信成本。

我还想拍摄化身的屏幕截图并将其发送到服务器,以将缩略图附加到CRM系统中的联系人。

好吧,通常来说,最有趣的是:API中的这种包装方法几乎适用于所有Android应用程序:)

一切最初都是在Android 9上开发并启动的,小米mi 9 se,root不正确。

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


All Articles