2012-11-09 23 views
7

Tôi đã đọc các bài viết về GCM có thể làm mới id đăng ký mà không có chu kỳ thông thường. Tôi đang cố gắng xây dựng một ứng dụng bằng cách sử dụng thông báo đẩy nhưng không chắc chắn cách xử lý các id đăng ký làm mới này.Yêu cầu id đăng ký Google Cloud Messaging (GCM) mọi ứng dụng bắt đầu

Chiến lược đầu tiên của tôi là yêu cầu id đăng ký mọi lúc ứng dụng khởi động và gửi ứng dụng đến máy chủ ứng dụng. Có vẻ như hoạt động nhưng âm thanh sai bằng cách nào đó ...

Bạn có muốn làm như thế này không?

+0

có thể trùng lặp với [Thay đổi ID đăng ký xử lý trong Google Cloud Messaging trên Android] (http://stackoverflow.com/questions/16838654/handling-registration-id-changes-in-google-cloud-messaging-on -android) – Eran

Trả lời

5

Về cơ bản, bạn nên làm như sau trong hoạt động chính của bạn:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.my_layout); 

    GCMRegistrar.checkDevice(this); 
    GCMRegistrar.checkManifest(this); 

    final String regId = GCMRegistrar.getRegistrationId(this); 

    if (regId.equals("")) { 
     GCMRegistrar.register(this, GCMIntentService.GCM_SENDER_ID); 
    } else { 
     Log.v(TAG, "Already registered"); 
    } 
} 

Sau đó bạn nên gửi id đăng ký đến máy chủ ứng dụng của bạn, bất cứ khi nào ứng dụng nhận được một com.google.android.c2dm.intent.REGISTRATION ý định với một registration_id thêm. Điều này có thể xảy ra khi Google định kỳ cập nhật id của ứng dụng.

Bạn có thể đạt được điều này bằng cách mở rộng com.google.android.gcm.GCMBaseIntentService với thực hiện của riêng bạn, ví dụ .:

public class GCMIntentService extends GCMBaseIntentService { 

    // Also known as the "project id". 
    public static final String GCM_SENDER_ID = "XXXXXXXXXXXXX"; 

    private static final String TAG = "GCMIntentService"; 

    public GCMIntentService() { 
     super(GCM_SENDER_ID); 
    } 

    @Override 
    protected void onRegistered(Context context, String regId) { 
     // Send the regId to your server. 
    } 

    @Override 
    protected void onUnregistered(Context context, String regId) { 
     // Unregister the regId at your server. 
    } 

    @Override 
    protected void onMessage(Context context, Intent msg) { 
     // Handle the message. 
    } 

    @Override 
    protected void onError(Context context, String errorId) { 
     // Handle the error. 
    } 
} 

Để biết thêm chi tiết, tôi sẽ (lại) đọc tài liệu cho writing the client side codethe Advanced Section of the GCM documentation.

Hy vọng điều đó sẽ hữu ích!

1

Làm mới đăng ký không được bao gồm trong thư viện GCM mới.

Words of Costin Manolache

Các 'kỳ' refresh không bao giờ xảy ra, và làm mới đăng ký không được bao gồm trong thư viện GCM mới.

Nguyên nhân duy nhất để thay đổi ID đăng ký là lỗi cũ của ứng dụng không đăng ký tự động nếu họ nhận được thư trong khi được nâng cấp. Cho đến khi lỗi này là ứng dụng cố định, bạn vẫn cần phải gọi tới số đăng ký() sau khi nâng cấp và cho đến nay ID đăng ký có thể thay đổi trong trường hợp này. Gọi hủy đăng ký() một cách rõ ràng thường cũng thay đổi mã đăng ký .

Đề xuất/cách giải quyết là tạo số nhận dạng ngẫu nhiên của riêng bạn, ví dụ: được lưu làm tùy chọn được chia sẻ. Trên mỗi nâng cấp ứng dụng, bạn có thể tải lên số nhận dạng và ID đăng ký tiềm năng mới. Điều này cũng có thể giúp theo dõi và gỡ lỗi nâng cấp và đăng ký thay đổi ở phía máy chủ.

Các vấn đề liên quan