- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发 Urban Airship,以便通过我的应用程序推送通知。在设备中安装我的应用程序后,从我的 Urban Airship 网络帐户进行了测试推送。到时候可以收到推送通知。
但是在登录到域和用户页面后,尝试从上述相同的过程进行推送。但是收不到推送通知。
在 Urban Airship 网络帐户页面错误控制台显示“应用程序无权发送到此设备:折叠计数:2”“原始消息:错误:不匹配的发件人 ID”错误。
有人可以帮忙吗?
我的应用 list 文件
<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="false"
android:xlargeScreens="true" >
</supports-screens>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- below permission added for mixpanel api -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<!-- for cloud to device messaging -->
<permission
android:name="com.iw.show.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.iw.show.permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<application
android:name="com.iw.show.MyApplication"
android:hardwareAccelerated="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:largeHeap="true" >
<activity
android:name="com.iw.show.SplashActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Holo.NoActionBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.iw.show.DomainActivity"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:isScrollContainer="false"
android:theme="@android:style/Theme.Black.NoTitleBar"
android:windowSoftInputMode="adjustPan" >
</activity>
<activity
android:name="com.iw.show.UploadHome"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:hardwareAccelerated="true"
android:theme="@android:style/Theme.Black.NoTitleBar"
android:windowSoftInputMode="adjustPan" >
</activity>
<activity
android:name="com.iw.show.FilePickerActivity"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
<activity
android:name="com.iw.show.TempMediaPlayer"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
<activity
android:name="com.iw.show.UploadResult"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Black.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="audio/*" />
<data android:mimeType="image/*" />
<data android:mimeType="video/*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="audio/*" />
<data android:mimeType="image/*" />
<data android:mimeType="video/*" />
</intent-filter>
</activity>
<activity
android:name="com.iw.show.ThumbActivity"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation|screenSize|screenLayout"
android:hardwareAccelerated="true"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
<activity
android:name="com.iw.show.SlideShowActivity"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Holo.NoActionBar" >
</activity>
<activity
android:name="com.iw.show.PreviewActivity"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
<activity
android:name="com.iw.show.LoginActivity"
android:alwaysRetainTaskState="true"
android:isScrollContainer="true"
android:theme="@android:style/Theme.Black.NoTitleBar"
android:windowSoftInputMode="adjustPan" >
</activity>
<activity
android:name="com.iw.show.ForgotPasswordActivity"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Dialog" >
</activity>
<activity
android:name="com.iw.show.BecomeaMemberActivity"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Dialog" >
</activity>
<activity
android:name="com.iw.show.DomainExpiredActivity"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>
<activity
android:name="com.iw.show.MediaPlayerActivity"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Holo.NoActionBar" >
</activity>
<activity
android:name="com.iw.show.ShareActivity"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Black.NoTitleBar"
android:windowSoftInputMode="adjustPan" >
</activity>
<activity
android:name="com.iw.show.ShareSendAgainActivity"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
<activity
android:name="com.iw.show.MenuActivity"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
<activity
android:name="com.iw.show.ViewShowList"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTop"
android:theme="@android:style/Theme.Black.NoTitleBar" >
<intent-filter>
<data
android:host="*.showontherun.com"
android:scheme="http" />
<data
android:host="*.showonthecloud.com"
android:scheme="http" />
<category android:name="android.intent.category.DEFAULT" />
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.ALL_APPS" />
</intent-filter>
</activity>
<activity
android:name="com.iw.show.ShowInfoPage"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Black.NoTitleBar" >
</activity>
<activity
android:name="com.iw.show.SupportActivity"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.NoTitleBar"
android:windowSoftInputMode="adjustPan" >
</activity>
<activity
android:name="com.iw.sotc.show.offline.ViewOfflineShows"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.NoTitleBar"
android:windowSoftInputMode="adjustPan" >
</activity>
<activity
android:name="com.iw.sotc.show.offline.ViewOfflineThumbActivity"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.NoTitleBar"
android:windowSoftInputMode="adjustPan" >
</activity>
<activity
android:name="com.iw.sotc.show.offline.ViewOfflinePreviewPage"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.NoTitleBar"
android:windowSoftInputMode="adjustPan" >
</activity>
<activity
android:name="com.iw.sotc.show.offline.SlideShowOfflineActivity"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Holo.NoActionBar"
android:windowSoftInputMode="adjustPan" >
</activity>
<activity
android:name="com.iw.sotc.dialog.SaveShowDialogActivity"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Dialog"
android:windowSoftInputMode="adjustPan" >
</activity>
<activity
android:name="org.acra.CrashReportDialog"
android:excludeFromRecents="true"
android:finishOnTaskLaunch="true"
android:launchMode="singleInstance"
android:theme="@style/InfoDialog" >
</activity>
<service android:name="com.iw.sotc.show.offline.DownloadService" >
</service>
<service android:name="com.iw.show.DownloadActivityPreviewActivity" >
</service>
<service android:name="com.iw.show.MediaPlayerService" >
</service>
<service android:name="com.iw.show.UploadingService" >
</service>
<service android:name="com.iw.show.UploadLinkService" >
</service>
<activity
android:name="com.iw.show.UploadMedia"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation"
android:label="@string/title_activity_upload_media"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >
</activity>
<activity
android:name="com.iw.show.MediaPlayer"
android:alwaysRetainTaskState="true"
android:label="@string/title_activity_media_player" >
</activity>
<!--
added by Karthikeyan V
for managing the mixpanel api survey
-->
<activity android:name="com.mixpanel.android.surveys.SurveyActivity" />
<meta-data
android:name="com.mixpanel.android.MPConfig.AutoCheckForSurveys"
android:value="false" />
<!-- added for cloud to Device(C2DM)Messaging service -->
<receiver
android:name="com.mixpanel.android.mpmetrics.GCMReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.iw.show" />
</intent-filter>
</receiver>
<!-- < added by siva for play the audio by streaming > -->
<activity
android:name="com.iw.show.AudioStream"
android:configChanges="keyboardHidden|orientation"
android:launchMode="singleTask" >
</activity>
<!-- added for mixpanel in-app notification -->
<meta-data
android:name="com.mixpanel.android.MPConfig.AutoShowMixpanelUpdates"
android:value="false" />
<!-- Statring Urban Airship from here -->
<!-- Required for the library -->
<provider
android:name="com.urbanairship.UrbanAirshipProvider"
android:authorities="com.iw.show.urbanairship.provider"
android:exported="true"
android:multiprocess="true"
android:permission="com.iw.show.permission.UA_DATA" />
<!-- Required for Push -->
<service android:name="com.urbanairship.push.PushService" />
<receiver android:name="com.urbanairship.CoreReceiver" />
<receiver
android:name="com.urbanairship.push.GCMPushReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.iw.show" />
</intent-filter>
<!-- Required for detecting when the application is upgraded so it can request a new GCM ID -->
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data android:scheme="com.iw.show" />
</intent-filter>
</receiver>
<!-- Required for analytics -->
<service android:name="com.urbanairship.analytics.EventService" />
<!-- Required for Rich Push -->
<service android:name="com.urbanairship.richpush.RichPushUpdateService" />
<!-- Required for Actions -->
<activity android:name="com.urbanairship.actions.ActionActivity" />
<service android:name="com.urbanairship.actions.ActionService" />
<!-- Required for Landing Page Action -->
<activity
android:name="com.urbanairship.actions.LandingPageActivity"
android:exported="false"
android:parentActivityName="com.iw.show.SplashActivity" >
<!-- MODIFICATION REQUIRED set or remove the parent activity -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.iw.show.SplashActivity" />
<intent-filter>
<action android:name="com.urbanairship.actions.SHOW_LANDING_PAGE_INTENT_ACTION" />
<data android:scheme="http" />
<data android:scheme="https" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<receiver android:name="com.iw.show.IntentReceiver" />
<!-- upto the above line -->
</application>
还有我的申请文件我的应用程序.java
public class MyApplication extends Application {
public static String APID = null;
public static String TAG = "MyApplication";
//UsersDataSource userDataSource;
@Override
public void onCreate() {
super.onCreate();
//To init ACRA for getting crash report or uncaught exception
ACRA.init(this);
//added by Karthikeyan
// to implement the push notification feature
AirshipConfigOptions options = AirshipConfigOptions.loadDefaultOptions(this);
options.developmentAppKey = "o3uZHRo7....bYJQ";
options.developmentAppSecret = "u9PaC9T....OtjOw";
options.pushServiceEnabled = true;
options.inProduction = false; //determines which app key to use
options.gcmSender ="12digit_Project_Number";
UAirship.takeOff(this,options);
PushManager.enablePush();
APID = PushManager.shared().getAPID();
Logger.info("APID in MyApplication :" + APID);
PushManager.shared().setIntentReceiver(IntentReceiver.class);
//Update the user table for APID when it has value
/*if(APID != null)
{
userDataSource = new UsersDataSource(this);
userDataSource.open();
// userDataSource.getAllUserIDs();
}*/
/*CustomPushNotificationBuilder nb = new CustomPushNotificationBuilder();
nb.layout = R.layout.custom_notification; // The layout resource to use
nb.layoutIconDrawableId = R.drawable.icon; // The icon you want to display
nb.layoutIconId = R.id.icon; // The icon's layout 'id'
nb.layoutSubjectId = R.id.subject1; // The id for the 'subject' field
nb.layoutMessageId = R.id.message1; // The id for the 'message' field
//set this ID to a value > 0 if you want a new notification to replace the previous one
nb.constantNotificationId = 100;
//set this if you want a custom sound to play
//nb.soundUri = Uri.parse("android.resource://"+this.getPackageName()+"/" +R);
// Set the builder
PushManager.shared().setNotificationBuilder(nb);*/
}
还有我的 IntentReceiver.java
public class IntentReceiver extends BroadcastReceiver {
// A set of actions that launch activities when a push is opened. Update
// with any custom actions that also start activities when a push is opened.
private static String[] ACTIVITY_ACTIONS = new String[] {
DeepLinkAction.DEFAULT_REGISTRY_NAME,
OpenExternalUrlAction.DEFAULT_REGISTRY_NAME,
LandingPageAction.DEFAULT_REGISTRY_NAME };
public static String notify_url = null;
private String TAG = "IntentReceiver";
@Override
public void onReceive(Context context, Intent intent) {
if (Constants.DEBUG) {
notify_url = intent.getStringExtra("shared url");
if(notify_url != null)
Log.d("IntentReceiver", "Intent receiver data :" + notify_url);
Bundle bundle = intent.getExtras();
Log.d("IntentReceiver", "android value in received bundle :"
+ bundle.get("com.urbanairship.push.ALERT"));
Log.d("IntentReceiver", "Json possible data 1:" + bundle);
Log.d("IntentReceiver",
"Json possible data 2:" + intent.getStringExtra("alert"));
Log.d("IntentReceiver",
"Json possible data 3:" + intent.getStringExtra("apids"));
}
if (Constants.DEBUG)
Log.d("IntentReceiver", "called IntentReceiver onReceive method");
/*for (int i = 0; i < ACTIVITY_ACTIONS.length; i++)
if (ACTIVITY_ACTIONS[i]
.equals(PushManager.ACTION_REGISTRATION_FINISHED)) {
Log.i(TAG,
"Registration complete. APID:"
+ intent.getStringExtra(PushManager.EXTRA_APID)
+ ". Valid: "
+ intent.getBooleanExtra(
PushManager.EXTRA_REGISTRATION_VALID,
false));
// Notify any app-specific listeners
MyApplication.APID = PushManager.shared().getAPID();
if(Constants.DEBUG)
Log.d(TAG,"APID in MyApplication in Intent Receiver :"+MyApplication.APID);
Intent launch = new Intent(UAirship.getPackageName()
+ PushManager.A);
UAirship.shared().getApplicationContext().sendBroadcast(launch);
}*/
if (PushManager.ACTION_PUSH_RECEIVED.equals(intent.getAction())) {
// Push received
} else if (PushManager.ACTION_NOTIFICATION_OPENED.equals(intent
.getAction())) {
// Push opened
// Only launch the main activity if the payload does not contain any
// actions that might have already opened an activity
if(notify_url != null)
{
if (!ActionUtils.containsRegisteredActions(intent.getExtras(),
ACTIVITY_ACTIONS))
{
Intent launch = new Intent(Intent.ACTION_MAIN);
launch.setClass(context, ViewShowList.class);
launch.setData(Uri.parse(notify_url));
launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(launch);
}
}
else
{
if (!ActionUtils.containsRegisteredActions(intent.getExtras(),
ACTIVITY_ACTIONS)) {
Intent launch = new Intent(Intent.ACTION_MAIN);
launch.setClass(context, ThumbActivity.class);
launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(launch);
}
}
}
}
供您引用,我有以下 Urban Airship 文档。
以上文件是否遗漏了什么
最佳答案
当 UrbanAirship 代表您向 GCM 注册时,它会使用您提供给它的 12 位项目编号并从 Google 接收注册 ID。该注册 ID 与用于获取它的项目编号相关联。
当您发送 GCM 消息时,您使用 API key 连接到 GCM 服务器(我不确定您是直接连接还是通过 UrbanAirship,但这并不重要)。 API key 属于具有项目编号的 API 项目。
不匹配的发件人 ID
当您尝试使用属于项目编号 A 的 API key 和属于项目编号 B 的注册 ID 发送 GCM 消息时发生。
您可能在某个时候更改了正在使用的项目编号。如果你这样做了,解决这个问题的方法是清除旧的注册 ID(属于旧项目编号)并获得新的。我不确定您如何清理 UrbanAirship 存储的注册 ID(在您的应用程序数据中本地,或在 UrbanAirship 服务器中),但一定有办法。
关于android - 应用程序无权发送到此设备 : collapsed-count: 2 in Urban Airship android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24401642/
我有一个非常简单的问题,但搜索没有让我找到答案。在我的 application:didFinishLaunchingWithOptions 方法中,我执行以下操作来恢复程序未运行时传入的通知: //
我正在从 parse.com 迁移到 Urban Airship ,我几乎完成了,一切正常,但有一件事。当我的应用程序打开时,会向警报 View 发送推送通知不是 正在显示。如果我将应用程序放在 背景
我已按照 UA 教程进行操作并获取了我的 APID,并在我的 Android 设备上成功收到了测试推送消息。 现在我想做的下一件事是使用 JAVA 定位我的设备并发送推送消息。据我目前所知,实现这一目
我正在尝试学习 Urban Airship。看起来很容易,对吧?出色地。我只有两个问题,我似乎无法回答。 首先,我已经在我的用户 ID 下设置了开发中的所有内容。向我的手机发送消息效果很好。惊人的!但
我在我的项目中使用 Urban 飞艇,但是当我编写代码时它显示此错误请给我任何解决方案。 10-15 07:57:54.472: E/AndroidRuntime(1427): FATAL EXCEP
感谢之前的回复, 我们如何通过程序在设备 token 中设置别名和标签。我引用了飞艇文档,我发现我们可以使用 setAliasandTags 函数设置别名和标签,谁能指导我如何在 android 中执
我会逐步说明情况 我已经按照 the guide 实现了 Urban Airship 当消息来自服务器时,我的应用会自动显示通知,这是我不想要的 我想要的是处理来自服务器的消息并能够手动显示我的通知
如何将Android中的通知消息更改为本地化?我只想更改从 Urban AirShip 获得的消息,然后它才会显示在通知栏上? 最佳答案 您可以使用此方法:PushManager.shared().s
我正在考虑实现拇指系统,但我的系统需要注册,因此排除了人们多次投票的可能性,除非他们创建一个新帐户来这样做。所以我想知道 Urban Dictionary 的拇指系统。它是如何工作的?我想我的 IP
感谢之前的回复, 我对 Urban_Airship 很陌生,并将其集成到我的 android 应用程序中,我真的不知道什么是 Urban Airship 的别名,谁能指导我了解什么是别名以及如何在中设
我正在使用 php 客户端向 Urban Airship 发送通知请求。为此,我在下面提到了链接。 https://support.urbanairship.com/entries/70144047-
在创建新的生产 APNS 证书时,Apple 现在会创建一个组合的沙盒和生产证书: 上传到 Urban Airship 时,Urban Airship 报错说它是 Sandbox 证书。 我们已经联系
我正在尝试将 UrbanAirship 集成到我的项目中,但出现以下错误: 2016-08-25 16:26:23.898 Fibre[7758:368753] [E] __52+[UAirship
我想从 Urban Airship 发送的额外键值中获取值。请帮助如何获得这些值。我能够收到推送通知。但我不知道如何从有效负载中获取数据。 public class IntentReceiver ex
我在尝试将 Urban Airship PUSH 通知集成到我的 Android 应用程序时遇到问题。 我认为我已经在 AndroidManifest 集中获得了我的所有权限和 Intent 过滤器,
我已成功实现 Urban airship for development 。我创建了一个生产应用程序并在 airshipConfig 文件中设置 key 和 secret ,其中临时:是。我为生产生成
如何在android中实现 Urban Airship ?我从下载样本 here .我运行我得到安装选项的应用程序。安装后我什么也得不到。其实我不知道如何用android设置 Urban Airshi
我在使用 Urban Airship 时遇到问题,特别是在为 Rich Push 注册用户时。我在 AppDelegate 中有以下代码 //Create Airship options dictio
使用 Xcode 5.0 升级到 UrbanAirship 3.0.0,调用此代码时出现错误: [UAirship takeOff:config]; 错误是 +[NSJSONSerialization
我在安装我的应用程序时收到以下 NPE。请帮忙。 07-22 16:27:06.380: E/UA AP(6071): Unable to takeOff automatically 07-22 16
我是一名优秀的程序员,十分优秀!