1

웹 (브라우저)과 Android 클라이언트에서 모두 소비되는 슬림 PHP 네트워크를 기반으로 API를 작성했으며 Google Cloud를 구현하는 데 관한 질문이 있습니다. 안드로이드 클라이언트에 대한 푸시 알림 메시지. 기본적으로,이 내 현재의 데이터 구조Google Cloud 메시징을 사용하는 API의 데이터 구조

내가하고 싶은 것은 모든 장치에 전송 알림이입니다
users: 
--Fields: 
----id 
----name 
----email 
----password 

posts: 
--Fields: 
----id 
----post_title 
----post_category 
----post_content 
----image_url 
----created_at 

comments: 
--Fields: 
----id 
----comment 
----mood 
----created_at 

post_comments (which holds the relationship between the post and the comment): 
--Fields: 
----id 
----post_id 
----comment_id 

user_comments (which holds the relationship between the user and the comment): 
--Fields: 
----id 
----user_id 
----comment_id 

인 포스트 테이블이있을 때 행이 추가 (즉, 특정 요구 사항을 충족). PHP에 대한 실제 푸시 기능을 이해하고 있지만, 안드로이드 장치에서 실행중인 장치를 등록하는 방법을 잘 모르겠습니다.

----has_device 
----device_registration_id 

및 (거짓에 대한 has_device = 0을 보낼 것이다 웹 클라이언트 반대) 안드로이드 장치가 로그인에 has_device = 1 PARAM을 보내 :이처럼 내 사용자 테이블에 두 개의 필드를 추가 할 생각 해당 사용자의 device_registration_id 필드가 비어 있는지 확인한 다음 새 등록 ID를 생성하고 해당 필드를 채 웁니다. 나는 올바른 길을 가고 있는가?

편집 : 이것은 내 PHP 송신 기능 것입니다. 등록 ID가없는 현재 해당 장치에 로그인 한 사용자에게 장치에 연결되어 있기 때문에

function sendNotification($apiKey, $registrationIdsArray, $messageData) 
{ 
    $headers = array("Content-Type:" . "application/json", "Authorization:" . "key=" . $apiKey); 
    $data = array(
     'data' => $messageData, 
     'registration_ids' => $registrationIdsArray 
    ); 

    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_URL, "https://android.googleapis.com/gcm/send"); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); 

    $response = curl_exec($ch); 
    curl_close($ch); 

    return $response; 
} 
+0

무엇이 문제입니까? – Eran

+0

사용자 테이블에이 두 필드를 추가하는 것으로 충분할 것인지 또는 별도의 gcm_users 테이블이 필요한지 궁금합니다. 전에는 GCM을 사용한 적이 없으므로 비즈니스 로직이 어떻게 작동하는지 전혀 모릅니다. –

답변

0

저는 비즈니스 논리에 매우 간단한 추가와 데이터베이스의 추가 테이블을 사용하여 여기에서 논리를 해결할 수있었습니다. (부분적으로는 Eran이 사고에 대한 오류를 지적했기 때문입니다.) 누군가가 내가 여기있는 특정한 문제에 부딪 힐 경우. 내가 추가 한 표는 다음과 같은 구조를 가지고 있습니다.

--gcm_users 
----id 
----user_id 
----gcm_device_id 

제 비즈니스 로직에서 나는 이렇게 간다. 사용자가 로그인하면 GCM 등록 ID가 이미 gcm_device_id 필드에 있는지 확인합니다. 그렇지 않으면 로그인하는 사용자의 ID (user_id)와 GCM 등록 ID (gcm_device_id)가 새 행에 추가됩니다. 행이 이미 있으면 행의 user_id가 로그인 한 사용자의 ID로 업데이트됩니다. 그러면 동일한 장치에 로그인하는 다른 사용자의 문제가 해결됩니다. 위대한 지역 사회 지원에 다시 한 번 감사 드리며 언젠가이 답변이 도움이되기를 바랍니다.

1

두 필드를 추가하는 것은 충분하지 않다.

사용자가 장치에서 로그 아웃하고 다른 사용자가 로그인하면 제안 된 구현은 두 사용자가 동일한 DB에 등록 ID를 갖고 모든 장치에 알림을 보내면 해당 장치에 두 개의 알림을 보냅니다.

로그 아웃 한 사용자 행에서 등록 ID 열을 지우면이 문제를 해결할 수 있습니다. Adnroid 장치를 사용하는 사용자가 모든 사용자 중 작은 비율을 차지할 것으로 예상되는 경우 별도의 gcm_users 테이블을 사용하는 것이 좋습니다. 이렇게하면 GCM 메시지를 모든 기기에 전송하기 위해 더 큰 사용자 테이블을 이동할 필요가 없습니다.

마지막으로 how to store a GCM registration ID into mysql에 대한 몇 가지 추가 제안 사항이 있습니다.

+0

대부분의 사용자는 Android 기기를 사용하게됩니다. 그것이 나를 혼란스럽게 만드는 이유입니다. id, user_id, device_registration_id의 구조를 가진 gcm_users 테이블을 가질 수는 있지만 고유 등록 ID의 문제는 해결되지 않습니다. 나는 이것을 조금 더 생각해야 할 것 같아.:/통찰력에 감사드립니다. –

+0

GCM의 새로운 사용자 별 알림이 필요하다고 생각합니다. 그 문제에 대한 연구를하고 이에 따라 내 질문을 업데이트 할 것입니다. –

관련 문제