Botoを使ってiOSに対してPush通知を行う

BotoというAmazon Web Serviceを操作するライブラリを使ってAmazon SNSに操作してiOSに対してPush通知を送信する事ができたのでメモしておく。

1.管理画面からPush通知を行うところまで

Push通知を行うために

  • App IDの作成
  • 通知用証明書の作成
  • プロビジョニングファイルの作成
  • Amazon SNSに証明書を登録
  • Xcode上で実装

という諸々の手続きが必要だけど、 Amazon SNS Mobile Pushを使ってiOSのPush Notificationを実装するに従って手順通りに進めていければ、Amazon SNSの管理画面からPush通知を特定のデバイスに送信するとこまで出来る。

2.Botoを使ってPythonからPush通知を行う

特定のデバイスにPush通知を行う例


import boto.sns
AWS_ACCESS_KEY = 'your_aws_access_key'

AWS_SECRET_KEY= 'your_aws_secret_key'


arn = 'arn:aws:sns:ap-northeast-1:313519673286:app/APNS_SANDBOX/...'




client = boto.sns.connect_to_region('ap-northeast-1',
                                                    aws_access_key_id=AWS_ACCESS_KEY,
                                                    aws_secret_access_key=AWS_SECRET_KEY)

token = 'your_device_token'



res = client.create_platform_endpoint(
                platform_application_arn=arn,
                token= token,
                custom_user_data='your_user_data')


endpoint = res.get('CreatePlatformEndpointResponse').get('CreatePlatformEndpointResult').get('EndpointArn')
client.publish(target_arn=endpoint, message=u"Hello,furodrive")

特定のトピックを購読しているユーザーに対してPush通知を行う例


import boto.sns
AWS_ACCESS_KEY = '...'
AWS_SECRET_ACCESS_KEY = '...'
arn = 'arn:aws:sns:ap-northeast-1:0000:app/APNS_SANDBOX/...'

client = boto.sns.connect_to_region('ap-northeast-1',
        aws_access_key_id=AWS_ACCESS_KEY,
        aws_secret_access_key=AWS_SECRET_ACCESS_KEY)


res = client.create_platform_endpoint(
                platform_application_arn=arn,
                token= 'your device token',
                custom_user_data='your_user_data')

endpoint = res.get('CreatePlatformEndpointResponse')\
              .get('CreatePlatformEndpointResult').get('EndpointArn')

_topic = client.create_topic('topic_name')
topic = _topic.get('CreateTopicResponse').get('CreateTopicResult').get('TopicArn')

client.publish(topic=topic, message=u"hi, all subscribers.")

topicを購読する場合は


client.subscribe(topic, 'application', endpoint)

で特定のデバイスに購読させることが出来るので


def subscribe(self,topic_name,device_token,user_data):
    client = boto.sns.connect_to_region('ap-northeast-1',
            aws_access_key_id=AWS_ACCESS_KEY,
            aws_secret_access_key=AWS_SECRET_ACCESS_KEY)

    res = client.create_platform_endpoint(
                    platform_application_arn=arn,
                    token=  device_token
                    custom_user_data= user_data)

    endpoint = res.get('CreatePlatformEndpointResponse')\
                  .get('CreatePlatformEndpointResult').get('EndpointArn')

    _topic = client.create_topic(topic_name)
    topic = _topic.get('CreateTopicResponse').get('CreateTopicResult').get('TopicArn')


    client.subscribe(topic, 'application', endpoint)

みたいなメソッドを作ってやれば購読させることが出来る。

Related Contents

Pickup Contents