我想在我的Android应用程序中集成GSM.我可以使用我的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) 我已经为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) 我在接收谷歌推送通知时面临以下问题.我从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) 我尝试使用此代码通过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) 我正在构建一个使用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的新消息时,如何让主动刷新消息列表?
stackoverflow研究员,
由于我是云计算事务的新手,我想问你一个问题:Android的Google Cloud Messaging是从服务器到客户端,还是反之亦然(从客户端到服务器)?
我问你这个,因为我正在开发一个Android应用程序.结构,一般来说,它是这样的:我想用我的笔记本电脑作为服务器 - 并在这里执行所有的计算.然后,从我的服务器(笔记本电脑),将所有内容发送到云端,从云端直接发送到我的Android运行设备.我想在我的本地服务器上执行计算和数据库存储(因为,因为我是一名学生,我将没有足够的钱来实际支付来自谷歌的服务器(让我们说),所以我专注于什么是免费的适合我的需要)并使用Google Cloud Messaging for Android与我的Android设备进行通信.(我希望我的应用程序独立于我的移动设备的硬件,而且,我想编写将在我的服务器上用Java执行计算的程序).
我知道我可以将消息从服务器发送到我的设备(通过云端),但问题是:我是否也可以将消息从我的设备发送到服务器?我问这个,因为计算将在我从我的设备提交之后进行(基本上,我的Android应用程序将是一个界面,我可以从那里将数据发送到我的服务器(通过云)然后接收(也通过云) )我的设备上的计算结果)
根据我目前正在阅读的内容(http://developer.android.com/google/gcm/index.html),似乎我只能将消息从服务器发送到我的设备,但我决定问,因为到目前为止,我发现了唯一的免费消息传递框架(使用云).
谢谢.
您好我想将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)
有没有人知道我做错了什么?
如何使用googles GCM服务在浏览器中实现推送通知.实现相同的步骤是什么.
firefox google-chrome google-cloud-messaging web-push push-api
我们将GCM与多个Android设备配合使用.我们能够使用GCM通知的一些设备(不是全部)最近无法接收GCM触发器(GCM服务器返回未注册).
但是,当我们在设备上调用getRegistrationId()时,我们会在它运行时获得相同的注册ID.
在客户端返回实际ID时,知道为什么服务器返回未注册?
我正在尝试使用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)