iOS多开微信实时推送最强方式(原创)

由 夏日冰菓 发布

双开微信+推送≠耗电

写在前面
该方法你必须知道怎么双开了微信,并苦恼于实时推送或耗电问题,不然这篇文章很难啃。
安卓版本的可以离开了。

完美实现推送,收到微信后2秒钟左右手机收到通知,0耗电,杀死微信并不影响推送,和正版微信一样使用。

故事背景

作为自由职业必须及时响应客户,苦于IOS端无法多开微信,工作又必须实时响应,及时推送就成了问题,因为这个问题没能响应客户,还失去了好几个项目。工作台苦恼之余正打算换台手机的时候,右下角闪烁的微信图标给了我灵感。能否通过脚本判断微信图标闪烁或者声音,并推送一条通知到手机上?然后点击通知自动跳转到微信小号?思路没问题,直接开干。

代码实现

我尝试通过判断闪烁的图标来推送消息,问题就是锁屏之后就无法识别,而且我的笔记本平时只远程使用,只能通过笔记本微信发出声音我才知道收到消息,所以这里采用判断声音,来推送通知到手机。

1. 确定设备号

首先你需要确定你的声卡设备号,这段python可以列出当前设备下面所有声卡,并记下编号。

import pyaudio

# 初始化PyAudio
p = pyaudio.PyAudio()

# 获取系统中的声卡设备数量
device_count = p.get_device_count()

# 打印每个设备的信息
for i in range(device_count):
    device_info = p.get_device_info_by_index(i)
    print("Device {0}: {1}, {2} channels".format(i, device_info['name'], device_info['maxInputChannels']))

# 选择要监听的声卡设备索引
selected_device_index = 0  # 修改为你要监听的声卡设备索引

# 关闭PyAudio


文中例子使用的是Device 2 编号是2,请注意,后面的2 channels也要记住,下面代码需要用到。
channels是0的就不要用了,至少我测试用不了,可能我山寨本只能用立体混音。

2. Pyhton使用PyAudio库

PyAudio 是一个 Python 库,提供了与音频输入和输出设备进行交互的功能。它允许你在 Python 中录制声音、播放声音以及处理音频流。可以录制、播放、处理和设备管理。

import pyaudio
import numpy as np
import time
import requests

# 设定参数
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 48000
CHUNK = 1024
THRESHOLD = 1000  # 设置一个阈值,用于检测声音的强度
TIME_INTERVAL = 10  # 输出时间的间隔(秒)
API_URL = "https://api.day.app/tSe5Wf8zWuXXXXXX/微信小号/收到一条新消息?icon=https://cdn-images.lincloud.pro/blog/images/wechat.jpg&sound=healthnotification&group=微信通知&isArchive=0&url=pkc://"

def run_script():
    while True:
        try:
            
            # 初始化 PyAudio
            p = pyaudio.PyAudio()

            # 获取系统中的声卡设备数量
            device_count = p.get_device_count()

            # 选择要监听的声卡设备索引(请修改以下行,选择合适的声卡设备索引)
            selected_device_index = 2  # 修改为你想要监听的声卡设备索引

            # 打开选定的声卡设备
            stream = p.open(format=FORMAT,
                            channels=CHANNELS,
                            rate=RATE,
                            input=True,
                            input_device_index=selected_device_index,
                            frames_per_buffer=CHUNK)

            print("Listening for any sound...")

            last_detection_time = 0  # 记录上次检测到声音的时间戳

            while True:
                # 读取音频数据
                data = stream.read(CHUNK)
                # 将数据转换为numpy数组
                np_data = np.frombuffer(data, dtype=np.int16)
                # 计算音频数据的能量
                energy = np.sum(np_data ** 2) / len(np_data)
                
                # 如果能量超过阈值,则认为检测到了声音
                if energy > THRESHOLD:
                    # 获取当前时间
                    current_time = time.time()
                    # 如果距离上次检测到声音的时间大于等于设定的时间间隔,则输出当前时间并发起GET请求
                    if current_time - last_detection_time >= TIME_INTERVAL:
                        # 输出当前时间
                        print("Sound detected at:", time.strftime("%Y-%m-%d %H:%M:%S"))
                        # 发起GET请求
                        response = requests.get(API_URL)
                        # 打印请求结果
                        print("GET request status:", response.status_code)
                        # 更新上次检测到声音的时间戳
                        last_detection_time = current_time
        except Exception as e:
            print("An error occurred:", e)
            print("Restarting the script...")
        finally:
            # 停止音频流
            if 'stream' in locals() and stream.is_active():
                stream.stop_stream()
                stream.close()
            # 关闭 PyAudio
            p.terminate()

run_script()

不能照抄,需要修改的内容有CHANNELS(声道数量值一般是1,2)。RATE(采样率44100,48000)。TIME_INTERVAL(间隔时间10秒推送一次)。selected_device_index(设备编号,第一步获取并记下的设备编号)

脚本解释: 这个脚本主要是监听声卡(脚本是监听立体混音),如果收到微信消息(发出声音)就推送消息(使用Bark,如不懂请参考这篇文章)到手机,最短通知间隔10秒。

实测收到消息几秒钟之后就收到推送。微信无需后台,正真做到和正版微信一样。

可能有人会问为什么不直接识别微信波形文件来推送,这样电脑发出其他声音也不会影响推送,事实是可以的,但是波形文件只有2秒钟,经过测试准确率不高,如果能结合算法优化脚本,是可以实现精准推送,如果哪位大佬愿意优化脚本,或者有更好的实现方式可以留言探讨。

 

 

 

进阶推送

如果成功设置了推送,还可以设置点击推送消息自动跳转到对应的微信小号,非常方便
你需要安装轻松签来修改Bundleurl 参数
注意!这步修改完之后无法被第三方应用调用!比如,无法被游戏或应用调用授权登录等等。

配置方法有两种

  • 第一种
    以轻松签为例,打开应用-点击需要“多开的app”-查看文件位置-点击xxx.app-查看文件-找到并点击 Info.plist-属性编辑器。

    如下图所示,一级一级找到
    CFBundleURLType
    | --- item 0
    | --- CFBundleURLSchemes
    | --- itme 1 - weixin

将 weixin 改为 pkc ,保存。

最后签名安装,或者导出IPA格式
在 Safari 输入 pkc:// 即可调用多开应用了。

  • 第二种
    如果在 info.plist 用属性方式打开找不到 CFBundleURLTypes ,那就自己通过“文本编辑器”打开,拉到最后倒数第二行上面插入,添加以下代码:
<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>pkc</string>
    </array>
  </dict>
</array>

好了到这一步就全部结束了,可以开心愉快的玩耍了。看不惯 Bark 的原版红色推送图标的话,可以在 Bark 应用里更换其他的通知图标。


暂无评论

发表评论