Android - Android 6.0.1上的GCM错误“SERVICE_NOT_AVAILABLE”

时间:2016-04-02 12:13:24

标签: android google-cloud-messaging

我正在开发Android的聊天应用程序。但是在尝试向GCM注册时,我收到以下错误:

    <?php
        // file another_file.php
        require('./your/path/to/Database.class.php');
        $db = new Database();
        $connection = $db->getConnection();
    ?>

我使用以下代码获取GCM令牌:

04-02 16:59:29.793 29773-30031/purepush.group101.talktoday W/InstanceID/Rpc: Found 10010
04-02 16:59:29.920 29773-30031/purepush.group101.talktoday W/System.err: java.io.IOException: SERVICE_NOT_AVAILABLE
04-02 16:59:29.922 29773-30031/purepush.group101.talktoday W/System.err:     at com.google.android.gms.iid.zzc.zzb(Unknown Source)
04-02 16:59:29.922 29773-30031/purepush.group101.talktoday W/System.err:     at com.google.android.gms.iid.zzc.zza(Unknown Source)
04-02 16:59:29.922 29773-30031/purepush.group101.talktoday W/System.err:     at com.google.android.gms.iid.InstanceID.zzc(Unknown Source)
04-02 16:59:29.922 29773-30031/purepush.group101.talktoday W/System.err:     at com.google.android.gms.iid.InstanceID.getToken(Unknown Source)
04-02 16:59:29.922 29773-30031/purepush.group101.talktoday W/System.err:     at purepush.group101.talktoday.LoginActivity$GetGCMTokenTask.doInBackground(LoginActivity.java:240)
04-02 16:59:29.923 29773-30031/purepush.group101.talktoday W/System.err:     at purepush.group101.talktoday.LoginActivity$GetGCMTokenTask.doInBackground(LoginActivity.java:211)
04-02 16:59:29.923 29773-30031/purepush.group101.talktoday W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:295)
04-02 16:59:29.923 29773-30031/purepush.group101.talktoday W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
04-02 16:59:29.923 29773-30031/purepush.group101.talktoday W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
04-02 16:59:29.923 29773-30031/purepush.group101.talktoday W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
04-02 16:59:29.923 29773-30031/purepush.group101.talktoday W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
04-02 16:59:29.923 29773-30031/purepush.group101.talktoday W/System.err:     at java.lang.Thread.run(Thread.java:818)
04-02 16:59:29.958 29773-29773/purepush.group101.talktoday E/GcmReceiver: Failed to resolve target intent service, skipping classname enforcement
04-02 16:59:29.958 29773-29773/purepush.group101.talktoday E/GcmReceiver: Error while delivering the message: ServiceIntent not found.

清单:

InstanceID instanceID = InstanceID.getInstance(context);`
regToken = instanceID.getToken(getString(R.string.gcm_defaultSenderId), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);

Build.Gradle(应用模块)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="purepush.group101.talktoday">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <permission
        android:name="purepush.group101.talktoday.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />

    <uses-permission android:name="purepush.group101.talktoday.permission.C2D_MESSAGE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".LoginActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".MainActivity" />
        <activity android:name=".ChatActivity" />

        <receiver
            android:name="com.google.android.gms.gcm.GcmReceiver"
            android:exported="true"
            android:permission="com.google.android.c2dm.permission.SEND">
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

                <category android:name="purepush.group101.talktoday" />
            </intent-filter>
        </receiver>

        <service
            android:name=".utils.GCMMessageListener"
            android:enabled="true"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            </intent-filter>
        </service>
    </application>

</manifest>

现在有趣的是,这个错误只发生在运行6.0.1的Nexus 5上(Build:MMB29Q)。我在同事的运行5.1.1的Samsung Note 4上测试了这个应用程序,我能够用GCM成功注册他的设备。我使用GCM仅使用我的Nexus 5获得了多个应用程序的错误。

对此有任何帮助将不胜感激

谢谢!

3 个答案:

答案 0 :(得分:1)

请检查您的&#34; Nexus 5&#34;时钟,它应该是准确的,并尝试改变

buildToolsVersion "21.1.2"

类似于:buildToolsVersion "23.0.2" =&gt;我使用此版本,GCM与Android 6配合良好

<强>更新

我使用此方法注册我的GCM

 public void getRegId() {

    new AsyncTask<Void, Void, String>() {
        @Override
        protected String doInBackground(Void... params) {

            try {
                if (gcm == null) {
                    gcm = GoogleCloudMessaging.getInstance(getApplicationContext());
                }
                regid = gcm.register(R.string.gcm_defaultSenderId);
                msg = "Device registered, registration ID=" + regid;

            } catch (IOException ex) {
                msg = "Error :" + ex.getMessage();
                System.out.println("Error---" + ex.getMessage());
            }
            return msg;
        }

        @Override
        protected void onPostExecute(String msg) {
            System.out.println("Registerid---" + regid);
        }
    }.execute(null, null, null);
}

请尝试并告诉我。

答案 1 :(得分:1)

嗯,事实证明我的Google Play商店并没有正常运作。我可以查看应用并安装新应用,但是当我输入&#34;我的应用&amp;游戏&#34;,它给了我Check your connection and try again错误。因此,我正在为可能遇到类似问题的任何人发布此解决方案,因为我花了4-5天寻找错误并尝试不同的修复。

注意:这仅适用于root用户。

<强>步骤:

  1. 打开您的FIle Manager。我使用ES文件资源管理器。
  2. 转到&#34; /&#34;或手机的根
  3. 将有一个名为etc
  4. 的文件夹
  5. etc内,您会看到文件名hosts
  6. hosts文件中,您会看到2个IP地址。第二个将根据您的位置而有所不同
  7. 在第二个IP地址的开头添加##会将该行更改为评论
  8. 我建议在编辑之前备份hosts文件。

    致于&#34; Ronny927&#34;:http://forum.xda-developers.com/showthread.php?t=2273994

答案 2 :(得分:1)

我几天前遇到过同样的情况,这不是GCM的问题,而是我们的互联网连接问题。请参阅以下要点以获得更多理解

  1. 你的手机已连接到wifi,但没有wifi的互联网,尝试谷歌浏览器,如果它工作正常,那么你应该尝试更多的东西,如检查你的设备中的播放服务等等。

  2. 您手机的数据包可能已经结束,这意味着您已连接到互联网,但您无法从中获取任何类型的数据。如果不检查与服务器的连接,则无法识别此错误。

  3. 您可以从此链接获取更多详细信息

    How to fix Google Cloud Messaging Registration error: SERVICE_NOT_AVAILABLE?