Articles of google cloud messaging

即使关闭应用程序(滑动/滑动)也会收到GCM消息

以下是在MainActivity中用作BroadcastReceiver的代码 //Initializing our broadcast receiver mRegistrationBroadcastReceiver = new BroadcastReceiver() { //When the broadcast received //We are sending the broadcast from GCMRegistrationIntentService @Override public void onReceive(Context context, Intent intent) { //If the broadcast has received with success //that means device is registered successfully if(intent.getAction().equals(GCMRegistrationIntentService.REGISTRATION_SUCCESS)){ //Getting the registration token from the intent String token = intent.getStringExtra(“token”); //Displaying […]

GCM / FCM中通知有效负载的大小

此问题最初是指Google云消息传递(GCM),但现在它也适用于取代GCM的新Firebase云消息传递(FCM)。 我想知道如何在包含“通知”字典时计算GCM有效负载的大小。 我一直在尝试针对Android的Google Cloud Messaging服务。 文档的某些部分说您可以发送最多4KB的数据,并在此处说“通知消息最多可以有2kb的负载”。 做一些测试我可以发送带有4KB数据的“数据”有效负载的消息,服务器接受它们没有按预期的错误。 但是,使用“通知”有效负载我发现我可以发送超过2KB数据的消息,并且服务器没有返回错误。 我预计这样的消息会太大了。 我发现“通知”有效负载与“数据”有效负载共享允许的4KB,但不是以相同的方式。 在“数据”有效负载中,您可以通过添加键和值的大小来计算大小。 “通知”有效负载占用的空间大于密钥的大小和它包含的值。 当包含“通知”字典时,如何预先计算有效载荷的大小?

对于GcmListenerService是onMessageReceived后台吗?

当我扩展GcmListenerService , onMessageReceived是在后台进程中运行还是在UI线程上运行? 我需要知道是否可以在方法体内进行网络调用而不使用asyncTask等。 我查看了源代码,果然它是一个没有处理程序的vanilla服务。 但是有一些关于THREAD_POOL_EXECUTOR的代码和许多明显混淆的东西。

创建通知时罕见的RuntimeException

我有一个GcmListenerService侦听GCM消息,然后创建一个通知: public class MyGcmListenerService extends GcmListenerService { NotificationManager notificationManager; @Override public void onMessageReceived(final String from, final Bundle data) { super.onMessageReceived(from, data); notificationManager = (NotificationManager) getApplicationContext().getSystemService(NOTIFICATION_SERVICE); String title = data.getString(“title”); String messager = data.getString(“message”); Notification notification = new NotificationCompat.Builder(getApplicationContext()) // set title, message, style etc .build(); notificationManager.notify(0, notification); } } 一切都很标准。 这对于成千上万的用户而言每天工作数千次。 我确实通过Crashlytics收到上述几行的以下崩溃: 致命exception:java.lang.RuntimeException无法在未调用Looper.prepare()的线程内创建处理程序 这几乎完全发生在Android 6(98%)和制造商称为TCLCommunications的设备上。 […]

FCM下游消息不遵循priority / time_to_live #Askfirebase

我以前广泛使用过GCM 3.0,实际上是消息应用程序的主干。 但是,既然现在有一个新应用程序的FCM,我正在使用FCM。 现在,我看到我推送它的下游消息的奇怪行为。 这是我试图推动的内容。 String json = “{\n” + ” \”to\”: \””+ token + “\”,\n” + ” \”priority\”: \”high\”,\n” + ” \”time_to_live\”: 0 ,\n” + ” \”data\”: ” + dataJson + “}”; HttpClient httpClient = HttpClientBuilder.create().build(); HttpPost post = new HttpPost(FCM_URL); post.addHeader(“Content-Type”, “application/json”); post.addHeader(“Authorization”,”Key=”+SERVER_KEY); StringEntity postingString = new StringEntity(json);//gson.tojson() converts your pojo to json […]

即使App已关闭,也会收到Android推送通知

我尝试过使用Google GCM但是当应用关闭时(从任务管理器中滑动或清除),它不会收到任何推送通知。 当我再次打开应用程序时,通知已经消失。 GCM正致力于: – 应用程序已打开 – 应用程序已最小化 不工作: – 应用程序关闭(从任务管理器轻扫) – 通过清除任务管理器中所有打开的应用程序关闭应用程序 即使应用程序像Facebook或Instagram一样关闭,我也希望收到推送通知。 我怎么能实现这个? 这可能在GCM中有用吗? 如果有,怎么样? 如果没有,那么实现这个的另一种方法是什么? 这是我的代码: AndroidManifest.xml中 MyGcmListenerService.java: public class MyGcmListenerService extends GcmListenerService { private static int notifId = 0; private static final String TAG = “MyGcmListenerService”; /** * Called when message is received. * * @param from SenderID of the sender. […]

GCM的注册ID重复

我们有一个使用GCM的应用。 当用户首次打开应用程序时,应用程序会检查共享首选项以查看用户是否先前已注册。如果注册ID不是从GCM获取并存储到共享首选项。 还有一个第三方服务器,其中存储了用户ID和注册ID。 我阅读并实现了以下针对规范id问题的案例: 在发送通知期间,如果接收到新的注册ID(规范id),则使用第三方服务器中的规范id更新旧的注册ID。 当用户卸载应用程序时,当第三方服务器向卸载的应用程序注册ID发送通知时,未收到注册消息,并且从第三方数据库中删除注册ID。 作为开发人员,我们在数据库中存储了许多注册ID。 因为我们经常卸载并安装app。 通常用户不会这样做。 然后我们考虑使用设备ID作为设备的唯一ID,并检查用户是否先前注册过。 可以使用Android设备ID吗? 我应该考虑什么来防止设备的多个注册ID? 这些多个注册ID会导致多次推送到Android设备。 多个注册ID主要由以下原因引起: 该应用程序最近已卸载并重新安装。 如何检测已卸载和安装的用户并且已经有注册ID? 最近清除了缓存和/或清除了应用程序的数据。 我怎样才能检测到用户清除了应用数据并且已经注册了注册ID? 处理规范ID的最佳做法是什么?

从Android应用程序控制DOM元素

我试图从Android设备控制播放/暂停html DOM元素(在PC中打开的浏览器中)。 在html页面(在谷歌浏览器浏览器中)有一个标签,所以我可以像这样控制它: //js code document.querySelector(“video”).play(); document.querySelector(“video”).pause(); 但我希望从Android设备运行,所以我使用GCM 。 我在这里阅读并获得了一些见解,但我仍然有一些问题。 首先,由于我在eclipse中编写,并且它没有看到documentvariables,因此会产生错误。 那么eclipse如何识别html页面中的element ,以便我可以在设备上编译和安装apk? 我在哪里指定要与之通信的页面url? (发送播放/暂停命令) 要在java中运行js ,我正在使用Rhino 。 我查看了文档中的示例,但我仍然不确定@JSFunction注释是否足以声明js函数。 这是我的代码: import com.alaa.chromote.util.SystemUiHider; import com.google.android.gcm.GCMRegistrar; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.WindowManager; import android.widget.Button; import android.widget.Toast; import android.view.View.OnClickListener; import org.mozilla.javascript.*; import org.mozilla.javascript.annotations.*; public class MainApplication extends Activity { private final static String GCM_SENDER_ID […]

我们可以在Firebase云消息传递中添加多少主题?

我正在构建一个使用Firebase云消息传递的应用程序。 但我有些疑惑。 我想知道我们可以在一个应用实例中制作多少主题? 在官方文档中,它写道 当单个应用程序实例订阅过多的主题时 它检索错误TOO_MANY_TOPICS 。 我想知道允许多少主题。 我知道我们没有关于订阅者数量的限制 ,这没关系,但我想知道我们可以在一个应用实例中制作多少主题。 感谢任何帮助。

GCM网络管理员 – 周期性任务未触发

我正在尝试使用GcmNetworkManager在我的应用程序中安排定期任务,该任务运行到API级别17.我按照GCM网络管理器页面( https://developers.google.com/上的说明)设置了所有内容。 云消息/网络管理员 ): 在我的AndroidManifest.xml中,我有: 在我的申请中,我有: long periodSecs = 30L; // the task should be executed every 30 seconds long flexSecs = 15L; // the task can run as early as -15 seconds from the scheduled time String tag = “myScan|1”; PeriodicTask periodic = new PeriodicTask.Builder() .setService(MyService.class) .setPeriod(periodSecs) .setFlex(flexSecs) .setTag(tag) .setPersisted(false) .setRequiredNetwork(com.google.android.gms.gcm.Task.NETWORK_STATE_ANY) .setRequiresCharging(false) .setUpdateCurrent(true) .build(); […]