2017-05-31 80 views
11

我正在使用AWS Mobile HUD和AWS SNS,並遇到問題。AWS Mobile HUD AWS SNS pushManagerDidRegister但未創建端點

什麼工作/已經做

  • 成功創建P12通用證書
  • 在AWS SNS資源已成功創建通過移動HUD通過移動HUD成功創建
  • 話題
  • 集成代碼到項目
  • 集成plist

下面的代碼應該與登記AWS SNS應用程式(裝置):

pushManager = AWSPushManager(forKey: ServiceKey) 
pushManager?.delegate = self 
pushManager?.registerForPushNotifications() 

和 - 大大足夠func pushManagerDidRegister(_ pushManager: AWSPushManager)被調用時,指示成功。我func pushManagerDidRegister(_ pushManager: AWSPushManager)看起來FO

func pushManagerDidRegister(_ pushManager: AWSPushManager) { 
    print("Successfully enabled Push Notifications on platform: \(pushManager.platformARN)") 
    // Subscribe the first topic among the configured topics (all-device topic) 
    if let defaultSubscribeTopic = pushManager.topicARNs?.first { 
     let topic = pushManager.topic(forTopicARN: defaultSubscribeTopic) 
     topic.subscribe() 
    } 
} 

日誌輸出:

Successfully enabled Push Notifications on platform: Optional("arn:aws:sns:eu-central-1:00000000:app/APNS/appname_MOBILEHUD_12345678") 

但:對AWS SNS資源沒有終點在這個應用程序中創建/ platformARN

有趣的事實(也許是原因)

  • 構建配置是DEBUG
  • 已記錄platformARN是RELEASE,而不是DEBUG

edit:用不同的SWIFT編譯標誌玩弄後,我設法設置環境correclty。現在我記錄了沙盒環境中的註冊成功。但是:仍未在AWS SNS上創建端點。

關於我如何進行的任何想法?我試了2天,包括重新認證,重建AWS,無盡的日誌;)

+0

我不熟悉你想要做什麼,只是想幫助。但是在閱讀了關於AWS SNS的文檔後,它提到了需要發送給AWS SNS以將其註冊爲端點的設備令牌。我沒有看到你提供的代碼。 –

+0

@JackG。感謝您對我的麻煩感興趣 - 它應該通過'registerForPushNotifications'(我的代碼中的第三行)的調用來處理。這是AWS SNS的框架功能,它應該可以做到一切。 –

回答

2

所以我在文檔和他們的github中尋找問題。 我注意到他們使用的是AWSSNSCreatePlatformEndpointInput,但您必須從func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData)獲取設備令牌並註冊它。

無論如何,它應該是這樣的

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { 

let deviceTokenString = "\(deviceToken)".stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString:"<>")) 
    .stringByReplacingOccurrencesOfString(" ", withString: "") 
print("deviceTokenString: \(deviceTokenString)") 
NSUserDefaults.standardUserDefaults().setObject(deviceTokenString, forKey: "deviceToken") 
mainViewController()?.displayDeviceInfo() 

let sns = AWSSNS.defaultSNS() 
let request = AWSSNSCreatePlatformEndpointInput() 
request.token = deviceTokenString 
request.platformApplicationArn = SNSPlatformApplicationArn 
sns.createPlatformEndpoint(request).continueWith(executor: AWSExecutor.mainThreadExecutor(), block: { (task: AWSTask!) -> AnyObject! in 
    if task.error != nil { 
     print("Error: \(task.error)") 
    } else { 
     let createEndpointResponse = task.result as! AWSSNSCreateEndpointResponse 
     print("endpointArn: \(createEndpointResponse.endpointArn)") 
     NSUserDefaults.standardUserDefaults().setObject(createEndpointResponse.endpointArn, forKey: "endpointArn") 
     self.mainViewController()?.displayDeviceInfo() 
    } 

    return nil 
}) 
} 

請更新我發生了什麼 和好運

+0

這是使用vanilla SNS的方法,但是我使用AWS MObileHUB,它應該自行處理這部分:/ –

+0

我爲這個錯誤道歉。 –