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 推送通知服务的主要内容,如果未能解决你的问题,请参考以下文章

未收到来自 Amazon SNS 的 GCM 推送通知

将推送通知迁移到 FCM 或 Amazon SNS?

Amazon SNS 推送通知特殊字符

如何在 Node JS 中使用 Amazon SNS 向 iOS 设备发送 VoIP 推送通知

Amazon SNS GCM 推送通知中没有标题

推送通知在 Amazon SNS 中不起作用