Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.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
Java 未从通知服务器发送的GCM接收通知_Java_Android_Google Cloud Messaging_Android Notifications_Notificationservices - Fatal编程技术网

Java 未从通知服务器发送的GCM接收通知

Java 未从通知服务器发送的GCM接收通知,java,android,google-cloud-messaging,android-notifications,notificationservices,Java,Android,Google Cloud Messaging,Android Notifications,Notificationservices,我正在尝试为android应用程序实现一个通知服务器。我遵循了教程,它工作得很好。但现在服务器端的整个事情都由我的通知服务器处理,我在用户登录时与它共享我的设备id和用户id。我的通知服务器已成功将regid发送到gcm,但我的设备上未收到通知。我的onReceive()现在没有被调用。这是我的服务器从gcm收到的响应。messageId=0:146355033263447%fd0791fdf9fd7ecd Config.java public interface Config { //sta

我正在尝试为android应用程序实现一个通知服务器。我遵循了教程,它工作得很好。但现在服务器端的整个事情都由我的通知服务器处理,我在用户登录时与它共享我的设备id和用户id。我的通知服务器已成功将regid发送到gcm,但我的设备上未收到通知。我的onReceive()现在没有被调用。这是我的服务器从gcm收到的响应。messageId=0:146355033263447%fd0791fdf9fd7ecd

Config.java

public interface Config {

//static final String APP_SERVER_URL = "http://192.168.100.27:8081/GCMServer/GCMNotification?shareRegId=1";//earlier it was used to share regid with server
static final String GOOGLE_PROJECT_ID = "299876636766";
static final String MESSAGE_KEY = "message";

}
gcmnotificationtentservice.java

 public class GCMNotificationIntentService extends IntentService {

public static final int NOTIFICATION_ID = 1;
private NotificationManager mNotificationManager;
NotificationCompat.Builder builder;

public GCMNotificationIntentService() {
    super("GcmIntentService");
}

public static final String TAG = "GCMNotificationIntentService";

@Override
protected void onHandleIntent(Intent intent) {
    Bundle extras = intent.getExtras();
    GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);

    String messageType = gcm.getMessageType(intent);
    System.out.println("MessageType is"+messageType);
    String msg = intent.getStringExtra("message");
    System.out.println("mESSAGE IS---->>>"+msg);

    if (!extras.isEmpty()) {
        if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR
                .equals(messageType)) {
            sendNotification("Send error: " + extras.toString());
        } else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED
                .equals(messageType)) {
            sendNotification("Deleted messages on server: "
                    + extras.toString());
        } else if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE
                .equals(messageType)) {

            for (int i = 0; i < 3; i++) {
                Log.i(TAG,
                        "Working... " + (i + 1) + "/5 @ "
                                + SystemClock.elapsedRealtime());
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                }

            }
            Log.i(TAG, "Completed work @ " + SystemClock.elapsedRealtime());

            sendNotification(""+msg);
            Log.i(TAG, "Received: " + extras.toString());
        }
    }
    GcmBroadcastReceiver.completeWakefulIntent(intent);
}

private void sendNotification(String msg) {
    Log.d(TAG, "Preparing to send notification...: " + msg);
    System.out.println("Message is"+msg);
    mNotificationManager = (NotificationManager) this
            .getSystemService(Context.NOTIFICATION_SERVICE);
    PendingIntent contentIntent=null ;
    if(msg.equalsIgnoreCase("call")){
        System.out.println("Inside iffffffffffffffffffffff");
        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);

        PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP, "tag");
        wl.acquire();
        Intent i = new Intent(getApplicationContext(), MainActivity.class);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(i);
        //setResultCode(Activity.RESULT_OK)

        wl.release();
        contentIntent = PendingIntent.getActivity(this, 0,
                new Intent(this, SplashScreen.class), 0);
        System.out.println("the content intent is"+contentIntent.toString());

    }else{
        System.out.println("Inside else");
        contentIntent = PendingIntent.getActivity(this, 0,
                new Intent(this, MainActivity.class), 0);


    }
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
            this).setSmallIcon(R.drawable.ic_launcher)
            .setContentTitle("GCM Notification")
            .setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
            .setContentText(msg);

    mBuilder.setContentIntent(contentIntent);
    mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());

    Log.d(TAG, "Notification sent successfully.");
}
}

如果您从GCM服务器收到下面这样的成功消息,则您的设备必须收到通知

来自GCM服务器的成功消息

{
    "multicast_id": 661164****4469281,
    "success": 1,
    "failure": 0,
    "canonical_ids": 1,
    "results": [{
        "registration_id": "APA91bFWKKC4Bh_B******-H",
        "message_id": "0:14635506***b6f9fd7ecd"
    }]
}
以下可能是设备中未收到消息的情况

  • android端的发件人ID错误
  • 服务器端(PHP)的Google API密钥错误
  • 发送到GCM服务器的设备注册ID错误
  • 请立即验证所有值并进行检查。 若所有这些都是完美的,那个么你们必须在设备中收到消息。 请检查设备中的internet连接

    请用以下内容验证您的
    Menifest.xml
    文件

    <receiver
                android:name=".GCMBroadcastReceiver"
                android:permission="com.google.android.c2dm.permission.SEND" >
                <intent-filter>
    
                    <!-- Receives the actual messages. -->
                    <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                    <!-- Receives the registration id. -->
                    <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
    
                    <category android:name="your_package" />
                </intent-filter>
            </receiver>
    
            <service android:name=".GCMIntentService" />
        </application>
    
        <!-- GCM connects to Internet Services. -->
        <uses-permission android:name="android.permission.INTERNET" />
    
        <!-- GCM requires a Google account. -->
        <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    
        <!-- Keeps the processor from sleeping when a message is received. -->
        <uses-permission android:name="android.permission.WAKE_LOCK" />
    
        <!-- Creates a custom permission so only this app can receive its messages. -->
        <permission
            android:name="your_package.permission.C2D_MESSAGE"
            android:protectionLevel="signature" />
    
        <uses-permission android:name="your_package.permission.C2D_MESSAGE" />
    
        <!-- This app has permission to register and receive data message. -->
        <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    
        <!-- Network State Permissions to detect Internet status -->
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    

    如果您从GCM服务器收到下面这样的成功消息,则您的设备必须收到通知

    来自GCM服务器的成功消息

    {
        "multicast_id": 661164****4469281,
        "success": 1,
        "failure": 0,
        "canonical_ids": 1,
        "results": [{
            "registration_id": "APA91bFWKKC4Bh_B******-H",
            "message_id": "0:14635506***b6f9fd7ecd"
        }]
    }
    
    以下可能是设备中未收到消息的情况

  • android端的发件人ID错误
  • 服务器端(PHP)的Google API密钥错误
  • 发送到GCM服务器的设备注册ID错误
  • 请立即验证所有值并进行检查。 若所有这些都是完美的,那个么你们必须在设备中收到消息。 请检查设备中的internet连接

    请用以下内容验证您的
    Menifest.xml
    文件

    <receiver
                android:name=".GCMBroadcastReceiver"
                android:permission="com.google.android.c2dm.permission.SEND" >
                <intent-filter>
    
                    <!-- Receives the actual messages. -->
                    <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                    <!-- Receives the registration id. -->
                    <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
    
                    <category android:name="your_package" />
                </intent-filter>
            </receiver>
    
            <service android:name=".GCMIntentService" />
        </application>
    
        <!-- GCM connects to Internet Services. -->
        <uses-permission android:name="android.permission.INTERNET" />
    
        <!-- GCM requires a Google account. -->
        <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    
        <!-- Keeps the processor from sleeping when a message is received. -->
        <uses-permission android:name="android.permission.WAKE_LOCK" />
    
        <!-- Creates a custom permission so only this app can receive its messages. -->
        <permission
            android:name="your_package.permission.C2D_MESSAGE"
            android:protectionLevel="signature" />
    
        <uses-permission android:name="your_package.permission.C2D_MESSAGE" />
    
        <!-- This app has permission to register and receive data message. -->
        <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    
        <!-- Network State Permissions to detect Internet status -->
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
    
    
    如果您确实收到示例代码中的消息;我认为您的项目gcm中不允许使用服务器的IP地址。或者服务器的防火墙阻止gcm的消息,如中所示。无论哪种方式,我都建议您在服务器上运行一个独立的简单php脚本,其中只包含您的注册ID,以确保它不在代码中,您可以找到一个

    如果您确实收到示例代码中的消息;我认为您的项目gcm中不允许使用服务器的IP地址。或者服务器的防火墙阻止gcm的消息,如中所示。无论哪种方式,我都建议您在服务器上运行一个独立的简单php脚本,其中只包含您的注册ID,以确保它不在代码中,您可以找到一个

    你有错误记录吗?您是否也更改了php文件中的密钥?GCM服务器的响应是什么?@NiranjPatel a messageId(一个长字符串)和规范注册id@SwagDevelopers你能用GCM的完整回答编辑你的问题吗server@NiranjPatel完成。你有错误日志吗?您是否也更改了php文件中的密钥?GCM服务器的响应是什么?@NiranjPatel a messageId(一个长字符串)和规范注册id@SwagDevelopers你能用GCM的完整回答编辑你的问题吗server@NiranjPatel完成。我正在从regId=gcm.register()消息发送相应的regId receiving。Api键也是正确的。检查了两次。我看到这篇文章似乎有类似的问题,但解决方案和原因我不明白。我正在从regId=gcm.register()消息发送相应的regId receiving。Api键也是正确的。检查了两次。我看到这篇文章似乎有类似的问题,但解决方案和原因我不明白。