2012-06-12 32 views
1

我遵循此推送通知tutorialAndroid中的推送通知混淆

当我完成本教程时,我发现两个类没有使用,分别是AuthenticationUtilMessageUtil。此外,Google Login,此链接似乎行不通。其次,这是Android设备或帐户的令牌ID吗?我认为推送通知是推送消息到Android设备的令牌ID。

另一方面,我发现bundle.putExtra(key, value),所有的钥匙没有使用它。例如把"app"但在C2DMRegistrationReceiver()没有得到钥匙。

在这sendRegistrationIdToServer(),它似乎永远不会被呼唤。

我被本教程关于推送通知所困惑。

谁可以指导我或给我可行的教程或关于推送通知的例子?

我想亲指出什么是我的错。

这是我的注册ID

public static final String[] REGISTRATION_ID = { 
     "APA91bFV6MwoAH0UNop69PZ2liKpSBUHSHenIuPzh44_6GdGKzVCLvoH_NM31eMZMVLZi-SAIFwP4iZaE72dSWkIh3GaD0RQYpPm9zO0ARWmnoxFyyyreL_KpQ9Qd_p0broclT12RhA4Ymk0cBT00CmpsbSHIwyxig", 
     "APA91bEwmxgvs7zNbKC4p0n4DoTEM73DTihnQgBOP8Gxhf2sVW-fgltugDgS1Fh2S4KvN1wQHbMNJEIzieJ9F1nNPqs3NWeKGbB7IBYpKJq4xmN4Z7uzkjZQQUKGD8jW--AwfQY5McINBto9GAL_87_u5WkIq-kx3g", 
     "APA91bH63Zgxn1X_MZ56UzrlRpffvmiLAIsqxvBUTMUHP2O_MT_VU9Ork_edXKHlml-PZSkjKEqdk8EKv5HvxbPdK1Vva3WtmqsPZfhXzEbtNIrwrqIvvRf7hL835rDc4t2E8EKUBj1dX2ta0OxY5pY3Xlhkyb1sBg", 
     "APA91bGqT5Wo6eUaMdqT5r9TlGbKSX6GN2W6r-RjrRXz5T5v3j87flcQRyfSajmMNGXuPVe-fwZydRmvyYu63tWnYohDmpJyKkXOxs8Vx6P_FplFQ__ufR_hekwqGOspeUc6bfc8fhbMPGN3Ft9l-bfrghJwwk79jw"}; 

Messageutil

public static int sendMessage(String auth_token, String registrationId, 
     String message, String title) throws IOException { 

    StringBuilder postDataBuilder = new StringBuilder(); 
    postDataBuilder.append(PARAM_REGISTRATION_ID).append("=") 
      .append(registrationId); 
    postDataBuilder.append("&").append(PARAM_COLLAPSE_KEY).append("=") 
      .append("0"); 
    postDataBuilder.append("&").append("data.payload").append("=") 
      .append(URLEncoder.encode(message, UTF8)); 
    postDataBuilder.append("&").append("data.title").append("=") 
      .append(URLEncoder.encode(title, UTF8)); 

    byte[] postData = postDataBuilder.toString().getBytes(UTF8); 

    // Hit the dm URL. 

    URL url = new URL("https://android.clients.google.com/c2dm/send"); 
    HttpsURLConnection 
      .setDefaultHostnameVerifier(new CustomizedHostnameVerifier()); 
    HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); 
    conn.setDoOutput(true); 
    conn.setUseCaches(false); 
    conn.setRequestMethod("POST"); 
    conn.setRequestProperty("Content-Type", 
      "application/x-www-form-urlencoded;charset=UTF-8"); 
    conn.setRequestProperty("Content-Length", 
      Integer.toString(postData.length)); 
    conn.setRequestProperty("Authorization", "GoogleLogin auth=" 
      + auth_token); 

    OutputStream out = conn.getOutputStream(); 
    out.write(postData); 
    out.close(); 

    int responseCode = conn.getResponseCode(); 
    return responseCode; 
} 

private static class CustomizedHostnameVerifier implements HostnameVerifier { 
    public boolean verify(String hostname, SSLSession session) { 
     return true; 
    } 
} 

messageSender,和

public static void main(String[] args) throws IOException { 
    String token = AuthenticationUtil.getToken(SecureStorage.USER, 
      SecureStorage.PASSWORD); 

    for (int i = 0; i < ServerConfiguration.REGISTRATION_ID.length; i++) { 
     MessageUtil.sendMessage(token, 
       ServerConfiguration.REGISTRATION_ID[i], "12358", 
       "印尼羽賽:馬2單1雙止步入選賽"); 
     System.out.println(ServerConfiguration.REGISTRATION_ID[i] 
       .toString()); 
    } 
    System.out.println(token); 

} 
+0

您将有得到一个关于他们的讨论小组(页面上的链接)的教程响应更好的机会。如果您对代码有特殊问题,请在此处发布详细信息。 –

回答

1

你应该按照this教程的android c2dm实现。

对于服务器,你可以使用任何东西,一些代码示例在互联网上可用。对于我使用的服务器。所谓的网络库“C2DM Sharp

的过程非常简单,就像...

  • 先注册上C2DM您的谷歌电子邮件 - https://developers.google.com/android/c2dm/signup
  • 运行Android应用程序在Android 2.2或更高版本,并发送您可以在“C2DMReceiver”中获得的注册ID,或通过在LOG
  • 中写入以获取该ID。使用服务器代码,用于测试目的,将您的注册ID粘贴到服务器代码中,然后就可以开始了。

C2DM的基本流程是... Register Phone for C2DM - >Get registrationID - >发送registrationID服务器 - >服务器usees谷歌ID来获得身份验证令牌 - >server use registrationID and auth token to send message.

+0

如果是这样的,例如,我使用[email protected]注册作为发件人,我的android设备在设备中记录[email protected]所以它只发送消息到设备只?我需要发送到多个Android设备。 –

+0

否...两个帐户都没有关系。您可以使用该帐户将推送消息发送到任何设备。推送消息使用registrationID发送,在该设备中登录哪个ID并不重要。 – Samdrain

+0

我试着用相同的编码结束了第二个设备上两个设备也没有收到推送通知 –

0

请参阅我的问题在这里:

C2DM server. Should we use OAuth now?

有一些信息和链接到谷歌组与答案。

总之..

好像OAuth2用户将工作,但我没有找到任何工作示例实现

客户端登录的作品,这是地方,我的困惑了。您需要:

  1. 设置Google帐户。我选了一些类似[email protected]的东西。
  2. 使用此电子邮件注册C2DM。这个很重要。
  3. 在服务器端使用您设置的电子邮件/密码以获取身份验证令牌。
  4. 使用此令牌从服务器发送消息。

其他一切就像在所有的教程中。

1

谷歌云端通讯Android的

重要提示:截至2012年6月26日,C2DM(Android云到设备消息传递框架)已正式弃用。这意味着C2DM已停止接受新用户和配额请求。没有新的功能将被添加到C2DM。但是,使用C2DM的应用程序将继续工作。我们鼓励现有的C2DM开发人员迁移到称为Google Cloud Messaging for Android(GCM)的新版C2DM。有关更多信息,请参阅C2DM-GCM迁移文档。开发人员必须使用GCM进行新的开发。

请查看以下链接:

http://developer.android.com/guide/google/gcm/index.html