2017-01-09 17 views
0

이에 뉴스를 추가 할 때 자동으로 푸시 알림을 보낼 수있는 방법이된다 화재베이스난 내 중포 기지

public class newsadding extends AppCompatActivity { 
    FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    final DatabaseReference myRef = database.getReference("allNews"); 

    EditText date, name; 
    Button btsave, btdelete, btshow; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_newsadding); 

     date =(EditText) findViewById(R.id.id); 
     name =(EditText) findViewById(R.id.editName); 

     btsave = (Button) findViewById(R.id.btSave); 
     btdelete = (Button) findViewById(R.id.btDelete); 
     btshow = (Button) findViewById(R.id.btShow); 

     // save the record 
     btsave.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       String n = date.getText().toString(); 
       String nom = name.getText().toString(); 
       try { 
        myRef.child("allNews").push().setValue(n+" : "+nom); 
        Toast.makeText(newsadding.this, "Record saved", Toast.LENGTH_SHORT).show(); 
       } 
       catch (Exception e) 
       { 
        Toast.makeText(newsadding.this, "Record not saved" + e.toString(), Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 

     // delete a record 

     btdelete.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       try { 
        String n = date.getText().toString(); 
        String q = database.getReference().toString(); 
        Toast.makeText(newsadding.this, "record deleted", Toast.LENGTH_SHORT).show(); 
       } 
       catch (Exception ex) { 
        Toast.makeText(newsadding.this, ex.getMessage(), Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 

     // show all records 

     btshow.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent i1 = new Intent(newsadding.this, usernews.class); 
       startActivity(i1); 
      } 
     }); 
    } 
} 

에 뉴스를 추가하는 데 사용이 사용하는 파일입니다 자바 파일

public class usernews extends AppCompatActivity { 
    FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    final DatabaseReference myRef = database.getReference("allNews").child("allNews"); 
    TextView fullnews; 

    ProgressBar loading; 
    private ListView lsStudents; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_usernews); 
     loading = (ProgressBar) findViewById(R.id.loading); 
     lsStudents=(ListView) findViewById(R.id.list); 
     fullnews=(TextView) findViewById(R.id.fullnews); 
     fullnews.setVisibility(View.INVISIBLE); 

     Toast.makeText(usernews.this, 
       "يرجى التأكد من أنك متصل بالإنترنت إذالم تكن متصل بعد...", Toast.LENGTH_LONG).show(); 

     myRef.addValueEventListener(new ValueEventListener() { 

      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       // This method is called once with the initial value and again 
       // whenever data at this location is updated. 

       final List<String> areas = new ArrayList<String>(); 
       for (DataSnapshot areaSnapshot: dataSnapshot.getChildren()) { 
        // Get value from areaSnapShot not from dataSnapshot 
        String value1 = String.valueOf(areaSnapshot.getValue()); 
        areas.add(value1); 

        if (lsStudents.equals(null)){ 
         loading.setVisibility(View.VISIBLE); 
        } 

        if (!lsStudents.equals(null)){ 
         loading.setVisibility(View.GONE); 
        } 
       } 

       String value2 = String.valueOf(dataSnapshot.getValue());  
       ArrayList<String> areas2 = new ArrayList<String>(areas); 
       Collections.reverse(areas2); 

       ArrayAdapter<String> areasAdapter = new ArrayAdapter<String>(usernews.this,android.R.layout.simple_expandable_list_item_1, areas); 
       lsStudents.setAdapter(areasAdapter); 
       lsStudents.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        public void onItemClick(AdapterView<?> adapter, View view, int position, long arg) { 
         fullnews.setVisibility(View.VISIBLE); 
         String newss = (lsStudents.getItemAtPosition(position).toString()); 
         fullnews.setText(newss); 
        } 
       }); 
      } 

      @Override 
      public void onCancelled(DatabaseError error) { 
       // Failed to read value 
       Toast.makeText(usernews.this, 
         error + "!!!!!خطاء في الاتصال !!!!!!", Toast.LENGTH_LONG).show(); 
      } 
     }); 
    } 
} 

지금 난 당신이 불 기본 페이지에 알림 표시 줄에서 화재베이스에서 정보를 보낼 수 있지만 수동 때문에 정보를 추가하지 않으려는 것을 알고 목록보기의 정보를 표시합니다 내 애플 리케이션에서 내 페이지는 뉴스에 대한 그리고 난 항상 수동으로 그것을 할 수 없다 b 나는 그 뉴스를 추가하는 유일한 사람이 아니므로 메시지 사운드가있는 배경에 새로운 뉴스와 응용 프로그램 이름 및 로고가 표시된 간단한 바를 표시하는 앱이 필요합니다. 어느 누구도 도움이 될 수 있습니까?

+0

사용자는 뉴스를 올리면 사용자 장치에서 직접 알림을 보낼 수 있습니다. –

+0

예, 나는이 방법으로 생각합니다. OnButtonClick을 사용하여 메시지가 보내지는 뉴스 추가 단추를 사용하지만 문제는 어떻게 수행해야할지 모릅니다. – Ali

+0

http://stackoverflow.com/questions/38089148/send-push-notification-from-server-to-android-device-in-java –

답변

0

은 첫째로 당신은 선택하셨습니다 그들이 통지를 보내 .TO 알림을받을 것이다 가입 등록하고 클라이언트 응용 프로그램의 항목에 가입해야하는 것은

1
// Method to send Notifications from server to client end. 
    public final static String AUTH_KEY_FCM = "API_KEY_HERE"; 
    public final static String API_URL_FCM = "https://fcm.googleapis.com/fcm/send"; 

    public static void pushFCMNotification() throws Exception { 

     String authKey = AUTH_KEY_FCM; // You FCM AUTH key 
     String FMCurl = API_URL_FCM; 

     URL url = new URL(FMCurl); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

     conn.setUseCaches(false); 
     conn.setDoInput(true); 
     conn.setDoOutput(true); 

     conn.setRequestMethod("POST"); 
     conn.setRequestProperty("Authorization", "key=" + authKey); 
     conn.setRequestProperty("Content-Type", "application/json"); 

     JSONObject data = new JSONObject(); 
     data.put("to","/topics/foo-bar"); 
     JSONObject info = new JSONObject(); 
     info.put("title", "FCM Notificatoin Title"); // Notification title 
     info.put("body", "Hello First Test notification"); // Notification body 
     data.put("data", info); 

     OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
     wr.write(data.toString()); 
     wr.flush(); 
     wr.close(); 

     int responseCode = conn.getResponseCode(); 
     System.out.println("Response Code : " + responseCode); 

     BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
     String inputLine; 
     StringBuffer response = new StringBuffer(); 

     while ((inputLine = in.readLine()) != null) { 
      response.append(inputLine); 
     } 
     in.close(); 

    } 

btsave.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

pushFCMNotification(); 

      } 
     }); 
+0

도와 주셔서 감사합니다. 그러나 저를 안내해 주실 수 있습니까? 내 서버로 firebase 사용. 어떻게이 코드를 화재 기반에 추가 할 수 있습니까? 어떻게 모든 장치 ID를 웹 서버에 등록 할 수 있습니까 ?? 내 경우 앱은 앱 스토어에 있으며 다른 기기를 사용하는 많은 사용자가 있습니다. – Ali

+0

public static void sendNotificationToUser (문자열 사용자, 최종 문자열 메시지) { Firebase ref = 새 Firebase (FIREBASE_URL); 최종적인 Firebase 알림 = ref.child ("notificationRequests"); 지도 알림 = 새 HashMap <>(); notification.put ("username", user); notification.put ("message", message); notifications.push().setValue (통지); } – param

+0

나는 당신의 직업을 수행하고 투표하는 것을 잊지 않고 답변을 편집했다. – param

0

공유 환경 설정에서 목록 수를 저장 this 중포 기지 자습서를 참조하십시오. 그런 다음 목록 개수가 마지막으로 저장된 목록 개수보다 많은지 확인합니다. 그것이 큰 경우 로컬 알림 &을 작성하여 목록의 마지막으로 추가 한 항목을 알림으로 표시하십시오. Firebase에서 데이터를 변경할 때마다 Firebase에서 알림을 푸시 할 필요가 없습니다.

0

몇 가지 뉴스를 추가 할 때마다 데이터베이스에 "알림"이라는 하위 항목을 만들 수 있으며 게시 한 특정 뉴스 항목에 대해 생성하려는 알림의 제목과 메시지를 추가 할 수 있습니다.

앱을 사용하는 모든 사용자가 특정 주제에 가입해야합니다.

마지막으로 "알림"하위를 수신하는 서버 측 스크립트 (이 용도로 Node.js 사용)를 실행하고 자식이 추가 될 때마다 데이터 스냅 샷을 가져 와서 제목과 메시지를 보내고 사용자가 가입 한 주제에 주제 알림을 보냅니다.

앱에 서비스가 활성화되어 있고 백그라운드에서 실행 중이면 자동으로 푸시 알림을 받게됩니다.

서버 통신을위한 주제 알림 및 REST API에 대한 자세한 내용은 here을 참조하십시오.