当前位置: 首页 > 知识库问答 >
问题:

Android GCM“未注册”,尽管getRegistrationId返回一个ID

李和昶
2023-03-14

我们将GCM与多个Android设备一起使用。我们能够使用GCM通知的一些设备(不是全部)最近无法接收GCM触发器(GCM服务器返回未注册)。

然而,当我们在设备上调用getRegistrationId()时,我们会在设备正常工作时获得相同的注册ID。

知道为什么服务器返回的是未注册的,而客户端返回的是实际的ID吗?

共有2个答案

卓宏达
2023-03-14

使用此代码可以使用asynk任务获取注册id

public class MainActivity extends Activity {
    String token;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new AsyncTaskRunner().execute();

    }

    private class AsyncTaskRunner extends AsyncTask<String, String, String> {

        private String resp;

        @Override
        protected String doInBackground(String... params) {
            InstanceID instanceID = InstanceID.getInstance(MainActivity.this);

            try {
                token = instanceID.getToken(
                        getString(R.string.gcm_defaultSenderId),
                        GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(String result) {

            ((TextView) findViewById(R.id.text1)).setText(token);
        }

        @Override
        protected void onPreExecute() {

        }

    }
}
闻人鸿飞
2023-03-14

如果发生以下情况,GCM将返回NotRegistered

  • 如果客户端应用程序向GCM注销

此令牌不应再次使用。

在设备端,您应该调用InstanceID。getToken获取新令牌,然后将此新令牌发送到服务器,以便向应用发送消息

您似乎正在使用旧注册ID向设备发送消息。如果是这样,您应该切换到使用InstanceID令牌向设备发送消息。

 类似资料:
  • 问题内容: 我正在尝试为我的Web服务完成数据库访问方法。服务和数据库访问方法对于数据库中的所有其他表都可以正常工作,但是这一特定方法不能。当我查询数据库时,总是返回空(表示)。 经过多次尝试,我将查询简化为简单的查询,看问题是否是我输入的数据和查询中使用的数据之间的某些区别,但是即使是用于选择表中所有项目的简单查询也没有返回任何结果。 这是我用来从数据库中获取信息的方法: 任何帮助将不胜感激。

  • 问题内容: create_PaperBean.java 我正在使用struts,当执行该bean时,会在数据库中创建一个表,但是insert的值仍为零!因此,我无法进入正确的页面来进一步运行Web应用程序。我究竟做错了什么? 问题答案: 要么返回SQL数据操纵语言(DML)语句的行数的SQL语句回报 什么 。 创建表既不是INSERT也不是UPDATE,因此正常接收是因为没有行受到影响。

  • 在我的xml中,我已经添加了以下属性。 我已将Focusable和FocusableOnTouch设置为true。我还将cursorVisible设置为true。为了确保光标不是白色的(背景是白色的),我将textCursorDrawable设置为“@null” 但光标在视图中仍然不可见。我在edittext中实现了一个touchListener(因为我还需要在父布局中移动它)。因此,我将键盘设置

  • 我有一个Spring启动1.5.1服务和一个Spring启动管理2.0.1。 考虑到这个留档(http://codecentric.github.io/spring-boot-admin/2.0.0/#monitoring-spring-boot-1.5.x),它们是兼容的。 这是我的客户端设置 我的入口 build.gradle 应用yml 对于服务器设置,我遵循了这里的入门指南http://c

  • 问题内容: 我有一个问题,尽管数据库中存在一个键/条目,但Redis命令仍会返回。 我从未在本地计算机上运行的Redis服务器上遇到此问题。令人讨厌的是,没有错误或任何东西。 我使用Redis Desktop Manager来检查Heroku Redis数据库中的内容。 这是获取数据库中值的NodeJS代码: 我可能会做的一件异常事如下:我同时有多达6个处理数据库中的值。 知道什么会导致这种奇怪的

  • 问题内容: 我的数据如下所示: 当我尝试打电话时,我会全部收回。我在excel中进行了测试,确实可以计算出相关性。 知道为什么会这样吗? 我很乐意发布更多信息,但不确定会有所帮助。 问题答案: 杰森(Jason),使用示例数据对我来说很好用。 我在您的data.info()中注意到dtype上贴有’None’。当我加载样本数据时,我得到 我想象是什么原因导致“无”导致您的问题。 希望这可以帮助[希