2017-06-08 9 views
1

私は2つの別々のアプリケーション用に2つのbundle_idがあり、両方にプッシュ通知を送信する必要があるという問題が、.P8証明書を受け入れるAppleプッシュ通知にPush8 gemを使用しています。 Push8 gemは、bundle.id ENV ['APN_BUNDLE_ID']パラメータをapplication.ymlファイルから自動的に受け取ります。しかし、ENV ['APN_VENDOR_BUNDLE_ID']をプッシュ通知を送信する別のAPPにも使用したいと思っています。 send.end_user_typeは、「ユーザー」私はAPN_VENDOR_BUNDLE_IDを使用したいと休息のために、トピックとしてバンドルIDのAPN_BUNDLE_IDを使用したい場合にはクラスからメソッドを初期化する引数を渡すにはどうすればいいですか?

プッシュ通知を送信するために私のコードはここに

ここ
def self.send_notification_ios(device_id, notification_id) 
    send = Notification.where(id: notification_id).first 
    if Rails.env == 'development' 
     apn = P8push::Client.development 
    else 
     apn = P8push::Client.production 
    end 

    token = device_id 
    notification = P8push::Notification.new(device: token) 
    notification.alert = send.template.message % { txnid: send.order.txnid } 
    notification.sound = 'sosumi.aiff' 
    apn.push(notification) 
    end 

です。しかし、私は、APN_VENDOR_BUNDLE_IDをparamとして渡して、gemのclient.rbファイルのメソッドを初期化する方法を知らない。したがって、常にAPN_BUNDLE_IDをトピックとして受け入れ、したがって、エラー・トピックは許可されません。ここで

は宝石用client.rbファイルです: https://github.com/andrewarrow/p8push/blob/master/lib/p8push/client.rb

リンク宝石用initialize方法は次の2つの選択肢を持って、その属性をカスタマイズするための宿泊施設をしない場合はhttps://github.com/andrewarrow/p8push

答えて

1

次のとおりです。モンキーパッチはあなたが望むようにするためにパッチします。これは面倒です。サブクラスにして代わりに使用してください。

サブクラスのソリューションは、次のようになります。

apn = UserAwareClient.development(user_type) 

この宝石は、あなたを作るために、いくつかのプルリクエストで、より多くの柔軟作ることができる:

class UserAwareClient < P8Push::Client 
    def self.development(user_type) 
    client = self.new(user_type) 
    client.jwt_uri = APPLE_DEVELOPMENT_JWT_URI 
    client 
    end 

    def self.production(user_type) 
    client = self.new(user_type) 
    client.jwt_uri = APPLE_PRODUCTION_JWT_URI 
    client 
    end 

    def initialize(user_type) 
    # Initialize as the parent class would 
    super 

    # Then detect the user_type argument and decide how to configure it 
    @private_key = 
     case (user_type) 
     when 'User' 
     File.read(ENV['APN_PRIVATE_KEY']) 
     else 
     File.read(ENV['APN_VENDOR_BUNDLE_ID']) 
     end 
    end 
    end 
end 

次に、あなたはそれを作成します人生が楽になりますので、それも考慮してください。

関連する問題