質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

SNS

SNS(ソーシャル・ネットワーキング・サービス)は、 人と人とのつながりを促進したり、サポートしたりすることが可能なコミュニティ型のWebサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

3978閲覧

AWS SNSで、管理画面からPush通知が送信出来ず、Enabledがfalseになってしまいます。

SoooS

総合スコア6

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

SNS

SNS(ソーシャル・ネットワーキング・サービス)は、 人と人とのつながりを促進したり、サポートしたりすることが可能なコミュニティ型のWebサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2017/07/24 12:47

###前提・実現したいこと
AWS SNSで、iOSからPush通知を実装したいと思っています。
xcodeのバージョンは、8.3.3です。
AppDelegateのdidRegisterForRemoteNotificationWithDeviceTokenで、deviceTokenを取得し、AWSの管理画面上では、正常にendpointsが追加されております。
しかし、Push通知を送信しても、端末にPushは送信されず、管理画面をリロードすると、Enabledがtrueだったものがfalseに変わってしまいます。

###発生している問題・エラーメッセージ
getEndpointAttributesでは、下記のエラーメッセージが表示されます。

"Error: Endpoint attributes error. The device should create endpoint: Error Domain=com.amazonaws.AWSSNSErrorDomain Code=4 \"(null)\" UserInfo={Type=Sender, Message=Invalid parameter: EndpointArn Reason: An ARN must have at least 6 elements, not 1, Code=InvalidParameter, __text=(\n \"\\n \",\n \"\\n \",\n \"\\n \",\n \"\\n \"\n)}"

###該当のソースコード
iOSでは、下記のコードで、endpointの確認と生成を行っています。

func setAWSNotification(deviceToken: Data) { let deviceTokenString = "\(deviceToken as CVarArg)" .trimmingCharacters(in: CharacterSet(charactersIn:"<>")) .replacingOccurrences(of: " ", with: "") UserDefault.deviceToken = deviceTokenString debugPrint("devicetoken:",deviceTokenString) let credentialsProvider = AWSStaticCredentialsProvider(accessKey: StacSettings.awsAccessKey, secretKey: StacSettings.awsSecretKey) let serviceConfiguration = AWSServiceConfiguration(region:.APNortheast1, credentialsProvider:credentialsProvider) AWSServiceManager.default().defaultServiceConfiguration = serviceConfiguration let sns = AWSSNS.default() //get let request: AWSSNSGetEndpointAttributesInput = AWSSNSGetEndpointAttributesInput() request.endpointArn = deviceTokenString sns.getEndpointAttributes(request).continueWith { (task: AWSTask) -> Any? in if let error = task.error { debugPrint("Error: Endpoint attributes error. The device should create endpoint: \(error)"); self.createEndpoint(token: deviceTokenString) return nil } guard let endpointAttributesResult = task.result else { return nil } let attributes: Dictionary<String, String>? = endpointAttributesResult.attributes if !(attributes?["token"] == deviceTokenString) || !(attributes?["Enabled"] == "true") { debugPrint("Error: Device token is old or not valid. The device should set latest information"); self.setAttribute(token: deviceTokenString) } return nil } } fileprivate func createEndpoint(token: String){ let sns = AWSSNS.default() let languages = NSLocale.preferredLanguages let lang = languages.first as String! let json = "{\"lang\":\"\(String(describing: lang))\"}" let input = AWSSNSCreatePlatformEndpointInput() input?.token = token //DeviceTokenを設定 input?.customUserData = json input?.platformApplicationArn = StacSettings.awsPlatFormApplicationArn sns.createPlatformEndpoint(input!).continueWith { (task: AWSTask!) -> AnyObject! in if task.error != nil { debugPrint("Error: \(String(describing: task.error))") } else { let createEndpointResponse = task.result! as AWSSNSCreateEndpointResponse debugPrint("endpointArn: \(String(describing: createEndpointResponse.endpointArn))") } return nil } }

###試したこと
IAMで、ユーザーにAmazonSNSFullAccessの設定もしてますが、ダメでした。
また、ARN(endpointArn)がSNSから送られてくる、createPlatformEndpointでは、登録されたARN(endpointArn)の取得も出来ております。

Pushの送信が出来ないのは、iOSの実装の問題でしょうか?
それとも、AWSでの設定の問題なのでしょうか?
何か、解決方法などご存知の方がいらっしゃいましたら、ご教示いただけないでしょうか。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

証明証の問題で、無事解決出来ました。

投稿2017/08/17 00:48

SoooS

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問