2016-10-14 6 views
0

푸시 알림을 보내도록 서버를 설정하려고합니다.Android : 지정된 애플리케이션 패키지쪽으로 알림을 푸시

예를 들어 특정 패키지 사용자에게 푸시 알림을 보내려고합니다. com.mysite.android과 같은 것입니다 (이 옵션은 Firebase 콘솔에서 사용 가능합니다). this 같은 응답 확인 지정한 패키지 사용자에게 푸시 알림을 보내도록 to 매개 변수를 설정하는 방법을 이해할 수 없습니다. specific devices by their ids 또는 news topics으로 알림을 전송하는 샘플을 찾을 수 있습니다.

설명 : 나는 푸시 알림을 보내려는 응용 프로그램의 소유자입니다. 그것은 여기에 도움이 내 코드의 경우

는 :

<?php 
    /* 
    Parameter Example 
     $data = array('post_id'=>'12345','post_title'=>'A Blog post'); 
     $target = 'single tocken id or topic name'; 
     or 
     $target = array('token1','token2','...'); // up to 1000 in one request 
    */ 

     echo "Start<br/>"; 
     $result = sendMessage('{"id":"hello"}',null); 
     var_dump($result); 

     function sendMessage($data,$target){ 
      //FCM api URL 
      $url = 'https://fcm.googleapis.com/fcm/send'; 
      //api_key available in Firebase Console -> Project Settings -> CLOUD MESSAGING -> Server key 
      $server_key = 'xxxxxxxxxxxxxxxxxxxkeyxxxxxxxxxxxxxxxxxxxxxxxx'; 

      $fields = array(); 
      $fields['data'] = $data; 
      $fields['restricted_package_name']='com.mysite.android '; 
      $fields['dry_run']=true; 

      if (isset($target)){ 
       if(is_array($target)){ 
        $fields['registration_ids'] = $target; 
       }else{ 
        $fields['to'] = $target; 
       } 
      } 
      //header with content_type api key 
      $headers = array(
       'Content-Type:application/json', 
       'Authorization:key='.$server_key 
       ); 

      $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('FCM Send Error: ' . curl_error($ch)); 
      } 
      curl_close($ch); 
      return $result; 
     } 

     ?> 

주의 사항 : 나는 의도적으로 내 server_key를 제거했습니다.

답변

0

소유하고있는 앱을 제외한 모든 외부 앱에 푸시 알림을 보낼 수 없으며 사용자 기기 토큰과 서버 키가 하나의 프로젝트에 연결되어 있기 때문에 서버 키와 유효한 기기 토큰을 사용하여 "X"앱

+0

나는 알고있다. 정보를 내 패키지에 보내고 싶습니다. 그래서 같은 Android 패키지를 사용하는 모든 사용자가 동일한 장치 토큰을 사용합니까? 나는 그렇지 않다고 생각한다. – VSB

+0

장치 토큰은 모든 장치에 대한 고유 한 식별자가 아니므로 동일한 패키지에서 중복 토큰을 결코 찾을 수 없습니다. – user101530

+0

각 장치에는 사용자가 장치의 Firebase 인증 방법을 호출 할 때 생성되는 고유 한 토큰이 있습니다. 토큰을 얻은 후에 장치는 토큰을 서버로 보내고이를 사용자의 계정에 할당해야 각 사용자마다 고유 한 토큰이 있습니다. 그렇게하면 비즈니스 요구에 따라 토큰을 사용하여 특정 사용자에게 알림을 보낼 수 있습니다. 하나의 Firebase Project는 패키지 이름이 다른 여러 어플리케이션을 가질 수 있으므로 지정된 패키지는 어플리케이션입니다. 따라서 대상으로 지정할 어플리케이션을 지정해야합니다. – MohanadMohie

0

이것은 관리 할 수 ​​있습니다. 그러나 앱에 알림을 보낼 수 있으려면 먼저 유효한 발신자 여야합니다.

일반적으로 (앱 소유자 인 경우) Firebase Project에 앱 추가, google-services.json 파일 생성 및 Android 프로젝트에 추가 만하면됩니다.

앱 소유자가 아니며 Firebase Project를 통해 앱을 추가하고 싶지 않은 경우 앱에서 사용되는 google-services.json을 수정하여 우선 적용 할 수 있습니다. SenderID 그 안에. 하지만 처음에는 내 앱이 아닌 앱을 수정할 수있는 권한을 부여 받았을 지 의심 스럽습니다.

참고 : google-services.json을 수정하는 것은 좋지 않습니다.

사용자가 올바른 발신자로 Peoject를 설정할 수 있다면 Topic Messaging을 사용하고 해당 앱 패키지 이름 인 항목 이름에 기기를 구독해야합니다. 주제를 보낼 때

그런 다음, 단순히 때문에 같은 to 매개 변수에 패키지의 이름을 사용

"to": "/topics/<app_package_name_here>" 
+0

@VSB 안녕하세요. 당신이 이것을 시험해 볼 수 있었습니까? 좋았 니? 그렇다면이 게시물을 올바른 답변으로 받아 들여 귀하의 게시물에 태그가 올바르게 추가되도록하십시오. 건배! –

+0

안녕하세요, 저는 이것을 시도했습니다. 이것은 작동하지 않습니다. 이것을 사용하여 주어진 패키지 이름으로 모든 장치에 알림을 보낼 수 없습니다. – Rizwan

+0

@Rizwan이 솔루션은 Topics with FCM을 사용합니다. 특정 앱 패키지 *를 먼저 구독하지 않고 * 보내고 프로젝트 소유자 인 경우 * Firebase Notifications Console 만 사용할 수 있습니다. 당신이 downvote에 대한 자세한 설명을 넣을 수 있다면 나는 그것을 감사하겠습니다. –

관련 문제