在android中使用PHP发送通知

在android中使用PHP发送通知,php,android,Php,Android,我想用android中的php发送通知 请看代码 private function sendNotification(){ define('API_ACCESS_KEY', '**************'); $registrationIds = array("APA91bGeI8ILESgDzxoMnBRiP43k46CT31UySs0Q04FTHxyUFgBWrNBFKQKBGHwRvqn-vA7GdNRFrRMtmfQtQ9AGV8zvjYPa0nwWe64HTenII

我想用android中的php发送通知

请看代码

private function sendNotification(){

    define('API_ACCESS_KEY', '**************');
    $registrationIds = array("APA91bGeI8ILESgDzxoMnBRiP43k46CT31UySs0Q04FTHxyUFgBWrNBFKQKBGHwRvqn-vA7GdNRFrRMtmfQtQ9AGV8zvjYPa0nwWe64HTenIIwyIEIvQx-T0hmRpM7ybQvmmblK2GdnI");

    $msg = array(
        'message'   => 'here is a message. message',
        'title'     => 'This is a title. title'         
    );

    $fields = array(
        'registration_ids'  => $registrationIds,
        'data'          => $msg
    );       
    $headers = array(
        'Authorization: key=' . API_ACCESS_KEY,
        'Content-Type: application/json'
    );

    $ch = curl_init();
    curl_setopt( $ch,CURLOPT_URL, 'https://android.googleapis.com/gcm/send');
    curl_setopt( $ch,CURLOPT_POST, true );
    curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers);
    curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true);
    curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
    curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode($fields) );
    $result = curl_exec($ch );
    curl_close( $ch );
    return $result;
}
当我运行此代码时。它不会在手机上发送通知

和给予

{"multicast_id":6523573899048274101,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1456312662566810%bb518b18f9fd7ecd"}]}

将此添加到Android menifest中

<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" />

                <category android:name="gcm.play.android.samples.com.gcmquickstart" />
            </intent-filter>
        </receiver>
        <receiver
            android:name=".GcmBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND">
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />

                <category android:name="com.hmkcode.android.gcm" />
            </intent-filter>
        </receiver>

        <service
            android:name=".GcmMessageHandler"
            android:exported="true" />

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
创建服务

public class GcmMessageHandler extends IntentService {

     String mes;
    String session;
    private Handler handle;
    String user;
    PowerManager pm ;
    boolean isScreenOn;
    public GcmMessageHandler() {
        super("GcmMessageHandler");
    }
    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        handler = new Handler();
        pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
        isScreenOn = pm.isScreenOn();


    }
    @Override
    protected void onHandleIntent(Intent intent) {
        Bundle extras = intent.getExtras();

        GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);
        // The getMessageType() intent parameter must be the intent you received



         //Replace with Your Key

        mes = extras.getString("type");

        user=extras.getString("user");

      //put Your notification Code

                if (isScreenOn == false) {
                    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, "MyLock");
                    wl.acquire(10000);
                    PowerManager.WakeLock wl_cpu = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyCpuLock");
                    wl_cpu.acquire(10000);
               }


                    Log.i("GCM", "Received : (" + messageType + ")  " + extras.getString("user"));
              showToast();
                GcmBroadcastReceiver.completeWakefulIntent(intent);

    }

将此添加到Android menifest中

<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" />

                <category android:name="gcm.play.android.samples.com.gcmquickstart" />
            </intent-filter>
        </receiver>
        <receiver
            android:name=".GcmBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND">
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />

                <category android:name="com.hmkcode.android.gcm" />
            </intent-filter>
        </receiver>

        <service
            android:name=".GcmMessageHandler"
            android:exported="true" />

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
创建服务

public class GcmMessageHandler extends IntentService {

     String mes;
    String session;
    private Handler handle;
    String user;
    PowerManager pm ;
    boolean isScreenOn;
    public GcmMessageHandler() {
        super("GcmMessageHandler");
    }
    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        handler = new Handler();
        pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
        isScreenOn = pm.isScreenOn();


    }
    @Override
    protected void onHandleIntent(Intent intent) {
        Bundle extras = intent.getExtras();

        GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);
        // The getMessageType() intent parameter must be the intent you received



         //Replace with Your Key

        mes = extras.getString("type");

        user=extras.getString("user");

      //put Your notification Code

                if (isScreenOn == false) {
                    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, "MyLock");
                    wl.acquire(10000);
                    PowerManager.WakeLock wl_cpu = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyCpuLock");
                    wl_cpu.acquire(10000);
               }


                    Log.i("GCM", "Received : (" + messageType + ")  " + extras.getString("user"));
              showToast();
                GcmBroadcastReceiver.completeWakefulIntent(intent);

    }

您需要为Receive Message创建Broadcastreceiver和Intent服务您需要为Receive messageOk创建Broadcastreceiver和Intent服务。但是从这里我可以调用sendNotification()方法获取您的php文件位置,然后从Androidk调用webservice。但是从这里我可以调用sendNotification()方法获取您的php文件位置,然后从android调用webservice