Getting “EndpointDisabled” from Amazon SNS

前端 未结 9 1059
深忆病人
深忆病人 2020-12-23 11:34

I\'m using Amazon SNS. Notifications work well, but sometimes I get this error:

{
    \"message\": \"Endpoint is disabled\",
    \"code\": \"EndpointDisabled         


        
9条回答
  •  天命终不由人
    2020-12-23 12:04

    I am using this. If the get endpoint response finds the NotFound error, it creates an endpoint (this should never happen, but hell, it's on AWS SNS documentation website). If that doesn't happen, it means you're getting the info for the endpoint. It can either be ok (tokens match and enabled is true), or the other way around (in which case you need to update it).

        - (void)getEndpointDetailsWithResponse:(void(^)(AWSSNSGetEndpointAttributesResponse *response, AWSTask *))handleResponse {
        NSString * deviceTokenForAWS = [self deviceTokenForAWS];
        AWSSNS *manager = [AWSSNS SNSForKey:@"EUWest1SNS"];
    
        AWSSNSGetEndpointAttributesInput *input = [AWSSNSGetEndpointAttributesInput new];
        input.endpointArn = self.endpointArn;
        AWSTask *getEndpointAttributesTask = [manager getEndpointAttributes:input];
        [getEndpointAttributesTask continueWithBlock:^id(AWSTask *task) {
            NSLog(@"%@ Error: %@", task.result, task.error);
    
    
            AWSSNSGetEndpointAttributesResponse *result = task.result;
            NSError *error = task.error;
    
            if (error.code == AWSSNSErrorNotFound) {
                [self createEndpointWithResponse:^(AWSSNSCreateEndpointResponse *createResponse) {
    
    
                    dispatch_async(dispatch_get_main_queue(), ^{
                        if (handleResponse != nil) {
                            handleResponse(result, task);
                        }
                    });
                }];
            } else {
    
                NSLog(@"response for get endpoint attributes : %@", result);
    
                NSString *token = [result.attributes valueForKey:@"Token"];
                NSString *enabled = [result.attributes valueForKey:@"Enabled"];
                NSLog(@"token : %@, enabled : %@", token, enabled);
                BOOL wasSuccessful = [token isEqualToString:deviceTokenForAWS] && ([enabled localizedCaseInsensitiveCompare:@"true"] == NSOrderedSame);
    
                if (!wasSuccessful) {
                    NSLog(@"device token does not match the AWS token OR it is disabled!");
                    NSLog(@"Need to update the endpoint");
    
                    AWSSNSSetEndpointAttributesInput *seai = [AWSSNSSetEndpointAttributesInput new];
                    seai.endpointArn = self.endpointArn;
    
                NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:deviceTokenForAWS, @"Token", @"true", @"Enabled", nil];
                seai.attributes = attributes;
    
                    AWSTask *setEndpointAttributesTask = [manager setEndpointAttributes:seai];
                    [setEndpointAttributesTask continueWithBlock:^id(AWSTask *task) {
                        NSLog(@"response : %@, error: %@", task.result, task.error);
    
                        dispatch_async(dispatch_get_main_queue(), ^{
                            if (handleResponse != nil) {
                                handleResponse(result, task);
                            }
                        });
                        return nil;
                    }];
    
                } else {
                    NSLog(@"all is good with the endpoint");
    
                    dispatch_async(dispatch_get_main_queue(), ^{
                        if (handleResponse != nil) {
                            handleResponse(result, task);
                        }
                    });
                }
            }
            return nil;
        }];
    }
    

    This is the exact replica of the AWS SNS token management documentation found here: https://mobile.awsblog.com/post/Tx223MJB0XKV9RU/Mobile-token-management-with-Amazon-SNS

    I can attach the rest of my implementation if needed, but this part is the most important one.

提交回复
热议问题