Android Programlama C# WinForms ve Mono GTK Yazılım ve Sistem Güvenliği

Xamarin Onesignal Push Msg

Solution’daki tüm projelere Nuget aracını kullanarak Com.OneSignal ve Xamarin.Essentials referans ediyoruz.

OneSignal.Current interface’i genelde callback fonksiyonları dışarıdan alarak çalışıyor. Ben örnekte android için kurulumu göstereceğim. IOS için güncel dökümanları Onesignal’in dökümantasyonunda bulabilirsiniz. Projede nereden başlayacağımız kısmıyla ilgili örneklerin güncel olmadığını farkettim ve bu konuyu ele alacağım.

//MainActivity.cs
protected override void OnCreate(Bundle savedInstanceState) {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(savedInstanceState);

            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App());

            //OneSignal.Current.SetLogLevel(LOG_LEVEL.DEBUG, LOG_LEVEL.DEBUG);
            OneSignal.Current.SetLogLevel(LOG_LEVEL.VERBOSE, LOG_LEVEL.NONE);
            OneSignal.Current.StartInit("onesignal app id")
                .HandleNotificationReceived(HandleNotificationReceived)
                .InFocusDisplaying(OSInFocusDisplayOption.Notification)
                .EndInit();
            OneSignal.Current.RegisterForPushNotifications();

        }
        private static void HandleNotificationReceived(OSNotification notification) {
            //aşağıdaki bilgiler mesajdan zaten geliyor. Manipulasyon için tercih edilebilir.
            notification.payload.largeIcon= "https://.../images/logo.png";
            notification.payload.smallIcon = "logo.png";
            notification.payload.lockScreenVisibility = 1;
            notification.payload.ledColor = "FF9900FF";
        }

Mesaj gönderme işlemi aşağıdaki şekilde yapılabilir. Ben bu test uygulamasında ana ekrana bir buton koydum ve onun click metoduna yazıyorum.

 //MainPage.xaml.cs

private void IdsAvailable(string userid, string pushtoken) {
            userID = userid;
            pushToken = pushtoken;
        }

        private void Button_Clicked(object sender, EventArgs e) {
            OneSignal.Current.IdsAvailable(IdsAvailable);
            var notification = new Dictionary<string, object>();
            notification["contents"] = new Dictionary<string, string>() { { "en", "Test Message" } };
           //dikkat bu sadece kendine göndermiş olacaktır
            notification["include_player_ids"] = new List<string>() { 
                userID
            };
            notification["send_after"] = DateTime.Now.ToUniversalTime().AddSeconds(1).ToString("U");
            notification["large_icon"] = "https://..../images/logo.png";
            notification["small_icon"] = "logo.png";
            notification["led_color"] = "FF9900FF";

            OneSignal.Current.PostNotification(notification, (responseSuccess) => {
                Console.WriteLine("Notification posted successful! Delayed by about 30 secounds to give you time to press the home button to see a notification vs an in-app alert.\n" + Json.Serialize(responseSuccess));
            }, (responseFailure) => {
                Console.WriteLine("Notification failed to post:\n" + Json.Serialize(responseFailure));
            });
        }

AndroidManifest.xml yetkilendirmelerini unutmayalım. Ben ne varsa verdim elim boldur. Minimum gereksinimlere onesignal resmi dökümanlarından bakılabilir.

<permission android:name="com.companyname.netlogxamarintest.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />
<uses-permission android:name="com.companyname.netlogxamarintest.permission.C2D_MESSAGE" />
<application android:label="netlogxamarintest.Android">
    <receiver android:name="com.onesignal.GcmBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="com.onesignal.NotificationOpenedReceiver" />
        </intent-filter>
    </receiver>
    <receiver android:name="com.onesignal.NotificationOpenedReceiver" />
    <service android:name="com.onesignal.GcmIntentService" />
    <service android:name="com.onesignal.GcmIntentJobService"
             android:permission="android.permission.BIND_JOB_SERVICE" />
</application>

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir