How to avoid delay in Android GCM messages / change heartbeat

后端 未结 5 1995
长发绾君心
长发绾君心 2020-11-28 21:14

I\'ve been reading many posts regarding a GCM issue that affects some people. It seems that in some devices/routers/carriers the notifications suffer delays. I\'ve experienc

5条回答
  •  悲&欢浪女
    2020-11-28 22:04

    An alternative solution if you have root permissions - You can check and change the GCM heartbeat times manually. The default is 900000 (15 minutes). I set to 240000 (4 minutes) to be safe and avoid 5 minute router timeouts.

    Check heartbeat time (shell)

    adb shell
    su
    sqlite3 /data/data/com.google.android.gsf/databases/gservices.db "SELECT * FROM main WHERE name ='gtalk_max_server_heartbeat_time';"
    sqlite3 /data/data/com.google.android.gsf/databases/gservices.db "SELECT * FROM main WHERE name LIKE 'gtalk_%heartbeat_ping_interval_ms';"
    

    Change heartbeat time (shell)

    sqlite3 /data/data/com.google.android.gsf/databases/gservices.db "UPDATE main SET value = '240000' WHERE name = 'gtalk_max_server_heartbeat_time'
    sqlite3 /data/data/com.google.android.gsf/databases/gservices.db "UPDATE main SET value = '240000' WHERE name LIKE 'gtalk_%heartbeat_ping_interval_ms'
    

    Change heartbeat time (Android)

    Process proc = Runtime.getRuntime().exec("su");
    DataOutputStream os = new DataOutputStream(proc.getOutputStream());
    os.writeBytes("sqlite3 /data/data/com.google.android.gsf/databases/gservices.db \"UPDATE main SET value = '240000' WHERE name = 'gtalk_max_server_heartbeat_time'\"\n");
    os.writeBytes("sqlite3 /data/data/com.google.android.gsf/databases/gservices.db \"UPDATE main SET value = '240000' WHERE name LIKE 'gtalk_%heartbeat_ping_interval_ms'\"\n");
    os.writeBytes("exit\n");
    os.writeBytes("exit\n");
    os.flush();
    os.close();
    proc.waitFor();
    

提交回复
热议问题