2016-01-02 2 views
0

Я новичок в разработке приложений для Android. Сейчас я разрабатываю простое приложение, в котором пользователь может загружать данные на сервер MySQL через PHP-скрипты. Я успешно могу это сделать. Но я хочу, чтобы всякий раз, когда пользователь загружал некоторые данные на сервер из своего приложения, все остальные пользователи приложения должны получать уведомление (т. Е. Пользователь xyz добавил новую запись).Push Notification в приложении Android через GCM

Я нашел способ, которым я могу достичь этого, используя Google Cloud Messaging. Но я не могу реализовать его в своем приложении.

Я успешно внедрил уведомление GCM из веб-сообщения через PHP-скрипт на веб-сервере, используя приведенный ниже PHP-скрипт.

<?php 
//Generic php function to send GCM push notification 
function sendMessageThroughGCM($registatoin_ids, $message) { 
    //Google cloud messaging GCM-API url 
    $url = 'https://android.googleapis.com/gcm/send'; 
    $fields = array(
     'registration_ids' => $registatoin_ids, 
     'data' => $message, 
    ); 
    // Update your Google Cloud Messaging API Key 
    define("GOOGLE_API_KEY", "AIzaSyCVQRSnEoulXoG21uKua1DTrOUvMkxbK-U");   
    $headers = array(
     'Authorization: key=' . GOOGLE_API_KEY, 
     'Content-Type: application/json' 
    ); 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); 
    $result = curl_exec($ch);    
    if ($result === FALSE) { 
     die('Curl failed: ' . curl_error($ch)); 
    } 
    curl_close($ch); 
    return $result; 
} 
?> 
<?php 

//Post message to GCM when submitted 
$pushStatus = "GCM Status Message will appear here";  
if(!empty($_GET["push"])) { 
    $gcmRegID = file_get_contents("GCMRegId.txt"); 
    $pushMessage = $_POST["message"]; 
    if (isset($gcmRegID) && isset($pushMessage)) {  
     $gcmRegIds = array($gcmRegID); 
     $message = array("m" => $pushMessage); 
     $pushStatus = sendMessageThroughGCM($gcmRegIds, $message); 
    }  
} 

//Get Reg ID sent from Android App and store it in text file 
if(!empty($_GET["shareRegId"])) { 
    $gcmRegID = $_POST["regId"]; 
    file_put_contents("GCMRegId.txt",$gcmRegID); 
    echo "Done!"; 
    exit; 
} 
?> 
<html> 
<head> 
    <title>Google Cloud Messaging (GCM) in PHP</title> 
    <style> 
     div#formdiv, p#status{ 
     text-align: center; 
     background-color: #FFFFCC; 
     border: 2px solid #FFCC00; 
     padding: 10px; 
     } 
     textarea{ 
     border: 2px solid #FFCC00; 
     margin-bottom: 10px;    
     text-align: center; 
     padding: 10px; 
     font-size: 25px; 
     font-weight: bold; 
     } 
     input{ 
     background-color: #FFCC00; 
     border: 5px solid #fff; 
     padding: 10px; 
     cursor: pointer; 
     color: #fff; 
     font-weight: bold; 
     } 

    </style> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
    <script> 
    $(function(){ 
     $("textarea").val(""); 
    }); 
    function checkTextAreaLen(){ 
     var msgLength = $.trim($("textarea").val()).length; 
     if(msgLength == 0){ 
      alert("Please enter message before hitting submit button"); 
      return false; 
     }else{ 
      return true; 
     } 
    } 
    </script> 
</head> 
<body> 
    <div id="formdiv"> 
    <h1>Google Cloud Messaging (GCM) in PHP</h1>  
    <form method="post" action="/swach/gcm/gcm.php/?push=true" onsubmit="return checkTextAreaLen()">                   
      <textarea rows="5" name="message" cols="45" placeholder="Message to send via GCM"></textarea> <br/> 
      <input type="submit" value="Send Push Notification through GCM" /> 
    </form> 
    </div> 
    <p id="status"> 
    <?php echo $pushStatus; ?> 
    </p>   
</body> 
</html> 

и успешно получил уведомление на своем устройстве.

Но я хочу настроить это приложение, которое должно автоматически сообщать GCM, чтобы отправить сообщение вместо использования WEB-скриптов. И уведомление должно быть получено всем другим пользователям приложений.

Я также прошел через сообщения GCM DownStream и UpStream, но мало что понял, не смог успешно реализовать.

Я попытался установить ниже по потоку, используя следующий код, но я не получил уведомления на мой App

public class AddNewMessage extends Activity{ 
private Integer msgId; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_add_new_message); 

    msgId = 1; 

} 
// OnClick Action to the button inside the Activity Layout 
public void sendNewMessage(View view) { 
    final GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this); 
    if (view == findViewById(R.id.send_message)) { 
     new AsyncTask<Void,Void,String>() { 


      @Override 
      protected String doInBackground(Void... params) { 
       String msg = ""; 
       try { 
        Bundle data = new Bundle(); 
        data.putString("my_message", "Hello World"); 
        data.putString("my_action","SAY_HELLO"); 
        String id = Integer.toString(msgId); 
        gcm.send(ApplicationConstants.GOOGLE_PROJ_ID + "@gcm.googleapis.com", id, data); 
        msg = "Sent message"; 
       } catch (IOException ex) { 
        msg = "Error :" + ex.getMessage(); 
       } 
       return msg; 
      } 

      @Override 
      protected void onPostExecute(String msg) { 
       Toast.makeText(AddNewMessage.this, "send message failed: " + msg, Toast.LENGTH_LONG).show(); 
      } 
     }.execute(null, null, null); 
    } 
} 
} 

Спасибо за ваше время.

+0

что вы получаете в ответ? –

+0

Взгляните на [tounder.com] (https://tounder.com). Они обрабатывают большую часть настроенного сервера. У них есть простой [Android SDK] (https://tounder.com/docs/android-sdk), и они поддерживают удивительные действия пользователя, такие как глобальное увольнение и отслеживание, если ваше уведомление открыто или отклонено. Вот пример: https://www.youtube.com/watch?v=77hfYzZml9s – Keith

ответ

0

Выполните следующие действия: 1. Получите регистрационный номер устройства пользователя приложения и сохраните его в своей базе данных.

private String getRegistrationId(Context context) 
{ 
    final SharedPreferences prefs = getGCMPreferences(context); 
    String registrationId = prefs.getString(PROPERTY_REG_ID, ""); 
    if (registrationId.isEmpty()) { 
     Log.d(TAG, "Registration ID not found."); 
     return ""; 
    } 
    int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE); 
    int currentVersion = getAppVersion(context); 
    if (registeredVersion != currentVersion) { 
     Log.d(TAG, "App version changed."); 
     return ""; 
    } 
    return registrationId; 
} 

2.Use код PHP (удалить HTML часть)

Примечание. - использовать массив регистрации идентификаторов

3.In ответ открыть этот скрипт с регистрационными идентификаторами.

0

У вас может быть более длинный метод, в котором вы отправляете информацию в php-скрипт. Этот php-скрипт выберет все идентификаторы регистрации пользователей и будет использовать цикл foreach для отправки уведомлений. Это означает, что вам нужно сохранить идентификаторы регистрации в базе данных mysql

Смежные вопросы