Amazon SNS 推送通知服务
Posted
技术标签:
【中文标题】Amazon SNS 推送通知服务【英文标题】:Amazon SNS Push Notification Service 【发布时间】:2014-08-20 02:40:32 【问题描述】:注册 ID 未通过。因此,我无法继续推送消息。此Source code直接取自Amazon SNS Push Notification Service。TRY CATCH异常是否有错误?
public class MessageReceivingService extends Service
private GoogleCloudMessaging gcm;
public static SharedPreferences savedValues;
public static void sendToApp(Bundle extras, Context context)
Intent newIntent = new Intent();
newIntent.setClass(context, androidMobilePushApp.class);
newIntent.putExtras(extras);
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(newIntent);
public void onCreate()
super.onCreate();
final String preferences = getString(R.string.preferences);
savedValues = getSharedPreferences(preferences, Context.MODE_PRIVATE);
// In later versions multi_process is no longer the default
if(VERSION.SDK_INT > 9)
savedValues = getSharedPreferences(preferences, Context.MODE_MULTI_PROCESS);
gcm = GoogleCloudMessaging.getInstance(getBaseContext());
SharedPreferences savedValues = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor1 = savedValues.edit();
editor1.putBoolean(getString(R.string.first_launch), true);
editor1.commit();
if(savedValues.getBoolean(getString(R.string.first_launch), true))
register();
SharedPreferences.Editor editor = savedValues.edit();
editor.putBoolean(getString(R.string.first_launch), false);
editor.commit();
// Let AndroidMobilePushApp know we have just initialized and there may be stored messages
sendToApp(new Bundle(), this);
protected static void saveToLog(Bundle extras, Context context)
SharedPreferences.Editor editor=savedValues.edit();
String numOfMissedMessages = context.getString(R.string.num_of_missed_messages);
int linesOfMessageCount = 0;
for(String key : extras.keySet())
String line = String.format("%s=%s", key, extras.getString(key));
editor.putString("MessageLine" + linesOfMessageCount, line);
linesOfMessageCount++;
editor.putInt(context.getString(R.string.lines_of_message_count), linesOfMessageCount);
editor.putInt(context.getString(R.string.lines_of_message_count), linesOfMessageCount);
editor.putInt(numOfMissedMessages, savedValues.getInt(numOfMissedMessages, 0) + 1);
editor.commit();
postNotification(new Intent(context, AndroidMobilePushApp.class), context);
protected static void postNotification(Intent intentAction, Context context)
final NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
final PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intentAction, Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL);
final Notification notification = new NotificationCompat.Builder(context).setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("Message Received!")
.setContentText("")
.setContentIntent(pendingIntent)
.setAutoCancel(true)
.getNotification();
mNotificationManager.notify(R.string.notification_number, notification);
private void register()
new AsyncTask()
protected Object doInBackground(final Object... params)
String token;
try
token = gcm.register(getString(R.string.project_number));
Log.i("registrationId", token);
catch (IOException e)
Log.i("Registration Error", "mesgerror " + e.getMessage());
return true;
.execute(null, null, null);
public IBinder onBind(Intent arg0)
return null;
【问题讨论】:
其余代码在哪里?至少提供一个完整的方法。 #Robert Harvey..现在我已经提供了完整的代码 好的。您是否收到错误消息或任何其他线索? 当我运行代码时,它应该在 LogCat 中显示注册 ID。但它没有。 【参考方案1】:似乎没有执行 register() 方法中的 AsyncTask。试试下面,
new AsyncTask<Object, Object, Object>() // Specify proper arguments
protected Object doInBackground(final Object... params)
String token;
try
token = gcm.register(getString(R.string.project_number));
Log.i("registrationId", token);
catch (IOException e)
Log.i("Registration Error", "mesgerror " + e.getMessage());
return true;
.execute(null, null, null);
如果这不起作用,请尝试在不使用 AsyncTask 的情况下进行注册。只是为了检查,在任何其他线程的主线程上执行。
【讨论】:
以上是关于Amazon SNS 推送通知服务的主要内容,如果未能解决你的问题,请参考以下文章