标签: google-cloud-messaging

在android中注册GCM的应用程序

我想在我的Android应用程序中集成G​​SM.我可以使用我的Api键和Sender_id通过该演示运行GCM-Client-demo应用程序和注册设备,但是当我在我的应用程序中使用相同的代码时,我无法使用GCM注册设备.

我在log cat中得到的错误是.

08-13 11:24:34.787: W/ActivityManager(2465): Unable to start service Intent { act=com.google.android.c2dm.intent.REGISTRATION cat=[com.demo.demogcm] cmp=com.demo.demogcm/.GCMIntentService (has extras) }: not found
Run Code Online (Sandbox Code Playgroud)

我的清单文件.

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="15" />

<!-- GCM connects to Google Services. -->
<uses-permission android:name="android.permission.INTERNET" />

<!-- GCM requires a Google account. -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />

<!-- Keeps the processor from sleeping when a message is received. -->
<uses-permission android:name="android.permission.WAKE_LOCK" />

<!--
 Creates a custom permission so only this app can receive its messages.

 NOTE: the permission *must* be called PACKAGE.permission.C2D_MESSAGE, …
Run Code Online (Sandbox Code Playgroud)

android google-cloud-messaging

0
推荐指数
1
解决办法
8071
查看次数

GCM onRegistered没有打电话

我已经为GCM注册编写了一个代码,但我不知道为什么我没有得到GCMIntentService的任何回调(onRegistered,onError).请让我知道或指导我解决这个问题.
这是我的清单:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.pushnotifydemo"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />

    <permission
        android:name=".permission.C2D_MESSAGE"
        android:protectionLevel="signature" />

    <uses-permission android:name=".permission.C2D_MESSAGE" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".PushNotifyDemo"
            android:label="@string/title_activity_push_notify_demo" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver
            android:name="com.google.android.gcm.GCMBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
                <category android:name="com.example.pushnotifydemo" />
            </intent-filter>
        </receiver>

        <service android:name=".GCMIntentService"  android:enabled="true" />

    </application>

</manifest>
Run Code Online (Sandbox Code Playgroud)

这是我的CMIntentService:

 package com.example.pushnotifydemo;

import android.content.Context;
import android.content.Intent;
import android.util.Log; …
Run Code Online (Sandbox Code Playgroud)

android google-cloud-messaging

0
推荐指数
1
解决办法
3454
查看次数

通过谷歌推送通知从额外密钥接收旧值

我在接收谷歌推送通知时面临以下问题.我从PHP提交以下通知,并在android GCMBaseIntentService中添加另一个标签data.notificationID以获取接收唯一ID.

    $data = array(
            'registration_id' => $deviceToken,
            'collapse_key' => $collapseKey,
            'data.message' => $messageText ,
            'data.notificationID' => $yourKey 
            );
Run Code Online (Sandbox Code Playgroud)

通知正常,但notifyID值较旧,我先推了.它不是链接.但是我发送的data.message消息字符串是新来的.

php中的推送通知代码是:

        <?php       
            $Key    =   "0000000";
            $deviceToken    =   "sdfsjdfljsd";
            $collapseKey    =   1;
            $messageText    =   "Hi welcome";
            //$yourKey      =   100;
            $yourKey        =   101;

        $headers = array('Authorization:key=' . $Key);
        $data = array(
            'registration_id' => $deviceToken,
            'collapse_key' => $collapseKey,
            'data.message' => $messageText ,
            'data.notificationID' => $yourKey 
            );

        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, "https://android.googleapis.com/gcm/send");
        if ($headers)
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, …
Run Code Online (Sandbox Code Playgroud)

android push-notification google-cloud-messaging

0
推荐指数
1
解决办法
1070
查看次数

如何使用GCM取消注册设备

我尝试使用此代码通过gcm取消注册设备:

 btn = (Button)findViewById(R.id.button1);

 btn.setOnClickListener(new View.OnClickListener() {            
    @Override
    public void onClick(View v) {
         GCMRegistrar.unregister(MainActivity.this);
    }
});
Run Code Online (Sandbox Code Playgroud)

知道我在onCreate()方法中使用了这个代码...但是当我尝试向通知发送通知时,DeviceIDArrives意味着取消注册过程没有成功

我的 onCreate()

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    GCMRegistrar.checkDevice(this);
    GCMRegistrar.checkManifest(this);
    txt = (TextView)findViewById(R.id.txt_nn);
    final String regId = GCMRegistrar.getRegistrationId(this);
    if (regId.equals(""))
    {
      GCMRegistrar.register(this, "344XXXXXXX571");
    }
    else
    {
      Log.v("Info : ", "Already registered");
    }

     txt.setText(regId);    

     btn = (Button)findViewById(R.id.button1);

     btn.setOnClickListener(new View.OnClickListener() {            
        @Override
        public void onClick(View v) {
             GCMRegistrar.unregister(MainActivity.this);
        }
    });  
}
Run Code Online (Sandbox Code Playgroud)

我的LogCat

12-25 17:16:31.290: E/Trace(18754): error opening trace file: …
Run Code Online (Sandbox Code Playgroud)

android google-cloud-messaging

0
推荐指数
1
解决办法
7633
查看次数

将数据从服务传递到当前活动

我正在构建一个使用GCM来推送消息和通知的聊天应用程序.

在应用程序中,我有一个活动,列出会话线程(ConversationListActivity)和一个活动,显示线程内的对话(ConversationActivity).

我在GCMIntentService的onMessage方法中捕获新消息.通知有效,消息按预期记录.

public class GCMIntentService extends GCMBaseIntentService {
  @Override
  protected void onMessage(Context context, Intent intent) {
    Bundle extras = intent.getExtras();
    String sender = extras.getString("sender");
    String message = extras.getString("message");

    ConversationModel model = new ConversationModel(context);
    model.open();
    model.createMessage(sender, message.trim(), true, true, ConversationMessage.STATUS_SENT);
    model.close();

    this.createMessageNotification(context, sender, message);
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是,如果GCM在ConversationActivity激活时推送新消息,我不希望它生成通知.相反,我希望对话直接刷新.

ConversationActivity每次有来自GCM的新消息时,如何让主动刷新消息列表?

java android google-cloud-messaging

0
推荐指数
1
解决办法
1089
查看次数

适用于Android的Google Cloud Messaging可以在服务器之间运行,也可以反之亦然(从客户端到服务器)?

stackoverflow研究员,

由于我是云计算事务的新手,我想问你一个问题:Android的Google Cloud Messaging是从服务器到客户端,还是反之亦然(从客户端到服务器)?

我问你这个,因为我正在开发一个Android应用程序.结构,一般来说,它是这样的:我想用我的笔记本电脑作为服务器 - 并在这里执行所有的计算.然后,从我的服务器(笔记本电脑),将所有内容发送到云端,从云端直接发送到我的Android运行设备.我想在我的本地服务器上执行计算和数据库存储(因为,因为我是一名学生,我将没有足够的钱来实际支付来自谷歌的服务器(让我们说),所以我专注于什么是免费的适合我的需要)并使用Google Cloud Messaging for Android与我的Android设备进行通信.(我希望我的应用程序独立于我的移动设备的硬件,而且,我想编写将在我的服务器上用Java执行计算的程序).

我知道我可以将消息从服​​务器发送到我的设备(通过云端),但问题是:我是否也可以将消息从我的设备发送到服务器?我问这个,因为计算将在我从我的设备提交之后进行(基本上,我的Android应用程序将是一个界面,我可以从那里将数据发送到我的服务器(通过云)然后接收(也通过云) )我的设备上的计算结果)

根据我目前正在阅读的内容(http://developer.android.com/google/gcm/index.html),似乎我只能将消息从服​​务器发送到我的设备,但我决定问,因为到目前为止,我发现了唯一的免费消息传递框架(使用云).

谢谢.

cloud android google-cloud-messaging

0
推荐指数
1
解决办法
2722
查看次数

Google Cloud Messaging未知来源例外

您好我想将Google的GCM实现到我的Android应用程序中.

我链接到谷歌播放服务库

我写了以下权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.torasecurity.mobile.alarm.RECEIVE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />


<permission android:name="com.torasecurity.mobile.alarm.C2D_MESSAGE" 
    android:protectionLevel="signature" />
<uses-permission android:name="com.torasecurity.mobile.alarm.C2D_MESSAGE" />
Run Code Online (Sandbox Code Playgroud)

简单的广播接收器:

  <receiver android:name=".MyReceiver" android:exported="true"
       android:permission="com.google.android.c2dm.permission.SEND" >
     <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <category android:name="YOUR_PACKAGE_NAME" />
     </intent-filter>
 </receiver>
Run Code Online (Sandbox Code Playgroud)

但是在尝试注册时我得到了这个堆栈跟踪:

08-07 11:43:12.806: W/System.err(19067): java.io.IOException: MAIN_THREAD
08-07 11:43:12.826: W/System.err(19067):    at com.google.android.gms.gcm.GoogleCloudMessaging.register(Unknown Source)
08-07 11:43:12.826: W/System.err(19067):    at com.torasecurity.mobile.alarm.SplashScreen.register(SplashScreen.java:27)
08-07 11:43:12.826: W/System.err(19067):    at com.torasecurity.mobile.alarm.SplashScreen.onCreate(SplashScreen.java:56)
08-07 11:43:12.826: W/System.err(19067):    at android.app.Activity.performCreate(Activity.java:5206)
08-07 11:43:12.826: W/System.err(19067):    at 
Run Code Online (Sandbox Code Playgroud)

有没有人知道我做错了什么?

android google-cloud-messaging

0
推荐指数
1
解决办法
2910
查看次数

我们如何实现Web推送通知?

如何使用googles GCM服务在浏览器中实现推送通知.实现相同的步骤是什么.

firefox google-chrome google-cloud-messaging web-push push-api

0
推荐指数
1
解决办法
1548
查看次数

Android GCM"未注册",但getRegistrationId返回ID

我们将GCM与多个Android设备配合使用.我们能够使用GCM通知的一些设备(不是全部)最近无法接收GCM触发器(GCM服务器返回未注册).

但是,当我们在设备上调用getRegistrationId()时,我们会在它运行时获得相同的注册ID.

在客户端返回实际ID时,知道为什么服务器返回未注册?

android google-cloud-messaging google-cloud-platform

0
推荐指数
1
解决办法
6657
查看次数

使用Firebase,Node.js和Google Cloud Messaging for iOS应用推送通知

我正在尝试使用Firebase,Node.js和Google Cloud Messaging来发送iOS应用的推送通知.下面是Node.js代码

var Firebase = require('firebase'),
    gcm = require('node-gcm')
    ;
var pushRef = new Firebase("https://<myapp>.firebaseio.com/ios/queue/tasks");

pushRef.on("child_added", function(snapshot) {

    console.log("child added event registers");

    var notificationData = snapshot.val();
    sendNotification(notificationData);
    snapshot.ref().remove();

});

function sendNotification(notificationData) {

    var message = new gcm.Message({
      notification: {
        title: "Title",
        body: notificationData.message
      }
    });

    var sender = new gcm.Sender(<my Google Server Key>);
    var registrationTokens = [notificationData.recipientId];

    console.log("about to send message");
    console.log("this is the registration token: " + registrationTokens);

    sender.send(message, { registrationTokens: registrationTokens }, 10, function (err, response) { …
Run Code Online (Sandbox Code Playgroud)

push-notification node.js firebase google-cloud-messaging

0
推荐指数
1
解决办法
5945
查看次数