Push keskin sürüm PushSharp 4.0.4 kullanıyorum.Sıra kayıtları nasıl gruplandırılır ve farklı bir iş parçacığında yürütülür ve beklemeye devam eder?
Bir windows uygulamasında kullanıyorum.
üç ana yöntem
1- BroadCastToAll
2- BrodcatsToIOS
3- BrodcatsToAndriod
bir düğme calld gönderme sahip bulunmaktadır. Düğmenin tıklama olayında.
BroadCastToAll işlevini çağırıyorum. İşte
private void btnSend_Click(object sender, EventArgs e)
{
var url = "www.mohammad-jouhari.com"
var promotion = new Promotion();
BroadCastToAll(promotion, url);
}
İşte BrodcastToAndriod Fonksiyon
public void BroadCastToAndriod(Promotion promotion, string url, List<DeviceCatalog> deviceCatalogs)
{
if (deviceCatalogs.Count == 0)
return;
lock (_lock)// Added this lock because there is a potential chance that PushSharp callback execute during registering devices
{
QueueAllGcmDevicesForNotification(promotion, url, deviceCatalogs, logsMessage);
}
}
QueueAllAppleDevic olan BrodcastToAll Fonksiyonu İşte
public void BroadCastToAll(Promotion promotion, string url)
{
var deviceCatalogs = GetDeviceCatalog();
BroadCastToIOS(promotion, url, deviceCatalogs.Where(d => d.OS == "IOS").ToList());
BroadCastToAndriod(promotion, url, deviceCatalogs.Where(d => d.OS == "Android").ToList());
}
olan BrodcastToIOS Fonksiyonu İşte
public void BroadCastToIOS(Promotion promotion, string url, List<DeviceCatalog> deviceCatalogs)
{
if (deviceCatalogs.Count == 0)
return;
lock (_lock)// Added this lock because there is a potential chance that PushSharp callback execute during registering devices
{
QueueAllAppleDevicesForNotification(promotion, url, deviceCatalogs, logsMessage);
}
}
olduğu Ben gönder düğmesine tıkladığınızda burada
private void QueueAllAppleDevicesForNotification(Promotion promotion, string url, List<DeviceCatalog> deviceCatalogs)
{
var apnsServerEnviroment = UseProductionCertificate ? ApnsConfiguration.ApnsServerEnvironment.Production : ApnsConfiguration.ApnsServerEnvironment.Sandbox;
var fileService = new FileService();
var filePath = Application.StartupPath+ "/Certifcates/" + (UseProductionCertificate ? "prod.p12" : "dev.p12");
var buffer = fileService.GetFileBytes(filePath);
var config = new ApnsConfiguration(apnsServerEnviroment, buffer, APPLE_CERTIFICATE_PWD);
apnsServiceBroker = new ApnsServiceBroker(config);
apnsServiceBroker.OnNotificationFailed += (notification, aggregateEx) => {
aggregateEx.Handle (ex => {
// Log the Resposne
});
};
apnsServiceBroker.OnNotificationSucceeded += (notification) => {
// Log The Response
};
apnsServiceBroker.Start();
foreach (var deviceToken in deviceCatalogs) {
var title = GetTitle(promotion, deviceToken);
//title += DateTime.UtcNow.TimeOfDay.ToString();
var NotificationPayLoadObject = new NotificationPayLoadObjectApple();
NotificationPayLoadObject.aps.alert = title;
NotificationPayLoadObject.aps.badge = 0;
NotificationPayLoadObject.aps.sound = "default";
NotificationPayLoadObject.url = url;
var payLoad = JObject.Parse(JsonConvert.SerializeObject(NotificationPayLoadObject));
apnsServiceBroker.QueueNotification(new ApnsNotification
{
Tag = this,
DeviceToken = deviceToken.UniqueID,
Payload = payLoad
});
}
var fbs = new FeedbackService(config);
fbs.FeedbackReceived += (string deviceToken, DateTime timestamp) =>
{
// This Token is no longer avaialble in APNS
new DeviceCatalogService().DeleteExpiredIosDevice(deviceToken);
};
fbs.Check();
apnsServiceBroker.Stop();
}
Ve esForNotification fonksiyonu
Şimdi QueueAllGcmDevicesForNotificationprivate void QueueAllGcmDevicesForNotification(Promotion promotion, string url, List<DeviceCatalog> deviceCatalogs,)
{
var config = new GcmConfiguration(ANDROID_SENDER_ID, ANDROID_SENDER_AUTH_TOKEN, ANDROID_APPLICATION_ID_PACKAGE_NAME);
gcmServiceBroker = new GcmServiceBroker(config);
gcmServiceBroker.OnNotificationFailed += (notification, aggregateEx) => {
aggregateEx.Handle (ex => {
// Log Response
return true;
});
};
gcmServiceBroker.OnNotificationSucceeded += (notification) => {
// Log Response
};
var title = GetTitle(shopexPromotion);
gcmServiceBroker.Start();
foreach (var regId in deviceCatalogs) {
var NotificationPayLoadObject = new NotificationPayLoadObjectAndriod(url, title, "7", promotion.ImageUrl);
var payLoad = JObject.Parse(JsonConvert.SerializeObject(NotificationPayLoadObject));
gcmServiceBroker.QueueNotification(new GcmNotification
{
RegistrationIds = new List<string> {
regId.UniqueID
},
Data = payLoad
});
}
gcmServiceBroker.Stop();
}
olduğunu. Etkinlik çalışmaya başlayacaktır.
BrodcastToAll işlevi çağrılacaktır. BrodcastToIOS cihazlarını önce ve sonra BrodcatsToAndriod'u arıyorum.
BrodcastToIOS'u arayabilmemin ve tüm aygıtların Kuyruğa girmesini bekleyene kadar bekleyebilmenin ve bildirimin kitaplık tarafından itildiğini ve geri arama olaylarının tam olarak başlatılmasının ardından BrodcastToAndriod Fucntion'u çalıştırmaya başladığım herhangi bir yol var mı?
Hangi kod satırlarını eklemem gerekiyor?
Ayrıca Kuyruğa alınacak cihaz sayısını toplu olarak ayarlamanın bir yolu var mı? Örneğin,
.
bize ben 1000 Aygıtlar
500 IOS
500 Andriod
Ben IOS için 100, 100100100100 sıraya Can ve
bitince Andriod için 100,100,100,100,100 sıraya var diyelim.
Herhangi bir Yardım için teşekkür ederiz.
Teşekkürler.
Bunu kullanmak ve o – user123456
https://github.com/Redth/PushSharp/blob/master/PushSharp.Core/ServiceBroker.cs#L70-L95 O engelliyor ... – Redth
Tamam engellemediğinden Task.WaitAll (all) kullanıyor; Kodumda kullanmam gerekiyor mu? – user123456