为了账号安全,请及时绑定邮箱和手机立即绑定

当应用程序在iOS中处于后台模式时,无法接收GCM通知

/ 猿问

当应用程序在iOS中处于后台模式时,无法接收GCM通知

Qyouu 2019-12-06 12:47:55

我已经在现有应用中配置了GCM,并且在那里收到了通知。现在我面临两个问题:1)我退出应用程序时未收到通知,或者应用程序在后台。2)我没有在iPhone的通知区域中收到通知,仅当我的应用程序正在运行时,我才直接在该区域接收警报消息。当我下拉通知区域时,我在xcode的控制台中收到此消息“无法连接到GCM:操作无法完成。(com.google.gcm错误2001。)”


我的PHP文件在下面


<?php


// Payload data you want to send to iOSdevice(s)

// (it will be accessible via intent extras)    

$data = array( 'message' => 'Hello World!');


// The recipient registration tokens for this notification

// http://developer.android.com/google/gcm/ 

$ids = array( 'kucy6xoUmx********eeRsla' );


// Send a GCM push

sendGoogleCloudMessage(  $data, $ids );


function sendGoogleCloudMessage( $data, $ids )

{

    // Insert real GCM API key from Google APIs Console

    // https://code.google.com/apis/console/        

    $apiKey = 'AIz******9JA';


    // Define URL to GCM endpoint

    $url = 'https://gcm-http.googleapis.com/gcm/send';


    // Set GCM post variables (device IDs and push payload)     

    $post = array(

                    'registration_ids'  => $ids,

                    'data'              => $data,                   

                    );


    // Set CURL request headers (authentication and type)       

    $headers = array( 

                        'Authorization: key=' . $apiKey,

                        'Content-Type: application/json'

                    );


    // Initialize curl handle       

    $ch = curl_init();


    // Set URL to GCM endpoint      

    curl_setopt( $ch, CURLOPT_URL, $url );


    // Set request method to POST       

    curl_setopt( $ch, CURLOPT_POST, true );


    // Set our custom headers       

    curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );


    // Get the response back as string instead of printing it       

    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );


    // Set JSON post data

    curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $post ) );


    // Actually send the push   

    $result = curl_exec( $ch );


    // Error handling

    if ( curl_errno( $ch ) )

    {

        echo 'GCM error: ' . curl_error( $ch );

    }


?>


查看完整描述

2 回答

?
慕村225694

我已经添加了


 'content_available' => true,//to trigger when iOS app is in background

 'priority' => 'high',

 'notification' => $data,

 $data = array( 'message' => 'Hello World!', 'body' => 'Hello World!');

您的代码。请尝试以下代码;


<?php


// Payload data you want to send to iOSdevice(s)

// (it will be accessible via intent extras)    

$data = array( 'message' => 'Hello World!', 'body' => 'Hello World!');


// The recipient registration tokens for this notification

// http://developer.android.com/google/gcm/ 

$ids = array( 'kucy6xoUmx********eeRsla' );


// Send a GCM push

sendGoogleCloudMessage(  $data, $ids );


function sendGoogleCloudMessage( $data, $ids )

{

    // Insert real GCM API key from Google APIs Console

    // https://code.google.com/apis/console/        

    $apiKey = 'AIz******9JA';


    // Define URL to GCM endpoint

    $url = 'https://gcm-http.googleapis.com/gcm/send';


    // Set GCM post variables (device IDs and push payload)     

    $post = array(

                    'registration_ids'  => $ids,

                    'data'              => $data, 

                    'content_available'    => true,                 

                    'priority'              => 'high',    

                    'notification' => $data,               

                    );


    // Set CURL request headers (authentication and type)       

    $headers = array( 

                        'Authorization: key=' . $apiKey,

                        'Content-Type: application/json'

                    );


    // Initialize curl handle       

    $ch = curl_init();


    // Set URL to GCM endpoint      

    curl_setopt( $ch, CURLOPT_URL, $url );


    // Set request method to POST       

    curl_setopt( $ch, CURLOPT_POST, true );


    // Set our custom headers       

    curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );


    // Get the response back as string instead of printing it       

    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );


    // Set JSON post data

    curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $post ) );


    // Actually send the push   

    $result = curl_exec( $ch );


    // Error handling

    if ( curl_errno( $ch ) )

    {

        echo 'GCM error: ' . curl_error( $ch );

    }


    // Close curl handle

    curl_close( $ch );


    // Debug GCM response       

    echo $result;

}


?>

在IOS方面;遵循GCM网站上的订单


编辑1: 您可以尝试发送ios通知;


我在上面编辑了您的php代码;变化是;


'通知'=> $ data,



$ data = array('message'=>'Hello World!','body'=>'Hello World!');


查看完整回答
反对 回复 2019-12-06
?
月关宝盒

GCM收到处于无效状态的通知2。

在Android和iOS上都使用GCM集成的开发人员需要在对GCM服务器的Post调用中添加特定的内容。对于iOS:我们还需要另外两项操作才能使同一呼叫在iOS中生效:'notification'=> $ data,'content_available'=>'true',

Apple推送通知服务要求content_available为true。然后'notification'=> $ data帮助通知中心知道通知已经到达,需要将其推送到设备。


查看完整回答
反对 回复 2019-12-06

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信