2013-07-08 41 views
1

我正在開發一個應用程序,我想在我的朋友圈內使用我不想在Google Play上發佈應用程序。我可以通過將我的應用程序保持在草稿模式來使用GCM服務嗎?使用GCM而不發佈應用程序

回答

2

是的,你可以做到這一點,我在我的應用程序集成GCM。

你只需要創建和託管自己的服務器,將表現爲第三方斷絕登記設備和發送消息到GCM服務器。

您可以從Google Console中獲取必須分別在客戶端和服務器上使用的發件人密鑰和API密鑰。

1

你可以做..

static void register(final Context context, String name, String email, final String regId) { 
//indented code 
    Log.i(TAG, "registering device (regId = " + regId + ")"); 
    String serverUrl = SERVER_URL; 
    Map<String, String> params = new HashMap<String, String>(); 
    params.put("regId", regId); 
    params.put("name", name); 
    params.put("email", email); 

    long backoff = BACKOFF_MILLI_SECONDS + random.nextInt(1000); 
    // Once GCM returns a registration id, we need to register on our server 
    // As the server might be down, we will retry it a couple 
    // times. 
    for (int i = 1; i <= MAX_ATTEMPTS; i++) { 
     Log.d(TAG, "Attempt #" + i + " to register"); 
     try { 
      displayMessage(context, context.getString(
        R.string.server_registering, i, MAX_ATTEMPTS)); 
      post(serverUrl, params); 
      GCMRegistrar.setRegisteredOnServer(context, true); 
      String message = context.getString(R.string.server_registered); 
      CommonUtilities.displayMessage(context, message); 
      return; 
     } catch (IOException e) { 
      // Here we are simplifying and retrying on any error; in a real 
      // application, it should retry only on unrecoverable errors 
      // (like HTTP error code 503). 
      Log.e(TAG, "Failed to register on attempt " + i + ":" + e); 
      if (i == MAX_ATTEMPTS) { 
       break; 
      } 
      try { 
       Log.d(TAG, "Sleeping for " + backoff + " ms before retry"); 
       Thread.sleep(backoff); 
      } catch (InterruptedException e1) { 
       // Activity finished before we complete - exit. 
       Log.d(TAG, "Thread interrupted: abort remaining retries!"); 
       Thread.currentThread().interrupt(); 
       return; 
      } 
      // increase backoff exponentially 
      backoff *= 2; 
     } 
    } 
    String message = context.getString(R.string.server_register_error, 
      MAX_ATTEMPTS); 
    CommonUtilities.displayMessage(context, message); 
} 

/** 
* Unregister this account/device pair within the server. 
*/ 
static void unregister(final Context context, final String regId) { 
    Log.i(TAG, "unregistering device (regId = " + regId + ")"); 
    String serverUrl = SERVER_URL + "/unregister"; 
    Map<String, String> params = new HashMap<String, String>(); 
    params.put("regId", regId); 
    try { 
     post(serverUrl, params); 
     GCMRegistrar.setRegisteredOnServer(context, false); 
     String message = context.getString(R.string.server_unregistered); 
     CommonUtilities.displayMessage(context, message); 
    } catch (IOException e) { 
     // At this point the device is unregistered from GCM, but still 
     // registered in the server. 
     // We could try to unregister again, but it is not necessary: 
     // if the server tries to send a message to the device, it will get 
     // a "NotRegistered" error message and should unregister the device. 
     String message = context.getString(R.string.server_unregister_error, 
       e.getMessage()); 
     CommonUtilities.displayMessage(context, message); 
    } 
} 
1

是的,你可以在不發佈應用程序的情況下使用它。正如納爾吉斯所說,你需要創建你自己的服務器。

Here你有一個很好的教程,希望它有幫助。

+1

上面鏈接的教程創建了一個應用程序。如何在沒有應用程序的情況下注冊並存儲註冊ID?這是可能的android chrome瀏覽器? –