Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不同环境中的Android C2DM(登台、生产、调试)_Android_Android C2dm - Fatal编程技术网

不同环境中的Android C2DM(登台、生产、调试)

不同环境中的Android C2DM(登台、生产、调试),android,android-c2dm,Android,Android C2dm,我的问题是,我正在接收所有环境中的所有通知。所有生成当前都具有相同的包名。因此,设备上只能同时安装一个版本。但我会收到针对所有构建的通知(可以是正确的构建,也可以是其他构建) 我查了一下注册号,结果总是一样的。问题可能是所有应用程序共享相同的包名 我看到的注册参数有: 舱单中的广播接收器: <receiver android:name="com.google.android.c2dm.C2DMBroadcastReceiver" android:permission="com.google

我的问题是,我正在接收所有环境中的所有通知。所有生成当前都具有相同的包名。因此,设备上只能同时安装一个版本。但我会收到针对所有构建的通知(可以是正确的构建,也可以是其他构建)

我查了一下注册号,结果总是一样的。问题可能是所有应用程序共享相同的包名

我看到的注册参数有:

  • 舱单中的广播接收器:

    <receiver android:name="com.google.android.c2dm.C2DMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
          <action android:name="com.google.android.c2dm.intent.RECEIVE" />
          <category android:name="com.company.product" />
        </intent-filter>
        <intent-filter>
          <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
          <category android:name="com.company.product" />
      </intent-filter>
    </receiver>
    
  • 为了只接收针对正在运行的应用程序(环境)的通知,我必须更改哪些内容


    另外,如果问题是包名,我不明白确切的原因。假设我使用调试版本登录。以包名x注册。现在我注册了production,也注册了包名x。我是否会收到来自调试的通知,因为它以前是用相同的包名注册的?这是否意味着,如果我从未使用/注册过调试版本,我将永远不会使用生产应用程序收到来自调试环境的通知?

    目前,我刚刚为调试环境重命名了包。因此,就像我有其他应用程序一样,它变得非常混乱,但是。。。 我不知道是否还有其他解决方案,但我很高兴能找到:)

    编辑:也许可以通过第三方服务器解决。我的意思是,在注册时,您可以向服务器发送一个值为debug/staging/prod的变量,它会将您的设备id放入3个数据库中的一个(其中一个数据库的应用程序注册为debug,一个用于staging,一个用于prod)
    请让我知道你对此有何看法

    我已经有了一个构建脚本,可以为具有不同名称的生产环境创建应用程序。但我从不使用它。你确定它解决了C2DM问题吗?我这样做只是为了调试,但对于不同版本的应用程序,我认为它是不可能的:(这是相同的原理。你在调试版本的包名“staging”中加了一个“debug”关于登台版本等等。好主意,但是服务器用户不想这样做。必须在客户端解决它。我将使用不同的包名进行构建,无论如何都必须这样做才能同时使用所有版本。希望这也能解决C2DM问题。
    Intent registrationIntent = new Intent(REQUEST_REGISTRATION_INTENT);
    registrationIntent.setPackage(GSF_PACKAGE);
    registrationIntent.putExtra(EXTRA_APPLICATION_PENDING_INTENT,
            PendingIntent.getBroadcast(getApplicationContext(), 0, new Intent(), 0));
    registrationIntent.putExtra(EXTRA_SENDER, "app@company.com");
    context.startService(registrationIntent);