2015-03-24 18 views
5

Tôi đang gặp sự cố với việc hủy đăng ký trung tâm thông báo từ Azure.Trung tâm thông báo của Android Azure hủy đăng ký

Tôi đang sử dụng phương pháp unregister() như thế này:

gcm = GoogleCloudMessaging.getInstance(getApplicationContext()); 

String connectionString = "xxx"; 
hub = new NotificationHub("xxx", connectionString, getApplicationContext()); 

try { 
    gcm.unregister(); 
    hub.unregister(); 
    Log.d("GCM","Unregister"); 
} catch (IOException e) { 
    e.printStackTrace(); 
} catch (Exception e) { 
    e.printStackTrace(); 
}; 

tôi không nhận được bất kỳ ngoại lệ trong mã này, nhưng tôi vẫn nhận được thông báo đẩy. Bất kỳ trợ giúp sẽ được apreciated. Cảm ơn trước.

+0

gcm.unregister() dường như không bắt buộc. Làm thế nào để bạn đăng ký với NH, bạn có sử dụng các mẫu không? – efimovandr

Trả lời

4

Bạn không nên hủy đăng ký khỏi GCM.

Tại sao bạn hiếm khi phải unregister

Bạn chỉ nên cần phải unregister trong những trường hợp hiếm hoi, chẳng hạn như nếu bạn muốn một ứng dụng để ngừng nhận các thông điệp, hoặc nếu bạn nghi ngờ rằng ID đăng ký có đã bị xâm phạm. Nói chung, sau khi ứng dụng có số đăng ký , bạn không cần phải thay đổi nó.

Đặc biệt, bạn không bao giờ nên unregister ứng dụng của bạn như một cơ chế cho logout hoặc để chuyển đổi giữa người dùng, vì những lý do sau đây:

  • Một ID đăng ký không được liên kết với một Logged đặc biệt trong sử dụng . Nếu bạn hủy đăng ký và sau đó đăng ký lại, GCM có thể trả lại cùng một ID hoặc một ID khác — không có cách nào đảm bảo.

  • Hủy đăng ký có thể mất tối đa 5 phút để phổ biến.

  • Sau khi hủy đăng ký, đăng ký lại có thể mất tới 5 phút để phổ biến. Trong thời gian này, thư có thể bị từ chối do đến trạng thái là chưa đăng ký và sau tất cả các thư này, thư vẫn có thể bị sai người dùng sai.

Thông tin thêm ở đây: http://developer.android.com/google/gcm/gcm.html#unreg-why

Vì bạn đang sử dụng Azure Notification Hub, bạn chỉ cần xóa đăng ký từ đó, không phải từ GCM.

+0

Xin chào @Andrei cảm ơn bạn đã trả lời, nhưng bạn có thể cho tôi biết cách xóa đăng ký từ azure không? –

+0

thử DeleteRegistrationAsync. –

+0

Tôi cũng gặp vấn đề tương tự. Tôi đã sử dụng cả hai phương thức hủy đăng ký thông báoHub.unregisterAll (savedRegGCMId); notificationHub.unregister(); Nhưng tôi vẫn nhận được thông báo từ Azure Hub –

2

Nói chung, chỉ cần sử dụng hub.unregister() là đủ. Ngoài ra, chỉ cần gọi hub.register() bằng thẻ không hợp lệ và thẻ đó sẽ ghi đè đăng ký hiện tại.

Tuy nhiên, tôi nhận thấy rằng đăng ký đôi khi được sao chép trong Trung tâm thông báo (cùng PNS, các thẻ khác nhau/ID đăng ký Azure) và unregister chỉ xóa một trong số chúng, vì vậy bạn tiếp tục nhận được thông báo. Có thể điều này xảy ra khi bạn cài đặt lại ứng dụng, không chắc chắn.

Dù sao, để giải quyết vấn đề này, bạn có thể xóa đăng ký theo cách thủ công (Visual Studio> Server Explorer> Trung tâm thông báo> Chọn một> tab Đăng ký thiết bị).

0

Tôi nghĩ bạn nên sử dụng Thread khác để hủy đăng ký thiết bị đó. Dưới đây cách làm việc cho tôi một cách chính xác. Xin đừng quên giữ hub được sử dụng để đăng ký thiết bị.Ở bên dưới, tôi đã tạo một lớp học HubKeeper và tôi giữ rằng hub trong lớp HubKeeper là tĩnh. Nhưng khác đi, tôi đã sử dụng FCM thay vì GCM

Thread thread = new Thread(new Runnable() { 

      @Override 
      public void run() { 
       try { 
        if (HubKeeper.hub != null) { 
         HubKeeper.hub.unregister(); 
        } 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
     thread.setPriority(Thread.MIN_PRIORITY); 
     thread.start(); 
Các vấn đề liên quan