2015-05-13 3 views
0

Привет всем, я написал приложение, захватывающее фотографии из facebook. Я сделал это успешно. Теперь я написал службу уведомлений, используя SNS в java. В основном рассылка подписки для первых пользователей, которые входят в мое приложение, а также когда фотография была удалена из репозитория. Моя первая проблема заключается в том, когда я загружаю фотографии и информацию о пользователях из facebook, я хочу проверить, есть ли у нее новый пользователь или нет. Если новый пользователь отправляет подписку, а если нет (в основном пользователь существует в mongoDb, не отправляйте электронную почту для подписки), но мой код продолжает отправлять электронную почту каждому пользователю. И, наконец, когда пользователь удаляет фотографию, они получают уведомление, но когда я его протестировал, я не смог получить электронное письмо. Ниже мой код может кто-то сказать мне, что я делаю неправильно.SNS aws не работает должным образом

public class EmailNotifications { 

private static final String accessKey = "****************"; 
private static final String secretAccess ="***********************"; 

//Notification when user gets info from facebook app for first time. 
public static void SignUP(String email, String Topic){ 
    AmazonSNSClient snsClient = new AmazonSNSClient(new BasicAWSCredentials(accessKey, secretAccess)); 
    snsClient.setRegion(Region.getRegion(Regions.US_WEST_1)); 

    //create a Topic 
    CreateTopicRequest createTopicRequest = new CreateTopicRequest().withName(Topic); 
    CreateTopicResult createTopicResult = snsClient.createTopic(createTopicRequest); 

    //subscribes to a topic 
    SubscribeRequest subscribeRequest = new SubscribeRequest().withTopicArn(createTopicResult.getTopicArn()) 
                   .withProtocol("email").withEndpoint(email); 
    snsClient.subscribe(subscribeRequest); 

} 
//Notification when photo is deleted 
public static void deletePic(String email, String topic, String message){ 

    AmazonSNSClient snsClient = new AmazonSNSClient(new BasicAWSCredentials(accessKey,secretAccess)); 
    snsClient.setRegion(Region.getRegion(Regions.US_WEST_1)); 

    CreateTopicRequest create = new CreateTopicRequest(topic); 
    CreateTopicResult result = snsClient.createTopic(create); 

    System.out.println(result); 
    //String msg = "My text published to SNS topic with email endpoint"; 
    PublishRequest publishRequest = new PublishRequest(result.getTopicArn(), message); 
    publishRequest.setSubject("Deleted Pic"); 

    /*PublishResult pu= */snsClient.publish(publishRequest); 

} 

}

Ниже моя реализация как удалить и захвата данных для первого при условии, MongoDB пуст:

Удаление реализации фото:

@Override 
//deletes photo from mongoDB... but doesn't send out an email stating phootid 
public String deletePhoto(String id, String PhotoId){ 
    String mssg=""; 
    if(accountRepo.exists(id)){ 
     UserAccounts userAccounts=accountRepo.findById(id); 
     UserPhotos photos = photoRepo.findByPhotoId(PhotoId); 
     mssg="The picture "+photos.getPhotoId()+" has been deleted from the application"; 
     EmailNotifications.deletePic(userAccounts.getEmail(),topic,mssg); 
     photoRepo.delete(PhotoId); 
     return "Photo is deleted"; 
    } 
    else 
     return "Photo does not exist"; 
} 

Схватив фото с лица для первый раз. Пользователь должен получить только одно уведомление max. Но я продолжаю получать несколько сообщений.

@Override 
public UserAccounts create(FacebookClient facebookClient){ 
    User me = facebookClient.fetchObject("me", User.class); 
    UserAccounts userAccounts = new UserAccounts(); 
    userAccounts.setEmail(me.getEmail()); 
    userAccounts.setGender(me.getGender()); 
    userAccounts.setId(me.getId()); 
    userAccounts.setName(me.getName()); 
    accountRepo.save(userAccounts); 
    EmailNotifications.SignUP(me.getEmail(), topic); 
    return userAccounts; 
} 

Может кто-нибудь помочь мне в этом

ответ

0

Судя по вашему описанию, и код, он догадается электронной почты вы продолжаете получать при загрузке для пользователя является электронное письмо с подтверждением подписки, потому что все EmailNotifications.SignUp делает подписаться на адрес электронной почты.

Я бы предположил, что причина, по которой у вас нет электронной почты при удалении изображения, заключается в том, что вы не подтвердили подписку. В письмах с подтверждением подписки должна быть ссылка, на которую вы можете нажать, чтобы подтвердить подписку.

Что касается того, почему вы продолжаете получать электронную почту каждый раз при загрузке, я не могу сказать по вашему коду, но в методе create вы показываете, что нет блока if вокруг вызова SignUp, чтобы проверить, существует ли пользователь, который Я думаю, это ваша проблема.

В любом случае, если ваше приложение взаимодействует с пользователями и вы хотите получить хорошее электронное письмо, вам, вероятно, будет лучше использовать SES, что позволит вам полностью контролировать форматирование и брендинг вашей электронной почты.

Смежные вопросы