【问题标题】:How to create server for GCM project in Android如何在 Android 中为 GCM 项目创建服务器
【发布时间】:2012-10-11 09:53:40
【问题描述】:

我正在Google Cloud Messaging (GCM) 上创建一个项目并关注this tutorial

我已完成客户端工作并在客户端设置设备。我还使用以下代码注册了设备。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    GCMRegistrar.checkDevice(this);
    GCMRegistrar.checkManifest(this);
    final String regId = GCMRegistrar.getRegistrationId(this);
    if (regId.equals("")) {
        GCMRegistrar.register(this, "483910217912");
        Log.d(tag, "Registered");
    }
    else {
        Log.v(tag, "Already registered");
    }
}

现在我被困在为我的 GCM 项目创建服务器的问题上。请注意,我正在创建一个项目以在收到新消息时进行通知。不过我还没有实现接收消息的服务,等服务器设置完成后再实现。

【问题讨论】:

  • @LalitPoptani 为什么你不把这个作为答案。我认为这是全面的。
  • 感谢您的回答。这意味着,我首先需要安装 apache tomcat。有必要吗。请解释第4点。)

标签: android google-cloud-messaging


【解决方案1】:

您可以使用博文 Google cloud Messaging (GCM) tutorial 在 Android 中创建 GCM 服务器,但我更喜欢将 PHP 用于服务器端代码。您可以通过简单的步骤在cURL (PHP) 中创建 GCM 服务器:

  1. 从 Google API 控制台页面创建服务器密钥。

  2. 标识要向其发送此消息的设备的设备令牌。

您可以在How to implement a GCM PHP push server for Android中找到实现推送服务器的简单步骤。

【讨论】:

  • 这个应用是安卓平台的。有什么区别吗!
  • 由于 php 是一种服务器端脚本语言,因此最好将 php 用作服务器,将客户端用作 android 代码。
  • 我应该使用什么 IDE。 Netbeans 工作还是 Eclipse 工作。!
  • 您可以使用 Eclipse 作为 IDE,但要执行 PHP 脚本,您需要在您的机器上安装 WAMP 服务器。
【解决方案2】:

您可以使用此代码

package yourpackage.android.gcm.server;

import com.google.android.gcm.server.Message;
import com.google.android.gcm.server.MulticastResult;
import com.google.android.gcm.server.Sender;

import java.util.ArrayList;

class Notify {
    public static void main(String args[]) {

        try {

            Sender sender = new Sender("AIzaSyCn3N2OIm-EDtiGwTyQfSIB8NRvDtIOx30");

            ArrayList<String> devicesList = new ArrayList<String>();
//add you deviceID
            devicesList.add("APA91bELVJbxB_NLnLbTkkkX87SDdkJc6OfCN2slhC9t4cLq-KA32eGgiW4-Gi--ZEsEMKIh0AtYJMs5rQGswfm3cH1qK853WcpV98bkaplAaC5AiycDmifuVFSRl21vgf-Rqj0dCrFF");
                        //devicesList.add("APA91bHIdM4XGqrjJLTuwCX5OOrTYG4ACXYEVkZDM1bPs5qFdzJP4Bpql-sZqyKB8BU7fDtdxB84aTygHLyASYg_XNY6lqrcA4wj4sZHJXGVFzz_0UEADMfFCx9NAfRZxunIYso_dkBa");
            //APA91bFA-i2l3iEMnIBs0JK80pTLHOsE7p1s-DysRpKGas1MQOVILyIs9xwY7soysSWGz5Uif68uXR6F5Xn0tCTYesv78uQZxhC310a1cvf8aFohhfMGY6awbOSg3t1GRz2i3U-8kVSF
            // Use this line to send message without payload data
            // Message message = new Message.Builder().build();

            // use this line to send message with payload data
            Message message = new Message.Builder()
                    //.collapseKey("message")
                    //.timeToLive(241000)
                    .delayWhileIdle(true)
                    .addData("message", "Your message send")
                    .build();


                   /**/
            // Use this code to send to a single device
            // Result result = sender
            // .send(message,
            // "APA91bGiRaramjyohc2lKjAgFGpzBwtEmI8tJC30O89C2b3IjP1CuMeU1h9LMjKhmWuZwcXZjy1eqC4cE0tWBNt61Kx_SuMF6awzIt8WNq_4AfwflaVPHQ0wYHG_UX3snjp_U-5kJkmysdRlN6T8xChB1n3DtIq98w",
            // 1);

            // Use this for multicast messages
            MulticastResult result = sender.send(message, devicesList, 1);
            //sender.send(message, devicesList, 0);

            System.out.println(result.toString());
            if (result.getResults() != null) {
                int canonicalRegId = result.getCanonicalIds();
                if (canonicalRegId != 0) {
                }
            } else {
                int error = result.getFailure();
                System.out.println(error);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

【讨论】:

  • thanx,它肯定会帮助我在项目的后期发送消息。但现在关注的重点是如何为项目创建服务器
  • 如果我将此服务器端用作 android 应用程序,我是否需要将类(客户端、服务器)合并到一个包中?? ----- 服务器端(Asp.net 还是这个)最好的是什么??
【解决方案3】:

com.google.android.gcm.server 库已弃用。只需将您的消息编码为 JSON 对象并将其发布到 GCM URL https://android.googleapis.com/gcm/send

JSON 示例:

 {
   "registration_ids" : ["APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",...],
   "data" : {
     "Team" : "Portugal",
     "Score" : "3",
     "Player" : "Varela",
   },
 }

这里有更多http://developer.android.com/google/gcm/http.html

【讨论】:

    【解决方案4】:

    您可以在 Android SDK 目录中找到 gcm-client 和 gcm-server 的示例代码。这是开始的好点。目录是:

    path_to_android_sdk/extras/google/gcm/samples

    【讨论】:

    • 我已经创建了客户端应用程序。但是如何使用 android 示例中的 gcm-demo-server。我需要将项目导入netbeans吗?此外,如果有一些安装服务器引擎的要求。
    • 使用本教程设置服务器端代码。developer.android.com/guide/google/gcm/demo.html#server-setup
    • 我已经完成了。但我无法理解第三点和第四点。
    • 这些步骤用于生成 .war 文件,以便在应用程序服务器上运行它。你有服务器端的经验吗?否则很难开发。
    • 我已经为 Windows 下载了最新的 ADT (64),但是这个文件夹不存在。他们删除了这个吗?
    【解决方案5】:
    In your main function implement following code to send push notification to your app
    
    final String apiKey = "specify your  api key generated by gcm";
    
    To make http connection to gcm using following code
    
     URL url = new URL("https://android.googleapis.com/g...");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setDoOutput(true);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("Authorization", "key="+apiKey);
    
            conn.setDoOutput(true);
    
    JSON message format accepted by GCM
    
    String input = "{\"registration_ids\" : [\"Specify token you got from GCM\"],\"data\" : {\"message\": \"hai  welcome\"},}";
    
    To send notification
    
    OutputStream os = conn.getOutputStream();
            os.write(input.getBytes());
            os.flush();
    
    In your client app you need to have proper BroadcastReceiver  class to receive the message sent from GCM
    

    【讨论】:

      【解决方案6】:

      我会坚持让您测试开发者网站上提供的演示。我刚刚基于它创建了一个演示示例,其中包含执行演示示例应遵循的所有步骤。您可以查看my blog,也可以从my github找到源代码。

      【讨论】:

      • 我看到了你的代码。我必须在服务器端做什么,我很困惑,请帮助我
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      相关资源
      最近更新 更多