您的位置:首页 > 移动开发 > 微信开发

微信云控系统源码的核心代码实现,和群控系统的区别,以及优势。

2017-12-07 12:57 1146 查看
          微信云控系统是相对于微信群控系统而言的,微信云控系统与群控系统的区别在于,微信群控系统是通过usb线控制手机去执行命令,而微信云控系统是通过网络传输命令去执行命令。在微信群控系统中,因为受限于电脑端口的约束,以及adb的约束,一台电脑最多直接控制上百部手机,而在微信云控系统中,一台电脑可以控制成千上万部手机。可以给无数手机下发命令。不会受限于端口这些。

        今天我们来详细介绍下微信云控系统源码的核心实现。在微信云控系统中,主要由服务器端,手机客户端,模拟点击实现等部分组成。其系统关键的核心在于服务器端的命令推送到手机上,以及手机接收到命令后执行相应的程序,去模拟人工操作。在开发过程中,我们主要用到的开发语言有:PHP,Android,Java等。

         服务器端推送,相信大家都接触过各种各样的第三方推送服务,有极光,个推,百度等等。在我们实现的云控系统中选用的是个推来实现命令的推送。后台设备管理,以及命令参数的下发等等,都是大家都会经常遇到的各种管理系统的开发类似的。其中云控推送的相关代码为

             //多推接口案例

public function pushMessageToList($idsArr,$cmd)

{

    putenv("gexin_pushList_needDetails=true");

    putenv("gexin_pushList_needAsync=true");

    $igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);

    //消息模版:

    // 1.TransmissionTemplate:透传功能模板

    // 2.LinkTemplate:通知打开链接功能模板

    // 3.NotificationTemplate:通知透传功能模板

    // 4.NotyPopLoadTemplate:通知弹框下载功能模板

    

    // var_dump("ssssssssssss");

    //$template = IGtNotyPopLoadTemplateDemo();

    //$template = IGtLinkTemplateDemo();

    //$template = IGtNotificationTemplateDemo();

    $template = $this->IGtTransmissionTemplateDemo($cmd);

    //个推信息体

    $message = new \IGtListMessage();

    $message->set_isOffline(true);//是否离线

    $message->set_offlineExpireTime(3600 * 12 * 1000);//离线时间

    $message->set_data($template);//设置推送消息类型

//    $message->set_PushNetWorkType(1); //设置是否根据WIFI推送消息,1为wifi推送,0为不限制推送

//    $contentId = $igt->getContentId($message);

    $contentId = $igt->getContentId($message,"toList任务别名功能");//根据TaskId设置组名,支持下划线,中文,英文,数字

     foreach ($idsArr as $k=>$v) {
   $target = new \IGtTarget();

        $target->set_appId(APPID);

        $target->set_clientId($v);

//    $target1->set_alias(Alias);

         $targetList[$k] = $target;

        }

    //接收方1

    $rep = $igt->pushMessageToList($contentId, $targetList);

    return $rep;

   // var_dump($rep);

   // echo ("<br><br>");

}

Android端相关的命令接收代码为:

@Override
public void onReceiveMessageData(Context context, GTTransmitMessage msg) {
String appid = msg.getAppid();
String taskid = msg.getTaskId();
String messageid = msg.getMessageId();
byte[] payload = msg.getPayload();
String pkg = msg.getPkgName();
String cid = msg.getClientId();

// 第三方回执调用接口,actionid范围为90000-90999,可根据业务场景执行
boolean result = PushManager.getInstance().sendFeedbackMessage(context, taskid, messageid, 90001);
Log.d(TAG, "call sendFeedbackMessage = " + (result ? "success" : "failed"));

Log.d(TAG, "onReceiveMessageData -> " + "appid = " + appid + "\ntaskid = " + taskid + "\nmessageid = " + messageid + "\npkg = " + pkg
+ "\ncid = " + cid);
if (payload == null) {
Log.e(TAG, "receiver payload = null");
} else {
data = new String(payload);
Log.d(TAG, "receiver payload = " + data);


在模拟点击,模拟输入的实现过程中,我们主要用到的是UIautomator框架,在这里我们简单提供一些代码,如有需要源码以及想要二次开发的朋友请加V:393231639

public void testDemo() throws UiObjectNotFoundException {

// Good practice to start from a common place
    getUiDevice().pressHome();
    //UiDevice mDevice = UiDevice.getInstance(getInstrumentation());
   // getUiDevice().takeScreenshot(storePath);
    
    //UiAutomation uiAutomation=getUiAutomation();
    //Select Home page
   // this.getUiDevice().takeScreenshot(storePath)
UiObject homePage = new UiObject(new UiSelector());
homePage = homePage.getChild(new UiSelector().index(1));
homePage.getChild(new UiSelector().index(0)).getChild(new UiSelector().index(1)).click();
homePage.getChild(new UiSelector().index(0)).getChild(new UiSelector().index(1)).click();
//Open setting
UiObject settingBtn = new UiObject(new UiSelector().text("Setting"));
settingBtn.clickAndWaitForNewWindow();
//Close  setting
UiObject closeBtn = new UiObject(new UiSelector().index(0)).getChild(new UiSelector().index(2));
closeBtn.clickAndWaitForNewWindow();



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  微信 源码
相关文章推荐