项目作者: JimmyPun610

项目描述 :
極光推送 Xamarin Form Library, Android Push Notification in China via JiGuang
高级语言: C#
项目地址: git://github.com/JimmyPun610/XF.JiGuangPush.git
创建时间: 2019-09-13T06:38:13Z
项目社区:https://github.com/JimmyPun610/XF.JiGuangPush

开源协议:

下载


XF.JiGuangPush

極光推送 Xamarin Form Library, Android Push Notification in China via JiGuang

Product website : https://www.jiguang.cn/push

Currently, this library only support Android

Installataion

  1. Install-Package XF.JiGuang -Version 1.0.5

Android Project Setup

  1. Create Custom JCommonService class, setup the service name, replace {ProjectNamespace} to your project namespace like “XF.JiGuangPush.Sample.Droid.Notificaiton”

    1. [Service(Name = "{ProjectNamespace}.MyJCommonService")]
    2. public class MyJCommonService : JiGuangPush.Droid.XFJiGuangCommonService
    3. {
    4. }
  2. Create Custom JPushMessageReceiver class, replace {ProjectNamespace} to your project namespace like “XF.JiGuangPush.Sample.Droid.Notificaiton”. You can also override the methods for your own actions.

    1. [BroadcastReceiver(Name = "{ProjectNamespace}.MyJPushMessageReceiver")]
    2. public class MyJPushMessageReceiver : XFJiGuangPushMessageReceiver
    3. {
    4. public override void OnRegister(Context p0, string p1)
    5. {
    6. base.OnRegister(p0, p1);
    7. }
    8. public override void OnConnected(Context p0, bool p1)
    9. {
    10. base.OnConnected(p0, p1);
    11. }
    12. public override void OnTagOperatorResult(Context p0, JPushMessage p1)
    13. {
    14. base.OnTagOperatorResult(p0, p1);
    15. }
    16. public override void OnAliasOperatorResult(Context p0, JPushMessage p1)
    17. {
    18. base.OnAliasOperatorResult(p0, p1);
    19. }
    20. public override void OnNotifyMessageArrived(Context p0, NotificationMessage p1)
    21. {
    22. base.OnNotifyMessageArrived(p0, p1);
    23. }
    24. public override void OnNotifyMessageOpened(Context p0, NotificationMessage p1)
    25. {
    26. //Open your application before trigger the open action
    27. Intent i = new Intent(p0, typeof(MainActivity));
    28. i.AddFlags(ActivityFlags.SingleTop);
    29. Android.App.Application.Context.StartActivity(i);
    30. base.OnNotifyMessageOpened(p0, p1);
    31. }
    32. }
  3. Manifest sample

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="{your_application_id}" android:installLocation="auto">
    3. <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" ></uses-sdk>
    4. <!-- Required -->
    5. <permission android:name="{your_application_id}.permission.JPUSH_MESSAGE" android:protectionLevel="signature" ></permission>
    6. <!-- Required 一些系统要求的权限,如访问网络等-->
    7. <uses-permission android:name="{your_application_id}.permission.JPUSH_MESSAGE" ></uses-permission>
    8. <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" ></uses-permission>
    9. <uses-permission android:name="android.permission.INTERNET" ></uses-permission>
    10. <uses-permission android:name="android.permission.READ_PHONE_STATE" ></uses-permission>
    11. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" ></uses-permission>
    12. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" ></uses-permission>
    13. <uses-permission android:name="android.permission.WRITE_SETTINGS" ></uses-permission>
    14. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" ></uses-permission>
    15. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" ></uses-permission>
    16. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" ></uses-permission>
    17. <!-- Optional. Required for location feature -->
    18. <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" ></uses-permission>
    19. <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" ></uses-permission>
    20. <!-- 用于开启 debug 版本的应用在 6.0 系统上的层叠窗口权限 -->
    21. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" ></uses-permission>
    22. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" ></uses-permission>
    23. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" ></uses-permission>
    24. <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" ></uses-permission>
    25. <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" ></uses-permission>
    26. <uses-permission android:name="android.permission.GET_TASKS" ></uses-permission>
    27. <uses-permission android:name="android.permission.VIBRATE" ></uses-permission>
    28. <application android:label="{your_application_id}.Android" android:icon="@mipmap/icon">
    29. <!-- Required SDK 核心功能-->
    30. <!-- 可配置android:process参数将PushService放在其他进程中 -->
    31. <service android:name="cn.jpush.android.service.PushService" android:enabled="true" android:exported="false">
    32. <intent-filter>
    33. <action android:name="cn.jpush.android.intent.REGISTER" ></action>
    34. <action android:name="cn.jpush.android.intent.REPORT" ></action>
    35. <action android:name="cn.jpush.android.intent.PushService" ></action>
    36. <action android:name="cn.jpush.android.intent.PUSH_TIME" ></action>
    37. </intent-filter>
    38. </service>
    39. <!-- since 3.0.9 Required SDK 核心功能-->
    40. <provider android:authorities="{your_application_id}.DataProvider" android:name="cn.jpush.android.service.DataProvider" android:exported="true" ></provider>
    41. <!-- since 1.8.0 option 可选项。用于同一设备中不同应用的JPush服务相互拉起的功能。 -->
    42. <!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 -->
    43. <service android:name="cn.jpush.android.service.DaemonService" android:enabled="true" android:exported="true">
    44. <intent-filter>
    45. <action android:name="cn.jpush.android.intent.DaemonService" ></action>
    46. <category android:name="{your_application_id}" ></category>
    47. </intent-filter>
    48. </service>
    49. <!-- since 3.1.0 Required SDK 核心功能-->
    50. <provider android:authorities="{your_application_id}.DownloadProvider" android:name="cn.jpush.android.service.DownloadProvider" android:exported="true" ></provider>
    51. <!-- Required SDK核心功能-->
    52. <receiver android:name="cn.jpush.android.service.PushReceiver" android:enabled="true">
    53. <intent-filter android:priority="1000">
    54. <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" ></action>
    55. <!--Required 显示通知栏 -->
    56. <category android:name="{your_application_id}" ></category>
    57. </intent-filter>
    58. <intent-filter>
    59. <action android:name="android.intent.action.USER_PRESENT" ></action>
    60. <action android:name="android.net.conn.CONNECTIVITY_CHANGE" ></action>
    61. </intent-filter>
    62. <!-- Optional -->
    63. <intent-filter>
    64. <action android:name="android.intent.action.PACKAGE_ADDED" ></action>
    65. <action android:name="android.intent.action.PACKAGE_REMOVED" ></action>
    66. <data android:scheme="package" ></data>
    67. </intent-filter>
    68. </receiver>
    69. <!-- Required SDK核心功能-->
    70. <activity android:name="cn.jpush.android.ui.PushActivity" android:configChanges="orientation|keyboardHidden" android:theme="@android:style/Theme.NoTitleBar" android:exported="false">
    71. <intent-filter>
    72. <action android:name="cn.jpush.android.ui.PushActivity" ></action>
    73. <category android:name="android.intent.category.DEFAULT" ></category>
    74. <category android:name="{your_application_id}" ></category>
    75. </intent-filter>
    76. </activity>
    77. <!-- SDK 核心功能-->
    78. <activity android:name="cn.jpush.android.ui.PopWinActivity" android:configChanges="orientation|keyboardHidden" android:exported="false" android:theme="@style/MyDialogStyle">
    79. <intent-filter>
    80. <category android:name="android.intent.category.DEFAULT" ></category>
    81. <category android:name="{your_application_id}" ></category>
    82. </intent-filter>
    83. </activity>
    84. <!-- 注意此配置在 JPush 3.2.0 及以前版本是必须配置,3.2.0 以后版本已废弃此配置-->
    85. <service android:name="cn.jpush.android.service.DownloadService" android:enabled="true" android:exported="false"></service>
    86. <!-- Since JCore2.0.0 Required SDK核心功能-->
    87. <!-- 可配置android:process参数将Service放在其他进程中;android:enabled属性不能是false -->
    88. <!-- 这个是自定义Service,要继承极光JCommonService,可以在更多手机平台上使得推送通道保持的更稳定 -->
    89. <service android:name="{ProjectNamespace}.MyJCommonService" android:enabled="true" android:exported="false" android:process=":pushcore">
    90. <intent-filter>
    91. <action android:name="cn.jiguang.user.service.action" ></action>
    92. </intent-filter>
    93. </service>
    94. <!-- Required SDK核心功能-->
    95. <receiver android:name="cn.jpush.android.service.AlarmReceiver" ></receiver>
    96. <!-- User defined. For test only 用户自定义接收消息器,3.0.7开始支持,目前新tag/alias接口设置结果会在该广播接收器对应的方法中回调-->
    97. <receiver android:name="{ProjectNamespace}.MyJPushMessageReceiver" android:enabled="true" android:exported="false">
    98. <intent-filter>
    99. <action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" ></action>
    100. <category android:name="{your_application_id}"></category>
    101. </intent-filter>
    102. </receiver>
    103. <!--since 3.3.0 Required SDK核心功能-->
    104. <activity android:name="cn.jpush.android.service.JNotifyActivity" android:exported="true" android:taskAffinity="jpush.custom" android:theme="@android:style/Theme.Translucent.NoTitleBar">
    105. <intent-filter>
    106. <action android:name="cn.jpush.android.intent.JNotifyActivity" ></action>
    107. <category android:name="{your_application_id}" ></category>
    108. </intent-filter>
    109. </activity>
    110. <!-- Required . Enable it you can get statistics data with channel -->
    111. <meta-data android:name="JPUSH_CHANNEL" android:value="developer-default" />
    112. <meta-data android:name="JPUSH_APPKEY" android:value="{your_jpush_appkey}" />
    113. </application>
    114. </manifest>
  4. Config manifest.xml for your own project
    ```

  • {your_jpush_appkey}
  • {your_application_id}
  • {ProjectNamespace}.MyJPushMessageReceiver
  • {ProjectNamespace}.MyJCommonService
    ```

Xamarin Form Project Setup

Init the service, prefer doing it in App.cs

  1. JiGuangPush.Shared.JPushInstance.Instance.Init(debugMode);

Setup action when receive callback from JiGuang server, you can let your application response to the callback

  1. JiGuangPush.Shared.JPushInstance.Instance.OnMessageReceived += Instance_OnMessageReceived;
  2. JiGuangPush.Shared.JPushInstance.Instance.OnMessageOpened += Instance_OnMessageOpened;
  3. JiGuangPush.Shared.JPushInstance.Instance.OnConnected += Instance_OnConnected;
  4. JiGuangPush.Shared.JPushInstance.Instance.OnRegistered += Instance_OnRegistered;
  5. JiGuangPush.Shared.JPushInstance.Instance.OnOperationResult += Instance_OnOperationResult;

Current support methods, please refer to official site for the usage.

  1. void Init(bool debugMode);
  2. string GetRegistrationId();
  3. void SetAlias(JiGuangSequence sequence, string alias);
  4. void DeleteAlias(JiGuangSequence sequence);
  5. void GetAlias(JiGuangSequence sequence);
  6. void SetTags(JiGuangSequence sequence, List<string> tags);
  7. void AddTags(JiGuangSequence sequence, List<string> tags);
  8. void DeleteTags(JiGuangSequence sequence, List<string> tags);
  9. void CleanTags(JiGuangSequence sequence);
  10. void GetAllTags(JiGuangSequence sequence);
  11. void SetChannel(string channel);
  12. void ClearAllNotification();
  13. void ClearNotifcation(int notificationId);