0

我們已經完成了SNS設置,用於發送我們的Android應用程序的推送通知。一步一步的過程如下:使用亞馬遜SNS處理android應用程序卸載

  1. 每當應用出現時,它通過使一個register呼叫生成GCM註冊ID。代碼段是下面:

    private String registerOnGCM(){ try { GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(getBaseContext()); String token = gcm.register(Globals.GCM_TOKEN); return token; } catch (IOException e) { Log.e(TAG, "failed to complete token refresh process"); } return null; }

    其中Globals.GCM_TOKEN是,在做該應用的FCM註冊所獲得的應用程序ID。

  2. 應用程序打電話給我們的後端服務器並通過此註冊ID。

  3. 後端服務器檢查這個註冊ID是否是新的。如果是新的,則使用該註冊ID創建新的SNS端點,然後將新的端點訂閱給爲該用戶創建的主題。它將所有這些數據保存在我們的數據庫中以供將來參考。

當發送推送通知給用戶的所有設備,我們只是廣播消息,爲用戶創建的主題和郵件發送到該用戶所擁有的所有設備。這工作得很好,涉及多個設備的情況下,我們的應用程序安裝在所有設備上。這個問題出現在卸載和重新安裝上。

重新安裝後,GCM註冊調用返回一個單獨的註冊ID並將其發送到後端。後端將其檢測爲新設備,並將其註冊爲SNS,即使設備相同,用戶也會收到多個SNS端點。當爲該用戶推送通知給該主題時,同一設備會收到兩個推送通知。可能是因爲舊的端點仍然存在,它應該已被禁用。

所以,我的問題:如何確保在提到的測試案例中,只有一個推送通知發送到Android設備。

回答

1

所以這裏是我找到我的問題的解決方案。

在重新安裝的情況下,註冊ID正在改變,稍後相同的註冊ID將用於檢測設備是否已註冊SNS推送。但是還有一個設備是唯一的實體,在重新安裝的情況下不會改變,即設備ID。

我改變了後臺調用我們的服務器,並增加了一個參數,設備ID。此ID現在用於檢測已經存在的SNS註冊。如果Id已經存在,並且註冊ID是新的,那麼我將刪除舊的端點及其訂閱該用戶的主題,然後繼續註冊過程的其餘部分。這將保持SNS數據以及我們自己的數據清潔。