6

Tôi đang làm việc trên ứng dụng Android đầu tiên của mình để sử dụng dịch vụ Nhắn tin qua đám mây của Google (GCM) cho thông báo đẩy. Tôi đã đến mức tôi có thể gửi tin nhắn thành công từ ứng dụng máy chủ của mình và đăng nhập nội dung của thư trong sự kiện onMessage trong lớp GCMIntentService của tôi trên ứng dụng khách. Tuy nhiên, tôi không thấy bất kỳ dấu hiệu trực quan nào trên thiết bị nhận được tin nhắn. Tôi đã mong đợi thông báo xuất hiện trong danh sách thông báo kéo xuống trên điện thoại, giống như trên iPhone. Điều này có phải được mã hóa theo cách thủ công không? Cũng có phương pháp phổ biến để hiển thị thông báo bất kể hoạt động nào hiện đang hoạt động và nếu ứng dụng không hoạt động trong nền? Bất kỳ trợ giúp nào được đánh giá cao.Android - Thông báo đẩy GCM không xuất hiện trong danh sách thông báo

Trả lời

7

Mã này sẽ tạo thông báo trên thanh hệ thống android ở đầu màn hình. Mã này sẽ tạo ra một ý định mới sẽ hướng người dùng đến "Home.class" sau khi nhấp vào thông báo ở thanh trên cùng. Nếu bạn muốn làm điều gì đó cụ thể dựa trên hoạt động hiện tại, bạn có thể gửi yêu cầu phát sóng từ GCMIntentService đến các hoạt động khác của bạn.

Intent notificationIntent=new Intent(context, Home.class); 
generateNotification(context, message, notificationIntent); 

private static void generateNotification(Context context, String message, Intent notificationIntent) { 
    int icon = R.drawable.icon; 
    long when = System.currentTimeMillis(); 
    NotificationManager notificationManager = (NotificationManager) 
      context.getSystemService(Context.NOTIFICATION_SERVICE); 
    Notification notification = new Notification(icon, message, when); 
    String title = context.getString(R.string.app_name); 

    // set intent so it does not start a new activity 
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | 
      Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    PendingIntent intent =PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    notification.setLatestEventInfo(context, title, message, intent); 
    notification.flags |= Notification.FLAG_AUTO_CANCEL; 
    notificationManager.notify(0, notification); 
} 

Lưu ý rằng ví dụ này sử dụng tài nguyên trong R.drawable và R.String cần phải có để làm việc nhưng nó sẽ cung cấp cho bạn ý tưởng. Xem thông tin này để biết thêm thông tin về thông báo trạng thái http://developer.android.com/guide/topics/ui/notifiers/index.html và thông tin này về các thiết bị phát sóng. http://developer.android.com/reference/android/content/BroadcastReceiver.html

+0

Đó là tuyệt vời, cảm ơn nhiều. –

+0

Xin chào, tôi đã sử dụng plugin này https://github.com/marknutter/GCM-Cordova và làm theo tất cả các hướng dẫn. tuy nhiên, tôi chỉ có thể nhận tin nhắn khi ở trong ứng dụng, nhưng không thể tải ứng dụng để hiển thị thông báo trong khu vực thông báo của android. xin vui lòng tư vấn cho. Tôi sử dụng plugin này khiến tôi sử dụng phonegap @Zachary Moshansky –

+0

Tôi xin lỗi nhưng tôi chưa bao giờ sử dụng Phonegap và không thể nhận xét về cách làm cho thông báo hoạt động với nó –

1

Nếu bạn đang sử dụng GcmListenerService bạn có thể sử dụng mã này, thêm vào onMessageReceived của bạn sendNotification()

@Override 
public void onMessageReceived(String from, Bundle data) { 
     String message = data.getString("message"); 
     sendNotification(message); 
} 

private void sendNotification(String message) { 
     Intent intent = new Intent(this, YOURCLASS.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 
     PendingIntent.FLAG_ONE_SHOT); 

     Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
       .setSmallIcon(R.drawable.ic_park_notification) 
       .setContentTitle("Ppillo Message") 
       .setContentText(message) 
       .setAutoCancel(true) 
       .setSound(defaultSoundUri) 
       .setContentIntent(pendingIntent); 

     NotificationManager notificationManager = 
       (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

     notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); 
    } 
Các vấn đề liên quan