如何在Android中为GCM项目创建服务器

如何在Android中为GCM项目创建服务器,android,google-cloud-messaging,Android,Google Cloud Messaging,我正在(GCM)上创建一个项目,并且正在跟踪 我完成了客户端工作,并在客户端设置了设备。我还使用以下代码注册了设备 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); GCMRegistrar.checkDevice(this); GCMRegistrar.checkManifest(

我正在(GCM)上创建一个项目,并且正在跟踪

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

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项目创建服务器方面遇到了困难。请注意,我正在创建一个项目,以便在收到新消息时通知。但是,我没有实现接收消息的服务,但我将在服务器设置完成后实现它。

您可以使用此代码

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();
        }

    }
}
package yourpack.android.gcm.server;
导入com.google.android.gcm.server.Message;
导入com.google.android.gcm.server.multicastersult;
导入com.google.android.gcm.server.Sender;
导入java.util.ArrayList;
班级通知{
公共静态void main(字符串参数[]){
试一试{
发送方发送方=新发送方(“AIzaSyCn3N2OIm-EDtiGwTyQfSIB8NRvDtIOx30”);
ArrayList DeviceList=新的ArrayList();
//添加您的设备ID
设备列表。添加(“APA91bELVJbxB_NLBTKKKX87SDDKJC6OFCN2SLHC9T4CLQ-KA32eGgiW4-Gi-ZESEMKIH0ATYJMS5RQGSWFM3CH1QK853WCPV98BKAPAPLAC5AIYDMIFSRL21VGF-Rqj0dCrFF”);
//设备列表。添加(“APA91bHIdM4XGqrjJLTuwCX5OOrTYG4ACXYEVkZDM1bPs5qFdzJP4Bpql-SZQYKB8BU7FDTDXB84ATYGHLYSYG_XNY6lqrcA4wj4sZHJXGVFzz_0UEADMFCx9NAFRZXuniyso_dkBa”);
//APA91bFA-I2L3IEMNIBS0JK80PTL7P1S-DYSRPKGAS19WY7SOYSWGZ5UIF68UXR6F5XN0TCTYESV78UQZXHC3101CVF8AFOHHFMGY6AWBOSG3T1GRZ2U8KVSF
//使用此行发送没有有效负载数据的消息
//Message Message=new Message.Builder().build();
//使用此行发送带有有效负载数据的消息
Message Message=new Message.Builder()
//.collapseKey(“消息”)
//.timeToLive(241000)
.delayWhileIdle(真)
.addData(“消息”,“您的消息发送”)
.build();
/**/
//使用此代码发送到单个设备
//结果=发送方
//.发送(信息),
//“APA91BGIRARAMJYOHC2LKJAGFGPZBWTEMI8TJC30O89C2B3IJP1CUMEU1H9LMJKHMWUZWCZJY1EQC4CE0TWBNT61Kx(WZIT8WNQ)4AfwflaVPHQ0wYHG(UX3NJP(U-5KJKMYSDRLN6XCHB1N3DTIQ98W”,
// 1);
//将此选项用于多播消息
MulticastResult result=sender.send(消息,设备列表,1);
//sender.send(消息,设备列表,0);
System.out.println(result.toString());
if(result.getResults()!=null){
int canonicalRegId=result.getCanonicalId();
如果(canonicalRegId!=0){
}
}否则{
int error=result.getFailure();
系统输出打印项次(错误);
}
}捕获(例外e){
e、 printStackTrace();
}
}
}

我坚持要求您测试develpers网站上提供的演示。我刚刚基于此创建了一个演示示例,其中包含了执行演示示例所需的所有步骤。您可以查看并从中查找源代码。

您可以使用博客文章在Android中创建GCM服务器,但我更喜欢使用服务器端代码。您可以通过以下简单步骤在(PHP)中创建GCM服务器:

  • 从GoogleAPI控制台页面创建服务器密钥

  • 标识将此消息发送到的设备的设备令牌


  • 您可以在中找到实现推送服务器的简单步骤。

    您可以在Android SDK目录中找到gcm客户端和gcm服务器的示例代码。这是一个很好的开始。目录是:

    路径到android sdk/extras/google/gcm/samples


    com.google.android.gcm.server
    库已被弃用。只需将消息编码为JSON对象并将其发布到GCM URL

    JSON示例:

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

    这里有更多的

    @LalitPoptani为什么你不把它作为一个答案呢。我认为这是全面的。答案是否定的。这意味着,我首先需要安装ApacheTomcat。有必要吗。请解释第4点。)thanx,它肯定会帮助我在项目的后期发送消息。但现在需要关注的是如何为项目创建服务器。如果我将此服务器端用作android应用程序,是否需要将类(客户端、服务器)合并到一个包中对于服务器端(Asp.net还是这个)什么是最好的?这个应用程序在android平台上。这有什么区别吗。!由于php是一种服务器端脚本语言,最好使用php作为服务器,客户端作为android代码。我应该使用什么IDE。Netbeans有效还是Eclipse有效。!您可以将Eclipse用作IDE,但要执行PHP脚本,您需要在计算机上安装WAMP服务器。我已经创建了客户端应用程序。但是如何使用android示例中的gcm演示服务器。我是否需要将项目导入netbeans。如果需要安装服务器引擎,也可以使用本教程设置服务器端代码。我已经看过了。但是我不能理解第三点和第四点。这些步骤用于生成.war文件,以便在应用程序服务器上运行它。你有服务器端的经验吗?我已经下载了最新的适用于Windows的ADT(64),但是这个文件夹不存在。他们删除了这个吗?我看到了u r代码。我在服务器端需要做什么,我很困惑,请帮助我
    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